diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3a19bc34edf..66d1598d898 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,28 +1,26 @@ -# This list auto requests reviews from the specified maintainer when a PR that modifies the file in question is opened -# This list is alphabetized by User -> Filename KEEP IT THAT WAY -# In the event that multiple org members are to be informed of changes to the same file or dir, add them to the end under Multiple Owners -# This is ONLY for taking ownership of server-critical code which must be written in a very specific way for the server to operate at all. +# This list auto requests reviews from the specified org members +# when a PR that modifies the file in question is opened +# This list is alphabetized by User -> Filename and separated into sections for Maintainers/Contributors KEEP IT THAT WAY +# In the event that people are to be informed of changes +# to the same file or dir, add them to the end of under Multiple Owners -### AffectedArc07 -# Actual Code -/code/controllers/subsystem/mapping.dm @AffectedArc07 -/code/controllers/subsystem/ticker.dm @AffectedArc07 -/tgui/ @AffectedArc07 -# CI + Tooling -/.github/workflows/ @AffectedArc07 -/code/modules/unit_tests/ @AffectedArc07 -/tools/ci/ @AffectedArc07 +# MAINTAINERS -# Executables that need to be security-cleared -dreamchecker.exe @AffectedArc07 -rust_g.dll @AffectedArc07 +### azizonkg +# CI + Tooling +/.github/workflows/ @Bizzonium +/code/modules/unit_tests/ @Bizzonium +/tools/ci/ @Bizzonium +_build_dependencies.sh @Bizzonium +# Server Stuff +/SQL/ @Bizzonium +/config/ @Bizzonium +# Executables that need to be security-cleared +dreamchecker.exe @Bizzonium +rust_g.dll @Bizzonium -### Fox-McCloud -/code/ATMOSPHERICS/ @Fox-McCloud -/code/controllers/subsystem/air.dm @Fox-McCloud -/code/controllers/subsystem/garbage.dm @Fox-McCloud -/code/modules/reagents/chemistry/holder.dm @Fox-McCloud -/code/modules/reagents/chemistry/reagents.dm @Fox-McCloud +# MULTIPLE OWNERS +/_maps/ @ss220-space/map-reviewers diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 82452dac133..6b7f1882c85 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -56,22 +56,28 @@ actual development. * While we have no issue helping contributors (and especially new contributors) bring reasonably sized contributions up to standards via the pull request review process, larger contributions are expected to pass a higher bar of completeness and code quality *before* you open a pull request. Maintainers may close such pull requests that are deemed to be substantially flawed. You should take some time to discuss with maintainers or other contributors on how to improve the changes. -#### Using Changelog - * Tags used in changelog include add/rscadd, del/rscdel, fix/fixes, typo/spellcheck. - * Without specifying a name it will default to using your GitHub name. - Some examples -``` -:cl: -add: The ability to change the color of wires -del: Deleted depreciated wire merging now handled in parent -fix: Moving wires now follows the user input instead of moving the stack -/:cl: -``` +#### Использование Changelog +Перед вашим заголовком PR, требуется поставить корректный тэг, чтобы в игре Changelog его правильно отображал. + +Пример: ``` -:cl: N3X15 -typo: Fixes some misspelled words under Using Changelog -/:cl: +bugfix: clothing removes itself trying to adjust it. +add: new lavaland elite mob ``` +Список тегов для PRa: +* **add:** если Вы добавили новую фичу +* **admin:** если меняете что-то важно связанное с администрацией.(Кнопки, управления, панели, щитспавн) +* **balance:** если производите балансировку в игре.(Изменение цифры урона, баффы или нерфы предмета/моба) +* **bugfix:** если Вы исправили некий баг +* **code_imp:** если имплементируете новое для билда, не меняя при этом ничего в самой игре. +* **config:** если меняете перестановку конфигов или меняете работу SQL. (По этому поводу обращаться стоит с хосту) +* **imageadd:** если просто поменяли спрайты, без затрагивания кода +* **soundadd:** если просто добавили новые звуки, без затрагивания кода +* **spellcheck:** если исправляете грамматику в коде. +* **tweak:** если Вы сделали незначительную правку (например изменили одно число на другое) +* **refactor:** если Вы полностью переписали старый код, улучшив его, НО не изменив функционал +* **qol:** если Ваше изменение не влияет на баланс, а только улучшает взаимодействие между игрой и игроком +* **wip:** если Ваш PR в драфте и планируется длительная разработка (можно не ставить) ## Specifications @@ -377,12 +383,14 @@ This prevents nesting levels from getting deeper then they need to be. #define MACRO_ONE (1<<0) #define MACRO_TWO (1<<1) #define MACRO_THREE (1<<2) + #define MACRO_ALL (~0) ``` Is preferable to ``` #define MACRO_ONE 1 #define MACRO_TWO 2 #define MACRO_THREE 4 + #defin MACRO_ALL 7 // or 16777215 as more accurate ``` This make the code more readable and less prone to error diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 41eafd04713..9fa21d1ccf3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,7 @@ on: branches: - master220 - whitelist220 + merge_group: workflow_call: jobs: @@ -65,7 +66,7 @@ jobs: fail-fast: false # Let all map tests run to completion matrix: maptype: ['/datum/map/cyberiad', '/datum/map/delta', '/datum/map/cerestation'] - byondtype: ['STABLE'] # 'BETA' + byondtype: ['STABLE'] services: mariadb: image: mariadb:latest diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 15768fdcf23..9b12f1b949c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -43,13 +43,23 @@ on: default: true jobs: + check: + name: Check User Permission + runs-on: ubuntu-latest + steps: + - uses: skjnldsv/check-actor-permission@v3 + with: + require: 'admin' + CI: + needs: [check] uses: ./.github/workflows/ci.yml # use the callable tests job to run tests if: ${{ inputs.ci_required }} update-isp-lists: name: Update ISP Lists runs-on: ubuntu-latest + needs: [check] steps: - name: Update ISP Lists @@ -64,6 +74,7 @@ jobs: set-matrix: name: Set Deployment Matrix runs-on: ubuntu-latest + needs: [check] outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: @@ -101,7 +112,7 @@ jobs: fail-fast: false matrix: ${{fromJson(needs.set-matrix.outputs.matrix)}} environment: ${{ matrix.environment }} - needs: [update-isp-lists, CI, set-matrix] + needs: [check, update-isp-lists, CI, set-matrix] if: always() && !cancelled() && !failure() steps: diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index e537cd3b5ae..e883090be14 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -67,6 +67,7 @@ CREATE TABLE `characters` ( `med_record` longtext COLLATE utf8mb4_unicode_ci NOT NULL, `sec_record` longtext COLLATE utf8mb4_unicode_ci NOT NULL, `gen_record` longtext COLLATE utf8mb4_unicode_ci NOT NULL, + `exploit_record` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL, `disabilities` mediumint(8) NOT NULL, `player_alt_titles` longtext COLLATE utf8mb4_unicode_ci NOT NULL, `organ_data` longtext COLLATE utf8mb4_unicode_ci NOT NULL, @@ -288,6 +289,7 @@ CREATE TABLE `player` ( `discord_name` varchar(32) NULL DEFAULT NULL, `keybindings` longtext COLLATE 'utf8mb4_unicode_ci' DEFAULT NULL, `viewrange` VARCHAR(5) NOT NULL DEFAULT '17x15' COLLATE 'utf8mb4_general_ci', + `ghost_darkness_level` tinyint(1) UNSIGNED NOT NULL DEFAULT '255', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`), KEY `lastseen` (`lastseen`), diff --git a/SQL/updates/31-32.sql b/SQL/updates/31-32.sql new file mode 100644 index 00000000000..90e2d119a9b --- /dev/null +++ b/SQL/updates/31-32.sql @@ -0,0 +1,5 @@ +# Add exploit records +ALTER TABLE `characters` + ADD COLUMN `exploit_record` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL AFTER `gen_record`; +# Adds support for persistent ghost darkness +ALTER TABLE `player` ADD COLUMN `ghost_darkness_level` tinyint(1) UNSIGNED NOT NULL DEFAULT '255' diff --git a/_build_dependencies.sh b/_build_dependencies.sh index e79eac66dcd..db172ae6b93 100644 --- a/_build_dependencies.sh +++ b/_build_dependencies.sh @@ -4,17 +4,17 @@ export SPACEMANDMM_TAG=suite-1.7.1 # For TGUI export NODE_VERSION=18 # Stable Byond Major -export STABLE_BYOND_MAJOR=514 +export STABLE_BYOND_MAJOR=515 # Stable Byond Minor -export STABLE_BYOND_MINOR=1575 +export STABLE_BYOND_MINOR=1630 # Beta Byond Major export BETA_BYOND_MAJOR=515 # Beta Byond Minor -export BETA_BYOND_MINOR=1606 +export BETA_BYOND_MINOR=1630 # For the RUSTG library. Not actually installed by CI but kept as a reference export RUSTG_VERSION=3.0.0-ss220 #For DMJIT librarry -export DMJIT_VERSION=v0.1.0 +export DMJIT_VERSION=v0.1.2 # Python version for mapmerge and other tools export PYTHON_VERSION=3.11.6 diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index 3c03921f9ec..fb2f89c352a 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -14,9 +14,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /mob/living/simple_animal/mouse/gray, /turf/simulated/floor/plating, /area/maintenance/fore) @@ -47,7 +44,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "aah" = ( @@ -130,8 +127,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "aap" = ( @@ -142,9 +138,6 @@ dir = 1; on = 1 }, -/obj/machinery/ai_status_display{ - pixel_y = 32 - }, /obj/structure/cable{ icon_state = "2-4" }, @@ -230,7 +223,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /mob/living/simple_animal/parrot/Poly, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/chief) @@ -273,8 +265,7 @@ /mob/living/simple_animal/mouse/brown, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHWEST)" + icon_state = "whiteblue" }, /area/maintenance/starboard) "aaA" = ( @@ -323,7 +314,6 @@ /mob/living/simple_animal/mouse, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -570,7 +560,6 @@ dir = 5 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -591,7 +580,6 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/cable{ @@ -1073,8 +1061,7 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/explab) "ajz" = ( @@ -1146,6 +1133,23 @@ icon_state = "neutral" }, /area/engine/mechanic_workshop/expedition) +"ajY" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/junction{ + dir = 8; + tag = "icon-pipe-j2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "purplefull" + }, +/area/medical/research/nhallway) "ake" = ( /obj/machinery/light{ dir = 4 @@ -1497,8 +1501,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "anN" = ( @@ -1552,13 +1555,10 @@ /turf/simulated/floor/plating, /area/security/permabrig) "aob" = ( -/obj/machinery/recharge_station, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" - }, -/area/medical/research/restroom) +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "aoc" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -1877,7 +1877,6 @@ "aqe" = ( /obj/effect/landmark/start/trainee_engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -2241,23 +2240,6 @@ /obj/machinery/suit_storage_unit/standard_unit, /turf/simulated/floor/plasteel, /area/engine/mechanic_workshop/expedition) -"asU" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - id = "courtroom" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/crew_quarters/courtroom) "asX" = ( /obj/structure/dispenser/oxygen, /turf/simulated/floor/plasteel, @@ -2389,9 +2371,7 @@ }, /area/security/warden) "auo" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -2804,6 +2784,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fore) "axa" = ( @@ -2995,9 +2976,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "ayr" = ( @@ -3013,8 +2992,9 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/entry/westarrival) "ays" = ( +/obj/effect/spawner/window/reinforced, /obj/structure/disposalpipe/segment, -/turf/simulated/wall, +/turf/simulated/floor/plating, /area/quartermaster/sorting) "ayv" = ( /obj/machinery/navbeacon{ @@ -3214,9 +3194,7 @@ }, /area/hallway/secondary/entry/additional) "aAt" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -3229,9 +3207,7 @@ /turf/simulated/floor/plating, /area/maintenance/banya) "aAv" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/decal/remains/human, /turf/simulated/floor/carpet/black, /area/maintenance/casino) @@ -3245,6 +3221,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint4) +"aAy" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/bridge/checkpoint/south) "aAB" = ( /obj/structure/chair/comfy/red{ dir = 4 @@ -3359,9 +3342,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -3499,9 +3480,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "aBF" = ( @@ -3731,9 +3710,7 @@ desc = "Главный помощник архитектора станции."; real_name = "Инспектор Мышь" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 8 }, @@ -3770,17 +3747,14 @@ pixel_x = -2 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "aDm" = ( /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /obj/effect/spawner/random_spawners/blood_maybe, /turf/simulated/floor/wood/fancy/oak, @@ -3893,13 +3867,13 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "aEh" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/toolbox/mechanical, +/obj/machinery/vending/coffee, +/obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 10; + icon_state = "whitepurple" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "aEi" = ( /obj/structure/table/reinforced, /obj/item/storage/firstaid/regular, @@ -3925,9 +3899,7 @@ /area/maintenance/fore) "aEm" = ( /obj/item/twohanded/required/kirbyplants, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "1-8" }, @@ -3964,7 +3936,7 @@ tag = "icon-pipe-j1 (EAST)" }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "aEp" = ( @@ -4080,7 +4052,6 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -4225,9 +4196,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "aGt" = ( @@ -4235,9 +4204,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "aGu" = ( @@ -4267,9 +4234,7 @@ pixel_y = -32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "aGx" = ( @@ -4287,9 +4252,7 @@ dir = 9 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "aGz" = ( @@ -4435,9 +4398,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "aHE" = ( @@ -4498,7 +4459,6 @@ /turf/simulated/wall, /area/bridge/checkpoint/north) "aIm" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -4524,7 +4484,6 @@ }, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -4539,7 +4498,6 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -4619,9 +4577,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "aJa" = ( @@ -4694,14 +4650,11 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "aJy" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -4744,6 +4697,9 @@ pixel_x = 7; pixel_y = -7 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore) "aJF" = ( @@ -4835,9 +4791,7 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/entry/eastarrival) "aKe" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/trading) "aKg" = ( @@ -4922,7 +4876,7 @@ dir = 1; layer = 4.2 }, -/obj/structure/railing/wooden/endr{ +/obj/structure/railing/wooden/cornerr{ dir = 1 }, /turf/simulated/floor/wood/fancy/light{ @@ -5111,7 +5065,6 @@ "aLv" = ( /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -5155,7 +5108,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -5278,7 +5230,6 @@ }, /obj/machinery/computer/atmoscontrol, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -5289,7 +5240,6 @@ }, /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -5566,6 +5516,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -5606,9 +5560,7 @@ /turf/space, /area/solar/auxport) "aOL" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, @@ -5663,6 +5615,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fore) "aOT" = ( @@ -5751,7 +5704,6 @@ pixel_x = -28 }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -6026,7 +5978,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -6040,8 +5991,7 @@ }, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "aRo" = ( @@ -6064,9 +6014,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "aRG" = ( @@ -6138,16 +6086,11 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plating, /area/maintenance/fore) "aSh" = ( /obj/effect/turf_decal/siding/wood, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -6180,8 +6123,7 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/sleeper) "aSF" = ( @@ -6305,9 +6247,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -6395,9 +6335,7 @@ }, /area/maintenance/trading) "aTB" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -6440,7 +6378,6 @@ }, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -6467,7 +6404,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -6718,9 +6654,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "aVg" = ( @@ -6729,7 +6663,6 @@ }, /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -6745,7 +6678,6 @@ }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -6756,7 +6688,6 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -6819,9 +6750,7 @@ /obj/item/twohanded/required/kirbyplants, /obj/structure/railing, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "aWr" = ( @@ -6926,8 +6855,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/crew_quarters/fitness) "aWY" = ( @@ -6942,9 +6870,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "aXc" = ( @@ -6995,7 +6921,6 @@ /obj/item/paper_bin, /obj/item/pen, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/engineering/monitor) @@ -7013,7 +6938,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -7056,9 +6980,7 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "aXB" = ( @@ -7205,9 +7127,7 @@ }, /obj/machinery/computer/station_alert, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/engine/engineering) "aYE" = ( @@ -7217,9 +7137,7 @@ }, /obj/machinery/computer/atmos_alert, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/engine/engineering) "aYF" = ( @@ -7399,6 +7317,10 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/fore) "aZp" = ( @@ -7437,6 +7359,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore) "aZz" = ( @@ -7449,6 +7374,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/fore) "aZA" = ( @@ -7509,7 +7438,6 @@ name = "Труба смешивания" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -7560,7 +7488,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -7685,6 +7612,13 @@ "bbl" = ( /turf/simulated/floor/plating, /area/maintenance/fore) +"bbm" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "bbw" = ( /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7710,16 +7644,6 @@ icon_state = "darkblue" }, /area/crew_quarters/theatre) -"bbJ" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" - }, -/area/medical/research/restroom) "bbN" = ( /obj/machinery/light{ dir = 4 @@ -7826,9 +7750,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "bcf" = ( @@ -7844,7 +7766,7 @@ }, /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "bck" = ( @@ -7935,7 +7857,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/asmaint4) @@ -8068,8 +7989,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/prisonershuttle) "bdY" = ( @@ -8152,9 +8072,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "beY" = ( @@ -8367,8 +8285,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "bgs" = ( @@ -8400,7 +8317,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/holding_cell) @@ -8549,10 +8465,7 @@ req_access = list(38) }, /obj/structure/table/reinforced, -/turf/simulated/floor/plasteel{ - icon_state = "cult"; - tag = "icon-cult" - }, +/turf/simulated/floor/wood/fancy/cherry, /area/lawoffice) "bhn" = ( /obj/machinery/navbeacon{ @@ -8616,9 +8529,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -8633,9 +8543,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -8651,9 +8559,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -8789,9 +8694,7 @@ }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "biq" = ( @@ -8912,8 +8815,7 @@ pixel_y = 22 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "bjg" = ( @@ -9045,7 +8947,6 @@ "bjC" = ( /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -9731,9 +9632,7 @@ }, /area/hallway/secondary/entry) "bnk" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/item/clothing/suit/hooded/wintercoat/medical, /obj/item/clothing/suit/hooded/wintercoat/hydro, /obj/item/clothing/suit/hooded/wintercoat/security, @@ -9772,11 +9671,8 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -9820,7 +9716,6 @@ location = "A15" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/north) @@ -9878,6 +9773,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/fore) "boJ" = ( @@ -9962,6 +9861,9 @@ /obj/structure/barricade/wooden{ layer = 3.5 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore) "bph" = ( @@ -9978,6 +9880,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore) "bpm" = ( @@ -9996,6 +9901,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore) "bpo" = ( @@ -10016,7 +9924,6 @@ "bpv" = ( /obj/machinery/atmospherics/pipe/manifold/visible/yellow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -10027,7 +9934,6 @@ name = "Труба на фильтрацию" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -10043,6 +9949,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/fore) "bpK" = ( @@ -10054,22 +9964,9 @@ /area/atmos) "bpR" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/maintenance{ - name = "Break Room Maintenance"; - req_access = list(47) - }, -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "white" + icon_state = "0-2" }, +/turf/simulated/floor/plating, /area/maintenance/asmaint2) "bpU" = ( /obj/machinery/door/airlock/maintenance{ @@ -10087,9 +9984,7 @@ /obj/item/flag/species/human{ icon_state = "humanflag_rolled" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/crew_quarters/trading) "bqc" = ( @@ -10216,9 +10111,7 @@ /obj/structure/railing{ dir = 5 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -10239,14 +10132,15 @@ /turf/simulated/floor/plasteel, /area/engine/mechanic_workshop) "brk" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/reagent_dispensers/fueltank/chem{ pixel_x = 32; pixel_y = 32 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Mechanic"; + sortType = 30 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "yellow" @@ -10317,13 +10211,14 @@ /turf/simulated/floor/plating, /area/quartermaster/storage) "brG" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Mechanic Workshop"; - req_access = list(70) +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkyellow" + }, +/area/engine/mechanic_workshop/hangar) "brI" = ( /obj/structure/cable{ icon_state = "4-8" @@ -10354,6 +10249,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -10370,6 +10268,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -10452,7 +10353,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -10475,7 +10375,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -10492,12 +10391,6 @@ icon_state = "yellowfull" }, /area/engine/controlroom) -"bsA" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, -/turf/simulated/floor/plating, -/area/maintenance/fpmaint) "bsB" = ( /obj/structure/cable{ icon_state = "1-8" @@ -10511,9 +10404,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "bsC" = ( @@ -10534,9 +10425,7 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "bsE" = ( @@ -10657,7 +10546,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -10698,7 +10586,6 @@ name = "Труба турбины" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -10913,6 +10800,10 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1 }, @@ -10985,7 +10876,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -11056,9 +10946,7 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "buK" = ( @@ -11162,7 +11050,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -11174,7 +11061,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -11186,7 +11072,6 @@ dir = 9 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -11196,7 +11081,6 @@ }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -11282,7 +11166,6 @@ name = "Труба на фильтрацию" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -11334,9 +11217,7 @@ }, /area/atmos) "bvV" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/alarm{ dir = 1; pixel_y = -25 @@ -11415,9 +11296,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "bwj" = ( @@ -11444,9 +11323,7 @@ pixel_y = 33 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "bwl" = ( @@ -11468,7 +11345,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -11562,7 +11438,6 @@ /obj/structure/chair/office/dark, /obj/effect/landmark/start/atmospheric, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -11606,7 +11481,6 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -11974,7 +11848,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -12028,6 +11901,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fore) "byN" = ( @@ -12061,7 +11935,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -12159,7 +12032,6 @@ "bzi" = ( /obj/structure/dispenser, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -12169,7 +12041,6 @@ /obj/item/crowbar/red, /obj/item/stack/sheet/mineral/plasma, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -12253,7 +12124,6 @@ }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/permahallway) @@ -12369,9 +12239,7 @@ pixel_x = -32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "bzY" = ( @@ -12394,7 +12262,6 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -12529,7 +12396,6 @@ "bAv" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -12634,7 +12500,6 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -12699,9 +12564,7 @@ }, /area/quartermaster/delivery) "bBf" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -12867,6 +12730,9 @@ }, /obj/item/c_tube, /obj/effect/decal/cleanable/blood, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore) "bBK" = ( @@ -12892,7 +12758,6 @@ pixel_y = -5 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -12913,7 +12778,6 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -12931,9 +12795,7 @@ /turf/simulated/floor/plating, /area/maintenance/disposal) "bBV" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ icon_state = "1-2" @@ -13078,8 +12940,7 @@ /obj/machinery/light/small, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "vault"; - tag = "icon-vault (WEST)" + icon_state = "vault" }, /area/bridge) "bCr" = ( @@ -13092,12 +12953,8 @@ }, /area/bridge) "bCv" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, /obj/structure/closet, /obj/item/clothing/under/rank/security/formal, /obj/item/clothing/under/rank/warden/formal, @@ -13124,9 +12981,7 @@ /area/security/processing) "bCC" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/item/clothing/suit/ghost_sheet, /obj/item/paper/deltainfo, /obj/machinery/light_construct, @@ -13141,9 +12996,7 @@ /area/space) "bCJ" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/item/coin/iron, /obj/machinery/alarm{ dir = 1; @@ -13185,21 +13038,6 @@ icon_state = "hydrofloor" }, /area/crew_quarters/kitchen) -"bCN" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "privateroom" - }, -/obj/structure/window/reinforced/polarized{ - id = "privateroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "privateroom" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/crew_quarters/serviceyard) "bCO" = ( /obj/machinery/firealarm{ dir = 4; @@ -13211,9 +13049,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "bCP" = ( @@ -13239,18 +13075,14 @@ /area/maintenance/kitchen) "bDb" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/item/folder, /obj/effect/spawner/lootdrop/officetoys, /turf/simulated/floor/plating, /area/crew_quarters/trading) "bDd" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/item/paper_bin{ pixel_x = -2; pixel_y = 7 @@ -13321,7 +13153,6 @@ /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -13334,7 +13165,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/item/paper_bin, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -13353,7 +13183,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -13404,8 +13233,14 @@ icon_state = "yellowcorner" }, /area/storage/primary) +"bDP" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/medical/research/nhallway) "bDR" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/glass{ name = "Bridge West Hallway"; @@ -13516,6 +13351,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fore) "bEh" = ( @@ -13634,9 +13470,7 @@ tag = "icon-pipe-j2" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "bEJ" = ( @@ -13644,7 +13478,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -13681,7 +13514,6 @@ /obj/structure/chair/stool, /obj/effect/landmark/start/trainee_engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -13692,7 +13524,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -13732,15 +13563,14 @@ /obj/item/circuitboard/powermonitor, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) "bFi" = ( -/obj/item/twohanded/required/kirbyplants, /obj/item/radio/intercom{ pixel_y = -28 }, +/obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "yellow" @@ -13892,6 +13722,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fore) "bFH" = ( @@ -14009,7 +13840,6 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -14085,7 +13915,6 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -14098,7 +13927,6 @@ }, /obj/item/circuitboard/mechfab, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -14110,7 +13938,6 @@ }, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -14120,9 +13947,7 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "bGW" = ( @@ -14192,7 +14017,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -14209,15 +14033,12 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) "bHr" = ( /obj/structure/chair/stool, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_scrubber{ dir = 4; name = "standard air scrubber"; @@ -14231,9 +14052,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/trading) "bHv" = ( @@ -14293,6 +14112,13 @@ icon_state = "freezerfloor" }, /area/crew_quarters/kitchen) +"bHE" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/medical/research/nhallway) "bHH" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -14330,21 +14156,6 @@ }, /turf/simulated/floor/plating, /area/security/main) -"bHN" = ( -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "privateroom" - }, -/obj/structure/window/reinforced/polarized{ - id = "privateroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "privateroom" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/crew_quarters/serviceyard) "bHO" = ( /obj/structure/kitchenspike, /obj/effect/decal/cleanable/blood/old, @@ -14393,14 +14204,12 @@ "bIq" = ( /obj/machinery/computer/drone_control, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/break_room) "bIr" = ( /obj/machinery/autolathe, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/break_room) @@ -14483,7 +14292,6 @@ name = "Труба обработки" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -14492,7 +14300,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -14590,8 +14397,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "bJP" = ( @@ -14646,7 +14452,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering/monitor) @@ -14799,8 +14604,7 @@ /area/maintenance/tourist) "bKU" = ( /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "bKV" = ( @@ -14933,6 +14737,22 @@ icon_state = "darkblue" }, /area/turret_protected/aisat) +"bLQ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "bLT" = ( /obj/structure/cable{ icon_state = "0-4" @@ -15173,9 +14993,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/trading) "bMQ" = ( @@ -15220,7 +15038,6 @@ }, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -15278,7 +15095,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -15465,7 +15281,6 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -15573,9 +15388,7 @@ /obj/item/clipboard, /obj/item/toy/figure/bartender, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "bOG" = ( @@ -15684,7 +15497,6 @@ /obj/effect/decal/warning_stripes/south, /obj/effect/landmark/start/trainee_engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -15866,7 +15678,6 @@ "bPW" = ( /obj/machinery/atmospherics/binary/valve/digital, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -15891,9 +15702,7 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "bQd" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "1-2" }, @@ -15947,7 +15756,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering/monitor) @@ -15963,7 +15771,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering/monitor) @@ -16088,16 +15895,13 @@ }, /obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) "bQO" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "bQP" = ( @@ -16171,7 +15975,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -16366,14 +16169,11 @@ }, /area/janitor) "bRO" = ( -/obj/structure/transit_tube{ - icon_state = "N-SE"; - tag = "icon-N-SE" - }, /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkblue" @@ -16444,7 +16244,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/recharge_station, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/engineering/monitor) @@ -16516,9 +16315,7 @@ }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "bSw" = ( @@ -16558,9 +16355,7 @@ }, /area/quartermaster/miningdock) "bSI" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "1-2" }, @@ -16710,9 +16505,7 @@ }, /area/turret_protected/aisat) "bTE" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/window/reinforced{ dir = 8 }, @@ -16810,7 +16603,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -16983,9 +16775,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/pie_smudge, /turf/simulated/floor/wood{ icon_state = "fancy-wood-cherry" @@ -17036,7 +16826,6 @@ tag = "icon-pipe-j2 (EAST)" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -17328,9 +17117,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse/brown, /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -17453,9 +17240,7 @@ /obj/item/firealarm_electronics, /obj/item/circuitboard/sleeper, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "bWB" = ( @@ -17567,8 +17352,7 @@ req_access = list(28) }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "bXf" = ( @@ -17584,9 +17368,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "bXh" = ( @@ -17631,9 +17413,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "bXA" = ( @@ -17823,14 +17603,13 @@ /turf/simulated/wall, /area/library/game_zone) "bYl" = ( -/obj/structure/transit_tube{ - icon_state = "E-SW-NW"; - tag = "icon-E-SW-NW" - }, /obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/transit_tube/junction{ + dir = 8 + }, /turf/space, /area/space) "bYn" = ( @@ -18074,9 +17853,6 @@ /turf/space, /area/solar/auxstarboard) "bZN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -18101,9 +17877,6 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plating, /area/maintenance/fore) "bZV" = ( @@ -18349,9 +18122,7 @@ /obj/item/pen/multi/fountain, /obj/item/stamp/rep, /obj/item/lighter/zippo/nt_rep, -/obj/structure/window/reinforced/polarized{ - id = "cloninglab" - }, +/obj/structure/window/reinforced, /turf/simulated/floor/carpet/royalblack, /area/ntrep) "caF" = ( @@ -18457,9 +18228,7 @@ /obj/machinery/computer/monitor, /obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/engine/engineering) "cbn" = ( @@ -18522,7 +18291,7 @@ dir = 8; pixel_x = -28 }, -/obj/structure/railing/wooden/endr, +/obj/structure/railing/wooden/cornerr, /turf/simulated/floor/wood/fancy/light{ color = "orange" }, @@ -18645,6 +18414,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "darkyellow" }, @@ -18744,7 +18514,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -18775,10 +18544,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "greencorner" @@ -18817,9 +18582,7 @@ }, /area/quartermaster/storage) "ccv" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/random{ pixel_x = -32 }, @@ -18846,9 +18609,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "hydrofloor" }, @@ -18867,14 +18627,11 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) "ccJ" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/casino) "ccK" = ( @@ -18907,9 +18664,7 @@ /turf/simulated/floor/engine, /area/toxins/sm_test_chamber) "cdb" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet, /area/maintenance/casino) "cdd" = ( @@ -18969,9 +18724,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/serviceyard) "cdt" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc/worn_out{ cell_type = 0; dir = 8; @@ -19003,9 +18756,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cdD" = ( @@ -19017,9 +18768,7 @@ dir = 4; locked = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/trading) "cdN" = ( @@ -19056,7 +18805,6 @@ }, /area/hallway/primary/fore) "cdP" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -19092,9 +18840,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "cdT" = ( @@ -19104,7 +18850,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -19157,13 +18902,13 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/structure/disposalpipe/junction{ +/obj/structure/disposalpipe/sortjunction{ dir = 8; - icon_state = "pipe-j2"; - tag = "icon-pipe-j1 (WEST)" + icon_state = "pipe-j2s"; + name = "Magistrate's Office"; + sortType = 28 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -19269,7 +19014,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 4; icon_state = "darkbluefull" }, /area/tcommsat/chamber) @@ -19283,9 +19027,7 @@ }, /area/tcommsat/chamber) "ceP" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -19457,15 +19199,12 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) "cfD" = ( /obj/effect/spawner/random_spawners/blood_maybe, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -19517,6 +19256,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "green" @@ -19539,9 +19281,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet/blue, /area/crew_quarters/trading) "cgm" = ( @@ -19629,7 +19369,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -19646,6 +19385,16 @@ /obj/machinery/portable_atmospherics/pump, /turf/simulated/floor/plasteel, /area/engine/controlroom) +"cgJ" = ( +/obj/machinery/vending/clothing/departament/science, +/obj/structure/sign/poster/random{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "cgK" = ( /obj/structure/table/reinforced, /obj/machinery/reagentgrinder{ @@ -19653,13 +19402,11 @@ pixel_y = 9 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "cgM" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -19674,9 +19421,7 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cgQ" = ( @@ -19745,9 +19490,7 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "chd" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/alarm{ dir = 4; pixel_x = -22 @@ -19859,16 +19602,14 @@ network = list("SS13","MiniSat") }, /turf/space, -/area/space) +/area/turret_protected/ai) "chX" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/fore) "cie" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dust, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -19922,7 +19663,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -20103,14 +19843,6 @@ icon_state = "darkred" }, /area/security/warden) -"cjl" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "W-NE"; - tag = "icon-W-NE" - }, -/turf/space, -/area/space) "cjn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20124,9 +19856,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -20171,6 +19901,16 @@ }, /turf/simulated/floor/plating, /area/maintenance/fpmaint) +"cjD" = ( +/obj/machinery/light_switch{ + pixel_x = -22; + pixel_y = -22 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" + }, +/area/medical/research/restroom) "cjF" = ( /obj/structure/table/reinforced, /obj/item/stock_parts/matter_bin, @@ -20332,6 +20072,7 @@ /obj/machinery/light{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/bridge/vip) "ckp" = ( @@ -20419,16 +20160,12 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "ckN" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet/black, /area/maintenance/casino) "ckQ" = ( /obj/structure/chair/stool, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/decal/remains/human, /turf/simulated/floor/plating, /area/maintenance/casino) @@ -20447,9 +20184,7 @@ pixel_x = 25 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "clb" = ( @@ -20642,7 +20377,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -20719,9 +20453,7 @@ }, /area/clownoffice) "cmm" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/door/window/westleft, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -20841,13 +20573,11 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/secure) "cmP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "green" @@ -20876,7 +20606,6 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/secure) @@ -21010,20 +20739,14 @@ /turf/simulated/floor/plasteel, /area/storage/secure) "cnD" = ( -/obj/structure/grille, /obj/structure/cable, /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/turf/simulated/floor/wood/fancy/light, +/turf/simulated/floor/plating, /area/crew_quarters/courtroom) "cnG" = ( /obj/item/twohanded/required/kirbyplants, @@ -21054,7 +20777,6 @@ /obj/effect/landmark/start/civilian, /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -21180,7 +20902,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -21195,7 +20916,6 @@ /obj/item/storage/toolbox/mechanical, /obj/item/flashlight, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -21213,14 +20933,13 @@ /turf/simulated/floor/plasteel, /area/atmos) "coB" = ( -/obj/structure/transit_tube{ - icon_state = "E-NW"; - tag = "icon-E-NW" - }, /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/lattice/catwalk, +/obj/structure/transit_tube/curved{ + dir = 4 + }, /turf/space, /area/space) "coE" = ( @@ -21242,9 +20961,7 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/carpet/black, /area/maintenance/casino) "coN" = ( @@ -21397,7 +21114,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/secure) @@ -21406,7 +21122,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/secure) @@ -21420,6 +21135,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -21517,14 +21235,12 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) "cqe" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -21548,8 +21264,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/prisonershuttle) "cqj" = ( @@ -21570,9 +21285,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "cqB" = ( @@ -21592,9 +21305,7 @@ desc = "Главный помощник архитектора станции."; real_name = "Инспектор Мышь" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "cqJ" = ( @@ -21766,17 +21477,23 @@ /obj/item/clipboard, /obj/item/toy/figure/atmos, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) +"cry" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/maintenance/engineering) "crA" = ( /obj/structure/railing{ dir = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/sink{ dir = 8; pixel_x = -12 @@ -21795,17 +21512,14 @@ name = "Bar Privacy Shutters" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "crE" = ( /obj/effect/decal/cleanable/dust, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/maintenance/banya) "crF" = ( @@ -21849,9 +21563,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "crW" = ( @@ -21867,9 +21579,7 @@ /obj/structure/chair/office/dark{ dir = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /turf/simulated/floor/plating, /area/maintenance/trading) @@ -21927,9 +21637,7 @@ }, /area/crew_quarters/kitchen) "css" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/slot_machine, /turf/simulated/floor/plating, /area/maintenance/casino) @@ -21953,9 +21661,7 @@ /turf/simulated/floor/plating, /area/quartermaster/sorting) "csz" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/spiderling_remains, /turf/simulated/floor/plating, /area/crew_quarters/trading) @@ -22044,7 +21750,6 @@ /obj/structure/table, /obj/item/storage/toolbox/emergency, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -22109,9 +21814,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "ctH" = ( @@ -22139,7 +21842,6 @@ "ctJ" = ( /obj/effect/decal/warning_stripes/southwestcorner, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -22171,7 +21873,6 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/ai_monitored/storage/eva) @@ -22264,7 +21965,6 @@ }, /obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -22433,9 +22133,7 @@ /area/aisat) "cvh" = ( /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "cvi" = ( @@ -22519,9 +22217,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "cvA" = ( @@ -22529,9 +22225,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "cvE" = ( @@ -22610,9 +22304,7 @@ }, /obj/effect/landmark/event/lightsout, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cvP" = ( @@ -22621,16 +22313,12 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cvQ" = ( /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cvT" = ( @@ -22642,9 +22330,7 @@ pixel_x = 26 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cvU" = ( @@ -22700,7 +22386,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -22762,7 +22447,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -22829,7 +22513,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -22910,6 +22593,9 @@ }, /area/hallway/primary/central/sw) "cwP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 0; icon_state = "green" @@ -22939,7 +22625,6 @@ name = "Труба смешивания" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -23086,7 +22771,6 @@ }, /obj/machinery/atmospherics/unary/portables_connector, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/maintenance/turbine) @@ -23223,6 +22907,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/bridge/vip) "cyg" = ( @@ -23263,7 +22948,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -23292,9 +22976,7 @@ icon_state = "punpun1" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cyu" = ( @@ -23369,23 +23051,16 @@ }, /area/quartermaster/sorting) "cyK" = ( -/obj/structure/grille, /obj/structure/cable{ icon_state = "0-4" }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/turf/simulated/floor/wood/fancy/light{ - color = "gray" - }, +/turf/simulated/floor/plating, /area/crew_quarters/courtroom) "cyM" = ( /obj/item/twohanded/required/kirbyplants, @@ -23515,9 +23190,7 @@ }, /area/quartermaster/delivery) "czv" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "1-4" }, @@ -23541,9 +23214,7 @@ /obj/machinery/door/window/westright{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "4-8" }, @@ -23599,9 +23270,7 @@ /turf/simulated/floor/plasteel, /area/gateway) "czM" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random{ pixel_y = -32 }, @@ -23643,7 +23312,6 @@ "czR" = ( /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -23692,7 +23360,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -23716,9 +23383,7 @@ /turf/simulated/wall/r_wall, /area/atmos) "cAf" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/space_heater, /turf/simulated/floor/wood/fancy/oak{ icon_state = "fancy-wood-oak-broken7" @@ -23766,7 +23431,6 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -23784,7 +23448,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -24049,7 +23712,6 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -24108,7 +23770,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 4; icon_state = "darkbluefull" }, /area/turret_protected/ai) @@ -24236,9 +23897,7 @@ /area/engine/engineering) "cCt" = ( /obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -24449,7 +24108,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -24602,7 +24260,6 @@ "cDD" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ - dir = 4; icon_state = "darkbluefull" }, /area/turret_protected/ai) @@ -24707,7 +24364,6 @@ /obj/machinery/atmospherics/meter, /obj/machinery/atmospherics/pipe/manifold/visible, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -24767,6 +24423,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -24792,7 +24449,6 @@ sortType = 10 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -24840,7 +24496,6 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -24858,7 +24513,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -24901,7 +24555,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "cEE" = ( @@ -25115,7 +24769,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "cFE" = ( @@ -25180,9 +24834,7 @@ }, /area/bridge) "cFL" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/crew_quarters/trading) "cFO" = ( @@ -25211,7 +24863,6 @@ /obj/item/reagent_containers/spray/waterflower, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -25228,7 +24879,7 @@ pixel_y = -25 }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "cFW" = ( @@ -25360,7 +25011,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/ne) @@ -25459,7 +25109,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -25484,6 +25133,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "green" @@ -25508,8 +25160,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "cHm" = ( @@ -25532,8 +25183,7 @@ }, /obj/machinery/light, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - tag = "icon-whiteblue" + icon_state = "whiteblue" }, /area/medical/cryo) "cHw" = ( @@ -25556,7 +25206,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -25644,14 +25293,11 @@ }, /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/reception) "cHP" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/wall, /area/civilian/barber) "cHT" = ( @@ -25678,9 +25324,7 @@ "cIb" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "cIi" = ( @@ -25699,9 +25343,7 @@ "cIj" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "cIq" = ( @@ -25754,9 +25396,7 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "cIv" = ( @@ -25810,7 +25450,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -25863,8 +25502,7 @@ }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHWEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "cIE" = ( @@ -25946,7 +25584,6 @@ }, /obj/machinery/computer/sm_monitor, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/engine/controlroom) @@ -25958,9 +25595,7 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "cIU" = ( @@ -26002,9 +25637,7 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "cJf" = ( @@ -26244,7 +25877,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -26296,7 +25928,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -26347,8 +25978,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whiteblue"; - tag = "icon-whiteblue (EAST)" + icon_state = "whiteblue" }, /area/medical/reception) "cKI" = ( @@ -26566,7 +26196,6 @@ }, /obj/effect/decal/warning_stripes/southwestcorner, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -26605,6 +26234,10 @@ faction = list("plants","neutral","hostile"); name = "Витамин" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" @@ -26634,7 +26267,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -26643,7 +26275,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -26687,8 +26318,7 @@ "cMs" = ( /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitebluecorner"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whitebluecorner" }, /area/medical/biostorage) "cMt" = ( @@ -26755,7 +26385,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -26771,7 +26400,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -26840,18 +26468,20 @@ /turf/simulated/floor/plating, /area/maintenance/banya) "cNt" = ( -/obj/structure/table/reinforced, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/item/twohanded/required/kirbyplants, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitepurple"; + tag = "icon-whitepurple (NORTHWEST)" + }, +/area/medical/research/restroom) "cNw" = ( /obj/structure/table/wood, /obj/item/ammo_box/shotgun/beanbag, /obj/item/gun/projectile/revolver/doublebarrel, /obj/machinery/light, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cNA" = ( @@ -26907,9 +26537,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "cNW" = ( @@ -26990,8 +26618,7 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whiteblue"; - tag = "icon-whiteblue (WEST)" + icon_state = "whiteblue" }, /area/maintenance/starboard) "cOe" = ( @@ -27023,9 +26650,7 @@ /obj/item/twohanded/required/kirbyplants, /obj/structure/railing, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "cOl" = ( @@ -27215,8 +26840,7 @@ /obj/item/storage/box/gloves, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "cOM" = ( @@ -27277,8 +26901,7 @@ }, /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHEAST)" + icon_state = "whitepurple" }, /area/toxins/explab) "cOU" = ( @@ -27287,12 +26910,13 @@ /turf/space, /area/space) "cOY" = ( -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research/restroom) "cPa" = ( /obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/cable{ @@ -27302,11 +26926,15 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "cPd" = ( -/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/comfy/purp{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/northwest, +/obj/effect/landmark/start/scientist, /turf/simulated/floor/plasteel{ - icon_state = "white" + icon_state = "whitepurplefull" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "cPe" = ( /obj/structure/table/reinforced, /obj/item/folder/white, @@ -27351,7 +26979,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -27363,8 +26990,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "cPl" = ( @@ -27457,7 +27083,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/controlroom) @@ -27554,8 +27179,7 @@ "cPO" = ( /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHWEST)" + icon_state = "whiteblue" }, /area/medical/medbay2) "cPX" = ( @@ -27569,6 +27193,10 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/engine/engineering) "cQb" = ( @@ -27656,9 +27284,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "cQt" = ( @@ -27685,8 +27311,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "cQB" = ( @@ -27738,16 +27363,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" - }, -/area/crew_quarters/serviceyard) -"cQQ" = ( -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "cQR" = ( @@ -27764,16 +27380,18 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "cQS" = ( -/obj/structure/barricade/wooden, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/chair/comfy/purp{ + dir = 8 + }, +/obj/effect/decal/warning_stripes/northeast, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplefull" + }, +/area/medical/research/restroom) "cQU" = ( /obj/effect/turf_decal/box, /obj/machinery/light{ @@ -27782,16 +27400,14 @@ /turf/simulated/floor/plasteel, /area/quartermaster/sorting) "cQV" = ( -/obj/structure/safe, -/obj/item/stack/ore/bluespace_crystal, -/obj/item/stack/ore/bluespace_crystal, -/obj/item/stack/ore/bluespace_crystal, -/obj/item/stack/ore/bluespace_crystal, -/obj/item/stack/ore/bluespace_crystal, -/obj/item/grown/bananapeel/bluespace, -/obj/item/slime_extract/bluespace, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "cQW" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -27848,7 +27464,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/item/stack/tape_roll, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -27933,8 +27548,7 @@ }, /obj/machinery/vending/clothing/departament/medical, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/biostorage) "cRm" = ( @@ -28120,17 +27734,27 @@ }, /area/hallway/primary/fore) "cSc" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "cSd" = ( -/obj/effect/decal/cleanable/dirt, +/obj/structure/table/glass, +/obj/item/reagent_containers/food/drinks/chocolate, +/obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "purplefull" + icon_state = "whitepurplefull" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "cSe" = ( /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -28321,7 +27945,7 @@ /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "cTl" = ( @@ -28386,8 +28010,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/explab) "cTB" = ( @@ -28475,14 +28098,11 @@ dir = 5 }, /turf/simulated/floor/plasteel{ - icon_state = "dark"; - temperature = 80 + icon_state = "dark" }, /area/toxins/xenobiology) "cTQ" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/chair{ dir = 1 }, @@ -28546,9 +28166,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "cUb" = ( @@ -28600,9 +28218,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "cUk" = ( @@ -28655,9 +28271,7 @@ /obj/structure/table/wood, /obj/machinery/chem_dispenser/beer, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cUy" = ( @@ -28697,9 +28311,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cUI" = ( @@ -28736,7 +28348,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -28748,6 +28359,20 @@ "cUS" = ( /turf/simulated/wall/r_wall, /area/toxins/sm_test_chamber) +"cUT" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -26 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "cUU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -28833,13 +28458,15 @@ icon_state = "orangecorner" }, /area/hallway/primary/aft) -"cVf" = ( -/turf/simulated/wall/rust, -/area/teleporter/abandoned) "cVg" = ( -/obj/structure/computerframe, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" + }, +/area/medical/research/restroom) "cVh" = ( /obj/machinery/atmospherics/pipe/simple/visible{ desc = "Труба служит для подачу горючей смеси в турбину для её работы"; @@ -28921,8 +28548,7 @@ }, /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHEAST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "cVH" = ( @@ -28981,7 +28607,6 @@ name = "Труба турбины" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -29013,9 +28638,7 @@ }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cVU" = ( @@ -29100,9 +28723,7 @@ pixel_y = 21 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cWf" = ( @@ -29151,7 +28772,6 @@ name = "Труба турбины" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -29184,9 +28804,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cWq" = ( @@ -29220,20 +28838,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "chem" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "chem" - }, -/obj/structure/window/reinforced/polarized{ - id = "chem" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/effect/spawner/window/reinforced/polarized{ id = "chem" }, /turf/simulated/floor/plating, @@ -29298,8 +28903,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whiteblue"; - tag = "icon-whiteblue (EAST)" + icon_state = "whiteblue" }, /area/medical/reception) "cWS" = ( @@ -29457,9 +29061,7 @@ tag = "icon-left (WEST)" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "cXI" = ( @@ -29472,9 +29074,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/item/radio/intercom{ pixel_x = 30; pixel_y = 24 @@ -29589,7 +29188,6 @@ }, /obj/effect/landmark/start/chief_engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/chief) @@ -29653,8 +29251,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "cYn" = ( @@ -29945,7 +29542,6 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -30130,7 +29726,6 @@ /turf/simulated/floor/plating, /area/maintenance/engineering) "dan" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -30143,6 +29738,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -30339,9 +29938,7 @@ }, /area/hallway/primary/central/ne) "dbs" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc{ name = "south bump"; pixel_y = -26 @@ -30450,9 +30047,7 @@ icon_state = "0-4" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "dbY" = ( @@ -30656,8 +30251,7 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whiteblue"; - tag = "icon-whiteblue (SOUTHEAST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "dcS" = ( @@ -30692,8 +30286,7 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "dcW" = ( @@ -30739,8 +30332,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "ddc" = ( @@ -30859,6 +30451,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -30870,8 +30465,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/paramedic) "ddF" = ( @@ -30912,10 +30506,20 @@ /obj/item/clothing/glasses/hud/health, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whiteblue" }, /area/medical/paramedic) +"ddM" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/coffee, +/obj/structure/extinguisher_cabinet{ + pixel_x = -26 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "ddO" = ( /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -30941,7 +30545,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -30989,7 +30592,6 @@ /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/trading) "des" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -31085,8 +30687,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "deK" = ( @@ -31153,8 +30754,7 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "deU" = ( @@ -31171,8 +30771,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "deW" = ( @@ -31211,9 +30810,6 @@ icon_state = "redcorner" }, /area/security/prison/cell_block/A) -"dfe" = ( -/turf/simulated/wall, -/area/medical/research/restroom) "dff" = ( /obj/effect/decal/warning_stripes/southeast, /obj/structure/cable{ @@ -31454,8 +31050,7 @@ /obj/structure/bed/dogbed/pet, /mob/living/simple_animal/goose/Scientist, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "dgc" = ( @@ -31486,8 +31081,7 @@ pixel_y = 3 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "dgi" = ( @@ -31593,9 +31187,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/spawner/random_barrier, /turf/simulated/floor/plating, /area/maintenance/fore) @@ -31652,7 +31243,6 @@ }, /obj/effect/spawner/lootdrop/officetoys, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/chief) @@ -31713,7 +31303,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/maintenance/turbine) @@ -31756,7 +31345,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/maintenance/turbine) @@ -31766,7 +31354,6 @@ }, /obj/machinery/atmospherics/unary/tank/toxins, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/maintenance/turbine) @@ -31775,7 +31362,6 @@ dir = 9 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering/monitor) @@ -31840,13 +31426,11 @@ }, /obj/machinery/atmospherics/unary/portables_connector, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/maintenance/turbine) "dhB" = ( /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/maintenance/turbine) @@ -31860,7 +31444,6 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/maintenance/turbine) @@ -31930,7 +31513,6 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/maintenance/turbine) @@ -31988,7 +31570,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -32032,8 +31613,7 @@ }, /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/paramedic) "diu" = ( @@ -32056,8 +31636,7 @@ }, /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHEAST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "diy" = ( @@ -32189,9 +31768,7 @@ "djc" = ( /obj/structure/closet/secure_closet/bar, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "djf" = ( @@ -32216,7 +31793,6 @@ name = "Труба турбины" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -32228,7 +31804,6 @@ }, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -32238,8 +31813,7 @@ /obj/item/storage/toolbox/mechanical, /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/toxins/mixing) "dju" = ( @@ -32334,8 +31908,7 @@ pixel_y = -28 }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/paramedic) "djT" = ( @@ -32347,8 +31920,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/paramedic) "djU" = ( @@ -32644,24 +32216,6 @@ /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) -"dld" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - id = "courtroom" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/crew_quarters/courtroom) "dle" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 @@ -32782,7 +32336,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -32832,7 +32385,6 @@ /obj/structure/chair/office/dark, /obj/effect/landmark/start/engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering/monitor) @@ -32860,7 +32412,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port) @@ -33066,8 +32617,7 @@ /obj/structure/reagent_dispensers/water_cooler, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHWEST)" + icon_state = "whiteblue" }, /area/medical/reception) "dmI" = ( @@ -33246,8 +32796,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/mixing) "dnh" = ( @@ -33277,8 +32826,10 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/junction{ - dir = 8 +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Detective"; + sortType = 27 }, /turf/simulated/floor/plasteel{ dir = 1 @@ -33359,9 +32910,7 @@ }, /area/medical/genetics) "dnG" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -33387,7 +32936,9 @@ pixel_y = -29 }, /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants, +/obj/structure/transit_tube/cap{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -33405,7 +32956,6 @@ name = "Смесь в турбину" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -33503,7 +33053,7 @@ name = "Toilet" }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "doi" = ( @@ -33580,7 +33130,7 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "doy" = ( @@ -33592,7 +33142,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -33640,7 +33189,7 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "doP" = ( @@ -33665,7 +33214,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -33694,9 +33242,6 @@ dir = 8; name = "Genetics Desk" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -33779,16 +33324,13 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "dpg" = ( /obj/structure/statue/tranquillite/mime/unique, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -33902,9 +33444,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "dpP" = ( @@ -33919,8 +33459,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "dpQ" = ( @@ -34072,8 +33611,7 @@ "dqz" = ( /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHEAST)" + icon_state = "whiteblue" }, /area/medical/medbay2) "dqD" = ( @@ -34193,16 +33731,6 @@ icon_state = "whitebluecorner" }, /area/medical/genetics) -"drF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" - }, -/area/medical/genetics) "drH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -34357,12 +33885,6 @@ }, /turf/space, /area/space) -"dsg" = ( -/turf/simulated/floor/plasteel{ - dir = 0; - icon_state = "red" - }, -/area/security/securehallway) "dsh" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -32 @@ -34391,7 +33913,6 @@ name = "Труба обработки" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -34423,13 +33944,6 @@ icon_state = "darkblue" }, /area/construction/hallway) -"dsx" = ( -/obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "whitepurple" - }, -/area/medical/research/restroom) "dsz" = ( /obj/machinery/papershredder, /obj/machinery/newscaster{ @@ -34484,7 +33998,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -34575,22 +34088,16 @@ }, /area/medical/surgery/south) "dtb" = ( -/obj/structure/grille, /obj/structure/cable{ icon_state = "0-2" }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/turf/simulated/floor/wood/fancy/light, +/turf/simulated/floor/plating, /area/crew_quarters/courtroom) "dtc" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -34599,7 +34106,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -34704,22 +34210,9 @@ /turf/simulated/wall, /area/library) "dtC" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "privateroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "privateroom" - }, -/obj/structure/window/reinforced/polarized{ - id = "privateroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; +/obj/effect/spawner/window/reinforced/polarized{ id = "privateroom" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/crew_quarters/serviceyard) "dtD" = ( @@ -34736,9 +34229,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "2-8" @@ -34802,7 +34293,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -34817,7 +34307,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -34833,9 +34322,7 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "dtZ" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/bottle/vodka, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, @@ -34935,8 +34422,7 @@ dir = 9 }, /turf/simulated/floor/plasteel{ - icon_state = "dark"; - temperature = 80 + icon_state = "dark" }, /area/toxins/xenobiology) "duJ" = ( @@ -34978,8 +34464,7 @@ "duT" = ( /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/paramedic) "duV" = ( @@ -35003,17 +34488,13 @@ /area/medical/research/shallway) "dvd" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-8" }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, /turf/simulated/floor/plasteel{ icon_state = "purplefull" @@ -35143,9 +34624,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -35210,9 +34688,7 @@ }, /obj/item/reagent_containers/glass/rag, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "dvN" = ( @@ -35271,9 +34747,7 @@ }, /obj/machinery/vending/cigarette, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "dwm" = ( @@ -35391,7 +34865,6 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -35443,7 +34916,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -35462,7 +34934,6 @@ name = "Труба смешивания" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -35825,14 +35296,8 @@ /turf/simulated/floor/plasteel, /area/toxins/storage) "dyC" = ( -/obj/machinery/camera{ - c_tag = "Research South Hallway"; - dir = 4; - network = list("Research","SS13"); - pixel_y = -22 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -28 +/obj/structure/sign/poster/official/help_others{ + pixel_x = -32 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -35885,7 +35350,6 @@ /obj/structure/disposalpipe/segment, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -35899,7 +35363,6 @@ opacity = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/medical/chemistry) @@ -35940,7 +35403,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -35956,7 +35418,6 @@ pixel_y = -32 }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/engine/controlroom) @@ -36006,9 +35467,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "dzw" = ( @@ -36074,11 +35533,13 @@ }, /area/hallway/primary/fore) "dzH" = ( -/obj/structure/sign/poster/official/nanotrasen_logo{ - pixel_x = -32 +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -26 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-4" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -36100,8 +35561,7 @@ /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHEAST)" + icon_state = "whitepurple" }, /area/medical/research/shallway) "dzL" = ( @@ -36496,9 +35956,7 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "dBA" = ( @@ -36579,20 +36037,7 @@ }, /area/civilian/barber) "dBO" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "vir2" - }, -/obj/structure/window/reinforced/polarized{ - id = "vir2" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "vir2" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "vir2" }, /turf/simulated/floor/plating, @@ -36616,7 +36061,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -36795,14 +36239,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" + icon_state = "dark" }, -/area/hallway/primary/central/nw) +/area/engine/mechanic_workshop/hangar) "dCK" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/condiment/peppermill{ @@ -36821,23 +36262,17 @@ }, /area/crew_quarters/kitchen) "dCL" = ( -/obj/structure/sign/poster/random{ +/obj/structure/closet/radiation, +/obj/structure/sign/poster/official/nanotrasen_logo{ pixel_x = 32 }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/vending/clothing/departament/science, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" + icon_state = "white" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "dCM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/crew_quarters/trading) @@ -37013,7 +36448,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -37061,6 +36495,7 @@ name = "west bump"; pixel_x = -26 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "red" @@ -37123,40 +36558,22 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "dDQ" = ( -/obj/effect/decal/warning_stripes/northwest, -/obj/structure/chair/comfy/purp{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 11 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - icon_state = "whitepurplefull" + icon_state = "white" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "dDR" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" + icon_state = "2-8" }, -/area/medical/research/restroom) +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "dDU" = ( /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -37220,17 +36637,6 @@ icon_state = "blue" }, /area/atmos) -"dEi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, -/turf/simulated/floor/plating, -/area/maintenance/engineering) "dEk" = ( /obj/structure/cable{ icon_state = "0-8" @@ -37378,7 +36784,6 @@ name = "Труба обработки" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -37404,29 +36809,21 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "dFn" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 1; - name = "standard air scrubber"; - on = 1; - scrub_N2O = 1; - scrub_Toxins = 1 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/power/apc{ + cell_type = 0; + name = "south bump"; + pixel_y = -26 }, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "dFp" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -37554,9 +36951,7 @@ /turf/simulated/wall/rust, /area/maintenance/asmaint) "dFH" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/ash, /obj/item/flag/nt{ icon_state = "ntflag_rolled"; @@ -37639,9 +37034,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "dGe" = ( @@ -37663,9 +37056,7 @@ dir = 1 }, /obj/effect/spawner/random_spawners/blood_maybe, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/trading) "dGk" = ( @@ -37750,13 +37141,6 @@ icon_state = "brown" }, /area/quartermaster/storage) -"dGO" = ( -/obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "whitepurple" - }, -/area/medical/research/restroom) "dGP" = ( /obj/item/radio/intercom{ pixel_y = -28 @@ -37777,7 +37161,6 @@ "dGR" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/checkpoint/south) @@ -37910,9 +37293,7 @@ /obj/structure/chair/office/dark{ dir = 8 }, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/library) "dHl" = ( @@ -37994,7 +37375,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 4; icon_state = "darkbluefull" }, /area/turret_protected/ai) @@ -38032,9 +37412,17 @@ /turf/simulated/floor/plating, /area/turret_protected/ai) "dHD" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/table, +/obj/machinery/kitchen_machine/microwave{ + pixel_x = -1; + pixel_y = 7 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitepurple"; + tag = "icon-whitepurple (SOUTHWEST)" + }, +/area/medical/research/restroom) "dHH" = ( /obj/machinery/computer/arcade/battle, /obj/effect/decal/warning_stripes/red/hollow, @@ -38093,7 +37481,6 @@ name = "Труба фильтрации" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -38248,7 +37635,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/securearmory) @@ -38344,6 +37730,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) "dIE" = ( @@ -38353,6 +37742,13 @@ }, /turf/simulated/floor/engine, /area/maintenance/turbine) +"dIG" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple"; + tag = "icon-whitepurple (EAST)" + }, +/area/medical/research) "dIH" = ( /obj/structure/cable{ icon_state = "4-8" @@ -38389,10 +37785,13 @@ /turf/simulated/floor/plating, /area/security/checkpoint/south) "dIL" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurple" @@ -38500,7 +37899,6 @@ /obj/effect/decal/warning_stripes/southwest, /obj/structure/chair/office/dark, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/turbine) @@ -38512,7 +37910,6 @@ name = "Труба турбины" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -38558,7 +37955,6 @@ /obj/item/storage/belt/utility, /obj/item/radio, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -38615,7 +38011,6 @@ /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -38645,14 +38040,12 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) "dJZ" = ( /obj/machinery/computer/atmos_alert, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -38767,7 +38160,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -38785,7 +38177,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -38795,7 +38186,6 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -38813,10 +38203,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/effect/landmark/event/lightsout, /turf/simulated/floor/plasteel, /area/hydroponics) @@ -38873,7 +38259,6 @@ /obj/structure/table/reinforced, /obj/item/storage/box/lights/mixed, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -38939,9 +38324,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/junction{ dir = 8; tag = "icon-pipe-j1 (EAST)" @@ -38991,9 +38374,7 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse/rat, /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -39091,7 +38472,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -39391,8 +38771,8 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/north) @@ -39570,6 +38950,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1 }, @@ -39650,16 +39031,13 @@ }, /area/medical/virology/lab) "dNZ" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" +/obj/structure/table/reinforced, +/obj/item/gps, +/obj/structure/sign/poster/official/ian{ + pixel_x = -32 }, -/area/medical/research/restroom) +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "dOa" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ @@ -39772,7 +39150,6 @@ name = "Труба смешивания" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -39845,7 +39222,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -39870,7 +39246,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" @@ -39988,9 +39363,7 @@ name = "Bar Privacy Shutters" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "dPH" = ( @@ -40045,9 +39418,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "dPS" = ( @@ -40170,7 +39541,6 @@ "dQq" = ( /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -40339,7 +39709,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -40387,7 +39756,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/secure) @@ -40400,7 +39768,6 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/secure) @@ -40506,7 +39873,6 @@ /area/chapel/office) "dRw" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/secure) @@ -40527,7 +39893,6 @@ name = "Труба подачи азота в реактор" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -40879,9 +40244,7 @@ pixel_x = 24; pixel_y = -22 }, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/library) "dSM" = ( @@ -40914,8 +40277,7 @@ /obj/item/kitchen/knife, /obj/item/kitchen/rollingpin, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "dSR" = ( @@ -41108,7 +40470,6 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -41167,7 +40528,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -41480,7 +40840,6 @@ /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -41509,7 +40868,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -41533,7 +40891,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -41545,7 +40902,7 @@ pixel_y = -32 }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "dVy" = ( @@ -41568,7 +40925,6 @@ "dVB" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -41636,9 +40992,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random_spawners/blood_maybe, /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -41676,6 +41030,9 @@ dir = 4 }, /obj/structure/girder, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore) "dVY" = ( @@ -41771,7 +41128,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -41836,8 +41192,7 @@ /obj/structure/table/reinforced, /obj/item/book/manual/sop_service, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "dWy" = ( @@ -41865,9 +41220,7 @@ }, /area/crew_quarters/kitchen) "dWC" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/random{ pixel_y = 32 }, @@ -41953,8 +41306,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/cryo) "dWQ" = ( @@ -42067,7 +41419,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -42214,7 +41565,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -42439,7 +41789,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/checkpoint/south) @@ -42543,7 +41892,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -42724,6 +42072,9 @@ maxcharge = 15000 }, /obj/item/clothing/glasses/welding, +/obj/item/radio/intercom{ + pixel_y = 24 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -42756,7 +42107,6 @@ /obj/effect/decal/warning_stripes/yellow, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -42816,7 +42166,6 @@ name = "Труба турбины" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -42862,7 +42211,6 @@ /area/bridge/vip) "dZN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "blue" @@ -42881,7 +42229,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -42958,7 +42305,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -43086,7 +42432,6 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -43112,9 +42457,7 @@ dir = 5 }, /obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "ecb" = ( @@ -43167,9 +42510,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 6 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_scrubber{ dir = 8; name = "standard air scrubber"; @@ -43355,6 +42696,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "green" @@ -43458,7 +42802,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -43514,9 +42857,7 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "egC" = ( @@ -43530,7 +42871,6 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -43605,18 +42945,6 @@ icon_state = "darkblue" }, /area/medical/surgery/north) -"ehA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" - }, -/area/medical/research/restroom) "ehB" = ( /obj/structure/cable{ icon_state = "4-8" @@ -43679,7 +43007,6 @@ /obj/effect/decal/warning_stripes/south, /obj/effect/landmark/start/engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -43737,8 +43064,7 @@ /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/explab) "eiC" = ( @@ -43754,9 +43080,7 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/junction{ dir = 2; icon_state = "pipe-j2"; @@ -43774,7 +43098,6 @@ "ejf" = ( /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -43826,7 +43149,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -43902,6 +43224,15 @@ icon_state = "purplefull" }, /area/medical/research/nhallway) +"eke" = ( +/obj/item/radio/intercom{ + pixel_x = 28 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "ekj" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -44080,8 +43411,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/cmostore) "elZ" = ( @@ -44146,9 +43476,7 @@ }, /obj/structure/railing/corner, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "ens" = ( @@ -44166,7 +43494,6 @@ name = "Труба обработки" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -44231,9 +43558,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "epd" = ( @@ -44297,8 +43622,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "epC" = ( @@ -44444,8 +43768,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/sleeper) "err" = ( @@ -44569,7 +43892,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -44889,21 +44211,13 @@ /turf/simulated/floor/wood/fancy/light, /area/crew_quarters/courtroom) "exh" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/research{ - name = "Research Break Room"; +/obj/machinery/door/airlock/maintenance{ req_access = list(47) }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "exl" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -45024,8 +44338,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whiteblue" }, /area/medical/sleeper) "eyI" = ( @@ -45147,7 +44460,6 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/engineering) @@ -45316,6 +44628,9 @@ /obj/item/radio/intercom{ pixel_y = 24 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "green" @@ -45333,13 +44648,6 @@ dir = 4; pixel_x = 28 }, -/obj/machinery/atmospherics/unary/vent_scrubber{ - dir = 8; - name = "standard air scrubber"; - on = 1; - scrub_N2O = 1; - scrub_Toxins = 1 - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurple"; @@ -45352,7 +44660,6 @@ /obj/item/paper/deltainfo, /obj/item/paper/deltainfo, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -45416,7 +44723,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -45544,9 +44850,7 @@ }, /area/security/range) "eFo" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance/double, /turf/simulated/floor/plasteel{ @@ -45566,17 +44870,9 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) -"eFC" = ( -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" - }, -/area/medical/research) "eFE" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ desc = "Труба проводящая газ по фильтрам, где он перемещается в камеры хранения"; @@ -45632,7 +44928,6 @@ dir = 4 }, /obj/item/stock_parts/manipulator, -/obj/effect/decal/cleanable/blood/oil/streak, /turf/simulated/floor/plating, /area/maintenance/asmaint2) "eGn" = ( @@ -45693,8 +44988,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "eGC" = ( @@ -45796,7 +45090,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -45951,6 +45244,20 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/locker/locker_toilet) +"eJE" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Break Room Maintenance"; + req_access = list(47) + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/maintenance/engineering) "eJH" = ( /obj/effect/decal/warning_stripes/yellow/hollow, /obj/item/clothing/glasses/meson{ @@ -46074,8 +45381,8 @@ pixel_y = 3 }, /obj/item/melee/chainofcommand{ - pixel_y = 5; - pixel_x = 5 + pixel_x = 5; + pixel_y = 5 }, /turf/simulated/floor/carpet/royalblue, /area/crew_quarters/captain/bedroom) @@ -46105,7 +45412,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -46215,7 +45521,6 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -46277,13 +45582,19 @@ }, /area/medical/cmostore) "eMO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/simulated/floor/plasteel, -/area/bridge/vip) +/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/bridge) "eMU" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/portable_atmospherics/scrubber, @@ -46374,7 +45685,6 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -46430,7 +45740,6 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -46440,9 +45749,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -46546,7 +45853,6 @@ "ePt" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/asmaint4) @@ -46567,8 +45873,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/brig) "ePR" = ( @@ -46750,7 +46055,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -46795,7 +46099,6 @@ /obj/structure/closet/secure_closet/security, /obj/effect/decal/warning_stripes/red/hollow, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/customs) @@ -46901,9 +46204,7 @@ }, /area/security/securehallway) "eTZ" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /obj/item/shard{ icon_state = "medium"; @@ -46976,8 +46277,7 @@ /area/maintenance/kitchen) "eUt" = ( /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/cmostore) "eUI" = ( @@ -47053,7 +46353,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -47148,16 +46447,13 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "eXc" = ( /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "eXe" = ( @@ -47254,7 +46550,6 @@ /turf/simulated/floor/plating, /area/security/checkpoint/south) "eXY" = ( -/obj/structure/disposalpipe/segment, /obj/effect/landmark/event/lightsout, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -47265,8 +46560,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/turf/simulated/floor/plasteel{ +/obj/structure/disposalpipe/segment{ dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, /area/engine/engineering) @@ -47297,6 +46595,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "green" @@ -47309,8 +46610,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "eYo" = ( @@ -47413,8 +46713,7 @@ "eYT" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/paramedic) "eYX" = ( @@ -47441,7 +46740,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -47523,8 +46821,7 @@ }, /obj/machinery/kitchen_machine/grill, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "far" = ( @@ -47638,7 +46935,6 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -47703,7 +46999,6 @@ "fcN" = ( /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -47842,7 +47137,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -47917,7 +47211,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -48099,12 +47392,6 @@ icon_state = "neutralcorner" }, /area/crew_quarters/fitness) -"fib" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/security/interrogation) "fif" = ( /obj/structure/dresser, /obj/item/radio/intercom{ @@ -48354,18 +47641,6 @@ icon_state = "dark" }, /area/security/permabrig) -"fkL" = ( -/obj/effect/decal/warning_stripes/southwest, -/obj/structure/chair/comfy/purp{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplefull" - }, -/area/medical/research/restroom) "fkP" = ( /obj/structure/window/reinforced{ dir = 4 @@ -48482,7 +47757,6 @@ /obj/machinery/hologram/holopad, /obj/effect/landmark/start/engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -48566,7 +47840,6 @@ name = "Труба смешивания" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -48589,7 +47862,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -48640,7 +47912,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/interrogation) @@ -48663,7 +47934,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -48725,8 +47995,7 @@ pixel_y = -32 }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/paramedic) "fqf" = ( @@ -48964,7 +48233,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -48986,8 +48254,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/lobby) "ftG" = ( @@ -49171,18 +48438,11 @@ }, /area/chapel/main) "fvB" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/barricade/wooden, -/obj/effect/decal/warning_stripes/north, -/obj/structure/cable{ - icon_state = "4-8" - }, +/obj/machinery/atmospherics/unary/vent_scrubber, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "fvC" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -49344,6 +48604,9 @@ name = "Награда за первое нарушение в новом бриге"; pixel_y = 32 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -49740,8 +49003,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/main) "fDU" = ( @@ -49774,8 +49036,7 @@ "fEg" = ( /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "fEr" = ( @@ -49875,6 +49136,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-y" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" @@ -49898,9 +49163,7 @@ }, /area/assembly/robotics) "fFl" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 8 }, @@ -49917,25 +49180,15 @@ network = list("SS13","MiniSat") }, /turf/space, -/area/space) +/area/turret_protected/ai) "fFv" = ( -/obj/structure/grille, /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/turf/simulated/floor/wood/fancy/light, +/turf/simulated/floor/plating, /area/crew_quarters/courtroom) "fFw" = ( /obj/machinery/porta_turret, @@ -50090,7 +49343,6 @@ /obj/item/camera_film, /obj/item/camera_film, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -50160,7 +49412,7 @@ network = list("SS13","MiniSat") }, /turf/space, -/area/space) +/area/turret_protected/ai) "fId" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor{ @@ -50217,9 +49469,23 @@ /turf/simulated/floor/wood, /area/security/hos) "fIC" = ( -/obj/effect/decal/cleanable/blood/oil/streak, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/central/south) "fIE" = ( /obj/machinery/vending/cart, /obj/structure/window/reinforced{ @@ -50268,9 +49534,11 @@ }, /area/crew_quarters/theatre) "fJp" = ( -/obj/machinery/teleport/hub, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/turf/simulated/floor/plasteel{ + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" + }, +/area/medical/research/restroom) "fJE" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/vending/wallmed{ @@ -50546,8 +49814,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/sleeper) "fND" = ( @@ -50556,6 +49823,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fore) "fNH" = ( @@ -50565,9 +49833,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "fNQ" = ( @@ -50652,8 +49918,7 @@ /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/explab) "fON" = ( @@ -50675,8 +49940,7 @@ /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "fPs" = ( @@ -50699,7 +49963,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -50833,9 +50096,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -50880,9 +50141,7 @@ /turf/simulated/floor/plasteel, /area/medical/virology/lab) "fRL" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /obj/effect/landmark/tiles/damageturf, /turf/simulated/floor/plating, @@ -51011,9 +50270,7 @@ dir = 8; locked = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/trading) "fTs" = ( @@ -51086,9 +50343,7 @@ dir = 6 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "fTZ" = ( @@ -51100,20 +50355,7 @@ }, /area/maintenance/asmaint4) "fUb" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "departureprivate" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "departureprivate" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "departureprivate" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "departureprivate" }, /turf/simulated/floor/plating, @@ -51122,9 +50364,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood{ icon_state = "fancy-wood-cherry" }, @@ -51186,8 +50426,7 @@ /obj/structure/delta_statue/s, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "vault"; - tag = "icon-vault (WEST)" + icon_state = "vault" }, /area/bridge/vip) "fVj" = ( @@ -51305,8 +50544,7 @@ "fVY" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "fWc" = ( @@ -51411,8 +50649,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/brig) "fWP" = ( @@ -51439,13 +50676,9 @@ /obj/structure/disposalpipe/trunk{ dir = 2 }, -/obj/item/radio/intercom{ - pixel_y = 24 - }, /obj/machinery/door_control{ id = "SecPilotPriv"; name = "Pilot Privacy Shutters Control"; - pixel_x = 16; pixel_y = 24; req_access = list(71) }, @@ -51475,8 +50708,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "fXm" = ( @@ -51553,7 +50785,7 @@ network = list("SS13","MiniSat") }, /turf/space, -/area/space) +/area/turret_protected/ai) "fXQ" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor{ @@ -51598,6 +50830,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/bridge/vip) "fYu" = ( @@ -51618,9 +50851,13 @@ }, /area/atmos) "fYC" = ( -/mob/living/simple_animal/mouse/gray, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/table/glass, +/obj/effect/decal/warning_stripes/south, +/obj/item/storage/fancy/donut_box, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplefull" + }, +/area/medical/research/restroom) "fYM" = ( /obj/structure/cable{ icon_state = "2-8" @@ -51862,8 +51099,7 @@ }, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/cryo) "gbS" = ( @@ -52082,8 +51318,8 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -52134,6 +51370,7 @@ /area/quartermaster/qm) "gfO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "green" @@ -52206,8 +51443,7 @@ "ggC" = ( /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "ggD" = ( @@ -52215,7 +51451,6 @@ dir = 6 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -52245,6 +51480,9 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "cmo" }, @@ -52304,8 +51542,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/medical/research) "gio" = ( @@ -52340,13 +51577,15 @@ }, /area/turret_protected/aisat) "gjD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/warning_stripes/west, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" + icon_state = "white" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "gjM" = ( /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel, @@ -52372,13 +51611,6 @@ tag = "icon-whitepurple (NORTH)" }, /area/toxins/lab) -"gkk" = ( -/obj/structure/transit_tube{ - icon_state = "D-NW"; - tag = "icon-D-NW" - }, -/turf/space, -/area/space) "gko" = ( /obj/effect/decal/warning_stripes/south, /obj/structure/cable{ @@ -52438,13 +51670,10 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 11 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ icon_state = "purplefull" @@ -52592,9 +51821,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -52718,7 +51945,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port) @@ -52769,8 +51995,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/sleeper) "goA" = ( @@ -52822,7 +52047,6 @@ "goP" = ( /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -52925,11 +52149,9 @@ }, /area/medical/virology) "gpS" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurple" - }, -/area/medical/research/restroom) +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "gpT" = ( /obj/structure/closet/crate/medical, /obj/effect/spawner/lootdrop/maintenance/tripple, @@ -53018,8 +52240,7 @@ "gra" = ( /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/sleeper) "gre" = ( @@ -53288,6 +52509,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore) "gvy" = ( @@ -53302,7 +52526,6 @@ name = "Труба фильтрации" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -53331,7 +52554,6 @@ }, /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -53399,7 +52621,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -53508,7 +52729,6 @@ target_pressure = 4500 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -53684,14 +52904,18 @@ }, /area/crew_quarters/theatre) "gAF" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -25 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + dir = 6; + icon_state = "whitepurple"; + tag = "icon-whitepurple (SOUTHEAST)" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "gAS" = ( /obj/machinery/door/airlock/command{ id_tag = "captainofficedoor"; @@ -53852,8 +53076,7 @@ pixel_y = 9 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "gCz" = ( @@ -54015,13 +53238,16 @@ }, /area/medical/reception) "gDZ" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "purplecorner" + icon_state = "white" }, -/area/hallway/primary/aft) +/area/medical/medbay) "gEq" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical, @@ -54222,7 +53448,6 @@ }, /area/security/securehallway) "gGp" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -54232,6 +53457,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -54340,9 +53568,7 @@ "gHq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/library) "gHz" = ( @@ -54457,6 +53683,7 @@ /obj/effect/turf_decal/siding/brown{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood/fancy/light, /area/bridge/meeting_room) "gIq" = ( @@ -54516,8 +53743,7 @@ /obj/item/clothing/head/hardhat/red, /obj/item/clothing/mask/gas, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/mixing) "gJj" = ( @@ -54636,8 +53862,7 @@ "gKd" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency/old, -/turf/simulated/floor/plasteel{ - dir = 10; +/turf/simulated/floor/plasteel/airless{ icon_state = "darkredfull" }, /area/space) @@ -54683,8 +53908,7 @@ pixel_y = -30 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "gKG" = ( @@ -54927,15 +54151,6 @@ icon_state = "wood-broken6" }, /area/maintenance/kitchen) -"gMU" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" - }, -/area/medical/research/restroom) "gMZ" = ( /obj/structure/cable{ icon_state = "1-4" @@ -54971,7 +54186,6 @@ "gNj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -55415,6 +54629,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -55532,9 +54750,7 @@ }, /obj/item/reagent_containers/food/snacks/sushi_Ebi, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "gSF" = ( @@ -55609,7 +54825,6 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -55820,24 +55035,6 @@ icon_state = "neutralfull" }, /area/hallway/secondary/exit) -"gVL" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - id = "execution" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/simulated/floor/plating, -/area/security/execution) "gVN" = ( /obj/effect/decal/warning_stripes/yellow, /obj/structure/plasticflaps{ @@ -55884,20 +55081,7 @@ /turf/simulated/floor/plating, /area/assembly/robotics) "gWh" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "psychoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "psychoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "psychoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "psychoffice" }, /turf/simulated/floor/plating, @@ -55946,24 +55130,13 @@ }, /area/hydroponics) "gWJ" = ( -/obj/structure/grille, /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/turf/simulated/floor/wood/fancy/light{ - color = "gray" - }, +/turf/simulated/floor/plating, /area/crew_quarters/courtroom) "gXb" = ( /turf/simulated/floor/plasteel{ @@ -56196,7 +55369,6 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -56298,9 +55470,18 @@ }, /area/medical/virology/lab) "hbL" = ( -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research/restroom) "hbO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/window/reinforced{ @@ -56368,9 +55549,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "hcZ" = ( @@ -56509,6 +55688,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" @@ -56549,8 +55729,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "heF" = ( @@ -56591,7 +55770,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -56599,13 +55777,15 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/door/firedoor, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, -/area/hallway/primary/central/north) +/area/hallway/primary/central/nw) "hfM" = ( /turf/simulated/floor/wood, /area/security/hos) @@ -56656,20 +55836,16 @@ /turf/simulated/floor/plating, /area/maintenance/detectives_office) "hgH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc{ - cell_type = 0; - dir = 1; - name = "north bump"; - pixel_y = 26 - }, -/obj/structure/cable{ - icon_state = "0-2" +/obj/structure/table, +/obj/item/storage/box/donkpockets, +/obj/structure/sign/poster/random{ + pixel_y = 32 }, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 1; + icon_state = "whitepurple" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "hgM" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -56693,7 +55869,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -56749,8 +55924,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "hhF" = ( @@ -56973,7 +56147,6 @@ "hkF" = ( /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -57019,8 +56192,7 @@ /obj/effect/decal/warning_stripes/blue/hollow, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "hlG" = ( @@ -57281,6 +56453,10 @@ /obj/machinery/firealarm{ pixel_y = 26 }, +/obj/machinery/light{ + dir = 1; + on = 1 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple"; @@ -57300,7 +56476,6 @@ }, /obj/effect/landmark/start/warden, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/warden) @@ -57441,7 +56616,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -57500,7 +56674,6 @@ }, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -57509,8 +56682,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/explab) "hrt" = ( @@ -57564,7 +56736,6 @@ name = "Труба смешивания" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -57748,9 +56919,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "huw" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -57961,7 +57130,6 @@ tag = "icon-pipe-j1 (EAST)" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -58061,7 +57229,7 @@ dir = 1 }, /obj/machinery/light_switch{ - pixel_x = -26; + pixel_x = -24; pixel_y = -4 }, /turf/simulated/floor/plasteel{ @@ -58090,9 +57258,6 @@ /turf/simulated/floor/plasteel, /area/atmos) "hyT" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -58102,6 +57267,12 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + name = "Morgue"; + sortType = 25; + tag = "icon-pipe-j1s (EAST)" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -58130,7 +57301,6 @@ }, /obj/machinery/computer/card, /turf/simulated/floor/plasteel{ - dir = 6; icon_state = "bluefull" }, /area/bridge/checkpoint/south) @@ -58151,7 +57321,6 @@ tag = "icon-pipe-j2 (EAST)" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -58329,7 +57498,6 @@ "hCd" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -58450,7 +57618,6 @@ sortType = 11 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -58517,7 +57684,6 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port) @@ -58552,8 +57718,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "hED" = ( @@ -58623,7 +57788,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -58750,7 +57914,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -58817,7 +57980,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -58831,8 +57993,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/sleeper) "hIB" = ( @@ -58941,7 +58102,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -58984,7 +58144,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/ne) @@ -59031,7 +58190,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -59099,13 +58257,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/engineering) -"hLJ" = ( -/obj/machinery/vending/cigarette/free, -/obj/effect/decal/warning_stripes/southeast, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research/restroom) "hLK" = ( /obj/structure/chair/sofa/left{ dir = 4 @@ -59298,7 +58449,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -59818,7 +58968,6 @@ /obj/machinery/vending/hatdispenser, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -60114,15 +59263,6 @@ /turf/simulated/floor/plating, /area/maintenance/starboardsolar) "hYi" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -60178,6 +59318,10 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -60246,7 +59390,6 @@ pixel_y = -28 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/customs) @@ -60429,9 +59572,9 @@ /area/chapel/office) "icl" = ( /obj/effect/landmark/tiles/burnturf, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "darkred" +/turf/simulated/floor/plasteel/airless{ + icon_state = "darkred"; + dir = 9 }, /area/space) "icp" = ( @@ -60486,8 +59629,7 @@ /obj/structure/delta_statue/w, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "vault"; - tag = "icon-vault (WEST)" + icon_state = "vault" }, /area/bridge/vip) "ido" = ( @@ -60590,9 +59732,12 @@ }, /area/turret_protected/ai) "ifq" = ( -/obj/item/radio/intercom{ - pixel_y = 24 +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple"; @@ -60775,7 +59920,6 @@ /area/turret_protected/aisat_interior) "ihm" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -60864,7 +60008,6 @@ target_pressure = 101 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -60902,8 +60045,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/brig) "ijj" = ( @@ -61005,9 +60147,7 @@ }, /area/chapel/office) "ike" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -61035,8 +60175,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/explab) "ikr" = ( @@ -61145,9 +60284,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "ilJ" = ( @@ -61219,7 +60356,6 @@ name = "Труба смешивания" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -61243,11 +60379,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2"; - tag = "icon-pipe-j2" - }, /obj/structure/cable{ icon_state = "2-4" }, @@ -61257,6 +60388,12 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "Botany"; + sortType = 21 + }, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "imJ" = ( @@ -61363,7 +60500,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -61385,8 +60521,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/prisonershuttle) "inS" = ( @@ -61459,7 +60594,6 @@ }, /obj/structure/cable, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/permahallway) @@ -61524,10 +60658,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-j2"; - tag = "icon-pipe-j1 (WEST)" +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, /area/hydroponics) @@ -61543,21 +60676,6 @@ icon_state = "fancy-wood-cherry" }, /area/crew_quarters/trading) -"ipW" = ( -/obj/structure/cable{ - 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{ - dir = 8; - icon_state = "neutralfull" - }, -/area/hallway/primary/central/north) "iqb" = ( /obj/machinery/firealarm{ dir = 8; @@ -61683,9 +60801,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "irq" = ( @@ -61704,7 +60820,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/security/lobby) @@ -61845,9 +60960,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "itc" = ( @@ -61893,11 +61006,8 @@ /turf/simulated/wall/r_wall/coated, /area/maintenance/incinerator) "itZ" = ( +/obj/structure/transit_tube/diagonal/crossing, /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "D-NE"; - tag = "icon-D-NE" - }, /turf/space, /area/space) "iuh" = ( @@ -61948,7 +61058,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/effect/landmark/event/lightsout, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -62151,7 +61260,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -62267,8 +61375,7 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/medical/reception) "ixu" = ( @@ -62291,7 +61398,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/checkpoint/south) @@ -62299,9 +61405,6 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 0; icon_state = "green" @@ -62322,9 +61425,21 @@ }, /area/security/brig) "izb" = ( -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/obj/effect/decal/warning_stripes/yellow/hollow, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research/restroom) "izf" = ( /obj/structure/table/wood/fancy/royalblack, /obj/machinery/computer/secure_data/laptop{ @@ -62406,38 +61521,19 @@ }, /area/medical/morgue) "iAy" = ( -/obj/structure/grille, /obj/structure/cable, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/turf/simulated/floor/wood/fancy/light, +/turf/simulated/floor/plating, /area/crew_quarters/courtroom) "iAK" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "Interrogation" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "Interrogation" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "Interrogation" - }, /obj/structure/cable{ icon_state = "0-2" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "Interrogation" + }, /turf/simulated/floor/plating, /area/security/interrogation) "iAS" = ( @@ -62455,6 +61551,21 @@ icon_state = "green" }, /area/hallway/secondary/exit) +"iAW" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research/shallway) "iBj" = ( /obj/structure/chair/wood{ dir = 4 @@ -62743,7 +61854,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -62828,7 +61938,6 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -62861,7 +61970,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -62888,16 +61996,9 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 4; icon_state = "darkbluefull" }, /area/turret_protected/ai) -"iGn" = ( -/turf/simulated/floor/plasteel{ - dir = 0; - icon_state = "red" - }, -/area/security/processing) "iGo" = ( /obj/structure/window/reinforced{ dir = 8 @@ -62950,9 +62051,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "iGG" = ( @@ -62986,8 +62085,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/main) "iHx" = ( @@ -63009,7 +62107,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -63059,8 +62156,7 @@ /obj/effect/landmark/start/doctor, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whiteblue"; - tag = "icon-whiteblue (WEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "iHX" = ( @@ -63153,7 +62249,6 @@ }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -63208,7 +62303,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -63328,7 +62422,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -63378,7 +62471,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -63411,7 +62503,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -63443,7 +62534,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -63578,7 +62668,6 @@ name = "Труба фильтрации" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -63647,9 +62736,7 @@ /area/security/checkpoint/south) "iOH" = ( /obj/structure/chair/stool, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump{ dir = 4 }, @@ -63691,7 +62778,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -63823,8 +62909,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "dark"; - temperature = 80 + icon_state = "dark" }, /area/toxins/xenobiology) "iRA" = ( @@ -63918,9 +63003,7 @@ /area/hydroponics) "iTF" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "NE-SW" - }, +/obj/structure/transit_tube/crossing/horizontal, /turf/space, /area/space) "iTM" = ( @@ -63973,7 +63056,6 @@ pixel_y = -24 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/permahallway) @@ -63998,7 +63080,6 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -64030,7 +63111,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/confetti, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/maintenance/tourist) @@ -64095,12 +63175,13 @@ }, /area/atmos/control) "iVN" = ( -/obj/machinery/vending/coffee, -/obj/effect/decal/warning_stripes/south, +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/mechanical, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "iWe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -64158,6 +63239,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/asmaint) "iWM" = ( @@ -64169,7 +63251,6 @@ sortType = 6 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -64190,7 +63271,6 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -64261,9 +63341,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "iXF" = ( @@ -64295,7 +63373,6 @@ "iYh" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/secure) @@ -64610,8 +63687,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "jch" = ( @@ -64647,16 +63723,23 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/crew_quarters/trading) "jcR" = ( -/obj/machinery/light/small, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research/restroom) "jcU" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor{ @@ -64927,10 +64010,6 @@ /turf/simulated/floor/engine, /area/medical/chemistry) "jgk" = ( -/obj/item/radio/intercom{ - pixel_x = 28; - pixel_y = -2 - }, /obj/machinery/light{ dir = 4 }, @@ -64997,8 +64076,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/paramedic) "jig" = ( @@ -65152,7 +64230,6 @@ "jjb" = ( /obj/machinery/washing_machine, /turf/simulated/floor/plasteel{ - dir = 5; icon_state = "whitegreencorner" }, /area/medical/virology) @@ -65336,22 +64413,11 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/processing) -"jlL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office/light{ - dir = 4; - pixel_y = 3 - }, -/obj/effect/decal/warning_stripes/southeast, -/turf/simulated/floor/plasteel{ - icon_state = "purplefull" - }, -/area/teleporter/abandoned) "jlW" = ( /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse/brown, @@ -65398,7 +64464,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -65447,15 +64512,6 @@ }, /area/maintenance/tourist) "jnn" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "Interrogation" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "Interrogation" - }, /obj/structure/cable{ icon_state = "2-4" }, @@ -65465,6 +64521,9 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "Interrogation" + }, /turf/simulated/floor/plating, /area/security/interrogation) "jnr" = ( @@ -65571,7 +64630,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -65698,7 +64756,6 @@ name = "Труба на фильтрацию" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -65811,8 +64868,7 @@ "jrm" = ( /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/reception) "jrq" = ( @@ -65842,7 +64898,6 @@ }, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -66298,10 +65353,6 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "jwN" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -66447,7 +65498,6 @@ "jxT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -66521,9 +65571,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "green" @@ -66595,10 +65642,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "blue" @@ -66617,17 +65660,16 @@ }, /area/quartermaster/storage) "jzw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/alarm{ - pixel_y = 22 +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + dir = 1; + icon_state = "whitepurple" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "jAa" = ( /obj/machinery/light/small{ dir = 4 @@ -66697,6 +65739,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -66726,7 +65769,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -66749,6 +65791,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/bridge/vip) "jBm" = ( @@ -66855,8 +65898,7 @@ pixel_y = 1 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "jCx" = ( @@ -66921,8 +65963,7 @@ "jCJ" = ( /obj/machinery/kitchen_machine/oven, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "jCN" = ( @@ -66969,8 +66010,7 @@ pixel_y = 14 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "jDw" = ( @@ -67168,7 +66208,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -67314,6 +66353,9 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "jIv" = ( @@ -67370,7 +66412,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -67425,7 +66466,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/warden) @@ -67696,12 +66736,11 @@ /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "jMs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/radiation, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 4; + icon_state = "whitepurple" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "jMx" = ( /obj/machinery/light{ dir = 1; @@ -67803,8 +66842,7 @@ }, /obj/effect/landmark/start/doctor, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - tag = "icon-whiteblue" + icon_state = "whiteblue" }, /area/medical/sleeper) "jPa" = ( @@ -67850,7 +66888,7 @@ /area/bridge/vip) "jPC" = ( /obj/effect/landmark/tiles/burnturf, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkred" }, /area/space) @@ -67987,7 +67025,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -68378,14 +67415,6 @@ icon_state = "darkblue" }, /area/bridge) -"jWl" = ( -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "ramptop"; - tag = "icon-stage_stairs" - }, -/area/medical/reception) "jWn" = ( /obj/structure/plasticflaps, /obj/effect/decal/warning_stripes/yellow, @@ -68470,6 +67499,10 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, @@ -68512,7 +67545,6 @@ pixel_y = -24 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/processing) @@ -68562,13 +67594,12 @@ }, /area/security/lobby) "jXW" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW"; - tag = "icon-D-SW" - }, /obj/structure/window/reinforced{ dir = 8 }, +/obj/structure/transit_tube/curved/flipped{ + dir = 8 + }, /turf/space, /area/space) "jYe" = ( @@ -68790,19 +67821,10 @@ /turf/simulated/floor/mech_bay_recharge_floor, /area/assembly/chargebay) "kbT" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "Interrogation" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "Interrogation" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/structure/cable, +/obj/effect/spawner/window/reinforced/polarized{ id = "Interrogation" }, -/obj/structure/cable, /turf/simulated/floor/plating, /area/security/interrogation) "kbW" = ( @@ -68842,7 +67864,6 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -68894,27 +67915,17 @@ }, /area/security/interrogation) "kdl" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2"; - tag = "icon-pipe-j2" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" +/obj/machinery/door/airlock/maintenance{ + name = "Telescience" }, -/area/medical/research/restroom) +/obj/structure/barricade/wooden, +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "kdM" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -69375,7 +68386,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/ne) @@ -69409,8 +68419,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "kku" = ( @@ -69426,6 +68435,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) "kkK" = ( @@ -69604,7 +68617,6 @@ "kmA" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -69625,7 +68637,6 @@ }, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -69651,11 +68662,6 @@ }, /area/toxins/xenobiology) "kmU" = ( -/obj/structure/transit_tube/station{ - dir = 8; - tag = "icon-closed (EAST)" - }, -/obj/structure/transit_tube_pod, /obj/structure/window/reinforced{ dir = 4 }, @@ -69671,11 +68677,6 @@ icon_state = "darkblue" }, /area/construction/hallway) -"kna" = ( -/turf/simulated/floor/greengrid{ - temperature = 80 - }, -/area/toxins/xenobiology) "knb" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -69839,7 +68840,6 @@ "kpq" = ( /obj/effect/decal/warning_stripes/northwestcorner, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -69894,7 +68894,6 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -70051,21 +69050,6 @@ }, /turf/simulated/floor/plasteel, /area/assembly/chargebay) -"krY" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "cloninglab" - }, -/turf/simulated/floor/plating, -/area/medical/cloning) "kss" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -70295,7 +69279,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -70354,9 +69337,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/trading) @@ -70646,7 +69627,6 @@ pixel_y = 7 }, /turf/simulated/floor/plasteel{ - dir = 5; icon_state = "whitegreencorner" }, /area/medical/virology) @@ -70659,7 +69639,6 @@ "kAe" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/hardsuitstorage) @@ -70720,7 +69699,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -70783,9 +69761,7 @@ /turf/simulated/wall, /area/maintenance/asmaint3) "kBD" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/table/reinforced, /obj/item/decorations/sticky_decorations/flammable/ghost, /obj/machinery/firealarm{ @@ -70885,8 +69861,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "kCF" = ( @@ -70998,8 +69973,7 @@ /obj/structure/closet/l3closet/scientist, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "kEh" = ( @@ -71065,9 +70039,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "kEH" = ( @@ -71171,9 +70143,7 @@ /obj/item/plant_analyzer, /obj/item/plant_analyzer, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "kGp" = ( @@ -71216,14 +70186,27 @@ }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "kGY" = ( /obj/structure/lattice, /turf/simulated/wall/rust, /area/space) +"kGZ" = ( +/obj/structure/cable{ + 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{ + icon_state = "white" + }, +/area/medical/research/restroom) "kHa" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance/double, @@ -71429,8 +70412,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/paramedic) "kJY" = ( @@ -71632,16 +70614,11 @@ }, /area/quartermaster/miningdock) "kMz" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/light/small, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" + icon_state = "purplefull" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "kMC" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/head/kitty, @@ -71935,16 +70912,11 @@ /turf/simulated/floor/plating, /area/crew_quarters/bar) "kQU" = ( -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" - }, -/area/medical/research/restroom) +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "kQV" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -71999,6 +70971,7 @@ /obj/effect/turf_decal/siding/brown/corner{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood/fancy/light, /area/bridge/meeting_room) "kRE" = ( @@ -72034,9 +71007,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse/brown{ desc = "Главный помощник архитектора станции."; real_name = "Инспектор Мышь" @@ -72085,8 +71056,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/paramedic) "kSW" = ( @@ -72132,7 +71102,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -72160,7 +71129,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 8; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) @@ -72259,21 +71229,9 @@ /area/aisat/maintenance) "kWc" = ( /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) -"kWh" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE"; - tag = "icon-D-NE" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/lattice, -/turf/space, -/area/space) "kWn" = ( /obj/item/grown/bananapeel{ layer = 1.9 @@ -72323,11 +71281,8 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "kXY" = ( -/obj/structure/transit_tube{ - icon_state = "D-NW"; - tag = "icon-D-NW" - }, -/obj/structure/window/reinforced{ +/obj/structure/lattice, +/obj/structure/transit_tube/curved{ dir = 8 }, /turf/space, @@ -72351,9 +71306,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "kYq" = ( @@ -72413,7 +71366,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -72522,11 +71474,21 @@ }, /area/toxins/test_chamber) "lap" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/exit) +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/central/south) "lay" = ( /obj/structure/holosign/barrier/engineering, /obj/effect/landmark/tiles/damageturf, @@ -72681,8 +71643,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whiteblue" }, /area/medical/cryo) "lcq" = ( @@ -72773,7 +71734,8 @@ /obj/machinery/door_control{ id = "Clown"; name = "Clowns Privacy Shutters Control"; - pixel_x = 26 + pixel_x = 25; + pixel_y = -10 }, /turf/simulated/floor/plasteel{ icon_state = "bar" @@ -72799,8 +71761,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/toxins/explab) "lfc" = ( @@ -73191,14 +72152,6 @@ }, /turf/space, /area/maintenance/ai) -"liE" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance, -/turf/simulated/floor/plating, -/area/maintenance/fpmaint) "liV" = ( /turf/simulated/floor/plasteel{ icon_state = "bluecorner" @@ -73333,7 +72286,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/gravitygenerator) @@ -73433,8 +72385,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/lobby) "lmd" = ( @@ -73564,7 +72515,6 @@ initialize_directions = 11 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -73624,8 +72574,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/explab) "lov" = ( @@ -73687,6 +72636,7 @@ /obj/effect/turf_decal/siding/brown{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood/fancy/light, /area/bridge/meeting_room) "loT" = ( @@ -73926,8 +72876,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - tag = "icon-whiteblue" + icon_state = "whiteblue" }, /area/maintenance/starboard) "lqY" = ( @@ -74125,7 +73074,6 @@ }, /area/medical/medbay2) "luu" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -74295,7 +73243,6 @@ }, /obj/machinery/atmospherics/meter, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -74404,6 +73351,16 @@ icon_state = "caution" }, /area/engine/break_room) +"lxY" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/medical/research/nhallway) "lxZ" = ( /obj/structure/cable{ icon_state = "0-4" @@ -74530,8 +73487,7 @@ /obj/item/flashlight/lamp, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "lzg" = ( @@ -74559,9 +73515,7 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/hor) "lzm" = ( -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -74692,12 +73646,6 @@ icon_state = "cmo" }, /area/medical/ward) -"lAU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/wall/r_wall, -/area/security/holding_cell) "lAV" = ( /obj/structure/table/reinforced, /obj/item/folder/yellow, @@ -74712,17 +73660,6 @@ icon_state = "darkred" }, /area/security/processing) -"lBh" = ( -/obj/structure/cable{ - 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{ - icon_state = "white" - }, -/area/medical/research/shallway) "lBo" = ( /obj/machinery/light_switch{ on = 0; @@ -74736,8 +73673,7 @@ }, /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHEAST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "lBw" = ( @@ -74752,6 +73688,10 @@ pixel_x = -24; req_access = list(63) }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -74791,16 +73731,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "visiting room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "visiting room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/effect/spawner/window/reinforced/polarized{ id = "visiting room" }, /turf/simulated/floor/plating, @@ -75073,10 +74004,17 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "lGD" = ( -/obj/structure/table/reinforced, -/obj/item/gps, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/sign/poster/official/nanotrasen_logo{ + pixel_x = -32 + }, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "lGF" = ( /obj/machinery/door/airlock/medical{ name = "Virology Bedroom"; @@ -75103,8 +74041,7 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/medical/research) "lGO" = ( @@ -75246,9 +74183,7 @@ /obj/item/healthanalyzer, /obj/item/healthanalyzer, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "lHT" = ( @@ -75412,7 +74347,6 @@ /turf/simulated/floor/plating, /area/maintenance/disposal) "lJZ" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -75456,9 +74390,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -75492,9 +74423,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -75526,7 +74454,6 @@ /obj/structure/table, /obj/item/camera, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -75798,10 +74725,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -75853,8 +74776,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/cryo) "lOI" = ( @@ -76015,8 +74937,7 @@ /obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/paramedic) "lRd" = ( @@ -76033,8 +74954,7 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/medical/reception) "lRk" = ( @@ -76063,14 +74983,11 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) "lRE" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/door_control{ id = "Traiders Windows"; name = "Traiders Privacy Shutters"; @@ -76231,7 +75148,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -76561,9 +75477,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse/rat, /turf/simulated/floor/plating, /area/maintenance/trading) @@ -76877,8 +75791,7 @@ "mbJ" = ( /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHEAST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "mbM" = ( @@ -76925,7 +75838,6 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/ai_monitored/storage/eva) @@ -77061,7 +75973,6 @@ }, /obj/effect/landmark/start/warden, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/warden) @@ -77120,7 +76031,6 @@ "mfd" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/permahallway) @@ -77161,8 +76071,7 @@ }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "mfF" = ( @@ -77230,7 +76139,6 @@ location = "A32" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -77346,6 +76254,16 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/toxins/xenobiology) +"mhI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplecorner" + }, +/area/medical/genetics) "mhK" = ( /obj/structure/cable{ icon_state = "4-8" @@ -77380,7 +76298,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/gravitygenerator) @@ -77434,7 +76351,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/library) @@ -77562,8 +76478,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/sleeper) "mkh" = ( @@ -77744,7 +76659,6 @@ /area/security/medbay) "mml" = ( /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/permahallway) @@ -77969,8 +76883,7 @@ /obj/machinery/atmospherics/unary/cryo_cell, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHWEST)" + icon_state = "whiteblue" }, /area/medical/cryo) "mog" = ( @@ -78067,7 +76980,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -78216,8 +77128,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/permahallway) "mqV" = ( @@ -78255,7 +77166,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -78413,7 +77323,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -78541,21 +77450,20 @@ /obj/structure/table/reinforced, /obj/item/clothing/gloves/color/black, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) "muS" = ( -/obj/structure/transit_tube{ - icon_state = "S-NE"; - tag = "icon-S-NE" - }, /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced{ dir = 1 }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "darkblue" @@ -78585,8 +77493,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "mvI" = ( @@ -78610,7 +77517,6 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -78625,9 +77531,7 @@ desc = "Главный помощник архитектора станции."; real_name = "Инспектор Мышь" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "mwf" = ( @@ -78638,12 +77542,13 @@ }, /area/aisat/maintenance) "mwg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/structure/disposalpipe/junction{ + dir = 1 }, -/turf/simulated/wall/r_wall, -/area/security/processing) +/turf/simulated/floor/plasteel{ + icon_state = "purplecorner" + }, +/area/hallway/primary/aft) "mwh" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -78685,6 +77590,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -78731,7 +77640,6 @@ location = "V2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -78752,7 +77660,6 @@ pixel_y = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -78900,7 +77807,6 @@ pixel_y = -30 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/brig) @@ -78945,19 +77851,6 @@ icon_state = "red" }, /area/security/main) -"mzX" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkblue" - }, -/area/construction/hallway) "mzZ" = ( /obj/structure/sign/science{ icon_state = "doors" @@ -78968,23 +77861,12 @@ /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) -"mAd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/barricade/wooden, -/obj/effect/decal/warning_stripes/northeast, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) "mAl" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -79167,7 +78049,6 @@ initialize_directions = 11 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -79322,8 +78203,7 @@ "mCW" = ( /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/medbay2) "mDc" = ( @@ -79357,8 +78237,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/brig) "mDj" = ( @@ -79391,7 +78270,6 @@ name = "Труба подачи азота в реактор" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -79627,13 +78505,11 @@ /obj/machinery/photocopier/faxmachine/longrange{ department = "NT Representative's Office" }, -/obj/structure/window/reinforced/polarized{ - id = "cloninglab" - }, /obj/machinery/camera{ c_tag = "NT Representative's Office"; dir = 8 }, +/obj/structure/window/reinforced, /turf/simulated/floor/carpet/royalblack, /area/ntrep) "mFk" = ( @@ -79708,10 +78584,6 @@ }, /area/medical/medbay2) "mGs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ icon_state = "1-2" @@ -79719,8 +78591,8 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -79776,7 +78648,6 @@ req_access = list(63) }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/courtroom) @@ -79890,7 +78761,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -79943,24 +78813,8 @@ icon_state = "purple" }, /area/hallway/primary/aft) -"mJK" = ( -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "whiteblue"; - tag = "icon-whiteblue (SOUTHWEST)" - }, -/area/medical/sleeper) "mJO" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; +/obj/effect/spawner/window/reinforced/polarized{ id = "cloninglab" }, /turf/simulated/floor/plating, @@ -80088,7 +78942,6 @@ /obj/item/storage/belt/utility, /obj/item/wrench, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -80150,7 +79003,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -80178,7 +79030,7 @@ "mLJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/junction, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/transparent/glass/reinforced, /area/hallway/secondary/exit) "mLS" = ( @@ -80220,7 +79072,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -80579,7 +79430,6 @@ "mQp" = ( /obj/effect/landmark/start/engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -80648,8 +79498,7 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/securehallway) "mRE" = ( @@ -80709,14 +79558,8 @@ }, /area/security/customs) "mSh" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - cell_type = 5000; - dir = 4; - name = "east bump"; - pixel_x = 26 +/obj/structure/sign/science{ + pixel_x = 32 }, /turf/simulated/floor/plasteel{ dir = 4; @@ -80758,14 +79601,13 @@ }, /area/chapel/main) "mSG" = ( -/obj/structure/transit_tube{ - icon_state = "W-SE"; - tag = "icon-W-SE" - }, /obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/transit_tube/curved{ + dir = 8 + }, /turf/space, /area/space) "mSR" = ( @@ -80875,20 +79717,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "chem" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "chem" - }, -/obj/structure/window/reinforced/polarized{ - id = "chem" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/effect/spawner/window/reinforced/polarized{ id = "chem" }, /turf/simulated/floor/plating, @@ -80969,7 +79798,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/junction, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" @@ -81153,9 +79982,7 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "mXP" = ( @@ -81288,6 +80115,10 @@ /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "mZk" = ( @@ -81341,8 +80172,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "mZK" = ( @@ -81561,10 +80391,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2"; - tag = "icon-pipe-j2" +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ icon_state = "purplefull" @@ -81598,7 +80427,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -81610,10 +80438,11 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 1; + icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/fore) "ncu" = ( @@ -81660,8 +80489,7 @@ "ndm" = ( /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner (WEST)" + icon_state = "whitebluecorner" }, /area/medical/reception) "ndo" = ( @@ -81720,9 +80548,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/security/detectives_office) "ndY" = ( @@ -81804,8 +80630,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whiteblue"; - tag = "icon-whiteblue (EAST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "nfb" = ( @@ -81881,13 +80706,6 @@ scrub_N2O = 1; scrub_Toxins = 1 }, -/obj/machinery/light{ - dir = 1; - on = 1 - }, -/obj/structure/sign/poster/official/random{ - pixel_y = 32 - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple"; @@ -81974,9 +80792,6 @@ }, /area/crew_quarters/fitness) "nhF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -82034,8 +80849,7 @@ }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "niq" = ( @@ -82167,8 +80981,7 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/cryo) "njG" = ( @@ -82319,6 +81132,9 @@ name = "Hydroponics"; req_access = list(35) }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -82456,9 +81272,6 @@ }, /area/medical/research/shallway) "nmy" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 28 - }, /obj/machinery/papershredder, /turf/simulated/floor/plasteel{ icon_state = "cmo" @@ -82666,7 +81479,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -82705,11 +81517,12 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/disposalpipe/junction{ - dir = 8 +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "IAA Office"; + sortType = 29 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -82718,11 +81531,11 @@ /obj/machinery/door_control{ id = "Mime"; name = "Mimes Privacy Shutters Control"; - pixel_x = -27 + pixel_x = -25; + pixel_y = -10 }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -82783,7 +81596,7 @@ pixel_y = -32 }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "nqH" = ( @@ -82836,8 +81649,7 @@ "nqX" = ( /obj/machinery/kitchen_machine/candy_maker, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "nrd" = ( @@ -82848,8 +81660,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "nrh" = ( @@ -82862,6 +81673,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/bridge/vip) "nrr" = ( @@ -82899,8 +81711,8 @@ }, /area/hallway/primary/central/north) "nrB" = ( -/obj/structure/sign/nosmoking_2{ - pixel_y = 32 +/obj/item/radio/intercom{ + pixel_y = 24 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -82923,6 +81735,16 @@ /obj/structure/cable, /turf/simulated/floor/plating, /area/security/prisonershuttle) +"nrG" = ( +/obj/structure/table/glass, +/obj/item/scalpel{ + pixel_y = 8 + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplefull" + }, +/area/medical/research/restroom) "nrJ" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -82949,8 +81771,7 @@ /obj/structure/delta_statue/nw, /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "vault"; - tag = "icon-vault (NORTHEAST)" + icon_state = "vault" }, /area/bridge/vip) "nsi" = ( @@ -83125,7 +81946,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -83185,7 +82005,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -83302,6 +82121,10 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -83335,12 +82158,6 @@ /obj/structure/bookcase, /turf/simulated/floor/plating, /area/maintenance/library) -"nvV" = ( -/turf/simulated/floor/plasteel{ - dir = 0; - icon_state = "red" - }, -/area/security/brig) "nwe" = ( /obj/effect/decal/remains/mouse, /turf/simulated/floor/plating, @@ -83389,8 +82206,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "nwH" = ( @@ -83453,7 +82269,6 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -83488,7 +82303,6 @@ "nyk" = ( /obj/effect/landmark/start/atmospheric, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -83521,46 +82335,21 @@ }, /area/library) "nzg" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - id = "courtroom" - }, /obj/structure/cable{ icon_state = "0-2" }, /obj/structure/cable{ icon_state = "2-8" }, -/obj/structure/grille, +/obj/effect/spawner/window/reinforced/polarized{ + id = "courtroom" + }, /turf/simulated/floor/plating, /area/crew_quarters/courtroom) "nzh" = ( /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel/airless, /area/toxins/test_area) -"nzk" = ( -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - id = "execution" - }, -/obj/structure/cable, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/security/execution) "nzN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -83847,7 +82636,6 @@ /obj/effect/decal/warning_stripes/yellow, /obj/machinery/light, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -83863,9 +82651,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "nCX" = ( @@ -83898,13 +82684,15 @@ }, /area/security/prison/cell_block/A) "nDf" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/glass{ - amount = 10 +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "nDj" = ( /obj/structure/closet/emcloset, /obj/item/radio/intercom{ @@ -84034,9 +82822,7 @@ }, /area/security/main) "nEC" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -84083,6 +82869,7 @@ /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/asmaint2) "nFA" = ( @@ -84168,6 +82955,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "nGj" = ( @@ -84215,7 +83005,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/gravitygenerator) @@ -84237,7 +83026,6 @@ /obj/machinery/vending/autodrobe, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -84399,7 +83187,6 @@ }, /area/hydroponics) "nIG" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -84412,6 +83199,10 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkblue" @@ -84561,22 +83352,12 @@ }, /area/medical/research) "nKc" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "visiting room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "visiting room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "visiting room" - }, /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/grille, +/obj/effect/spawner/window/reinforced/polarized{ + id = "visiting room" + }, /turf/simulated/floor/plating, /area/security/visiting_room) "nKe" = ( @@ -84684,8 +83465,7 @@ /obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/cryo) "nLF" = ( @@ -84727,8 +83507,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/medical/research) "nMs" = ( @@ -84809,6 +83588,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -84843,12 +83625,6 @@ icon_state = "neutral" }, /area/crew_quarters/fitness) -"nNF" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/hallway/primary/central/west) "nNJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/anniversary_vintage_reprint{ @@ -84896,7 +83672,6 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -84972,7 +83747,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/ne) @@ -84982,9 +83756,15 @@ /turf/simulated/floor/plasteel, /area/gateway) "nPX" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/chair/comfy/purp{ + dir = 8 + }, +/obj/effect/decal/warning_stripes/southeast, +/obj/effect/landmark/start/scientist, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplefull" + }, +/area/medical/research/restroom) "nPZ" = ( /obj/machinery/newscaster{ pixel_x = 28; @@ -85260,7 +84040,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -85270,7 +84049,7 @@ name = "Toilet" }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "nSz" = ( @@ -85285,7 +84064,6 @@ "nSA" = ( /obj/effect/landmark/start/civilian, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -85357,7 +84135,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -85390,7 +84167,6 @@ }, /mob/living/simple_animal/bot/secbot/beepsky, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -85412,8 +84188,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/explab) "nTY" = ( @@ -85432,7 +84207,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "blue" @@ -85479,14 +84253,12 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) "nUP" = ( /obj/effect/decal/warning_stripes/northwestcorner, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -85505,7 +84277,6 @@ /obj/effect/decal/cleanable/blood/writing, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -85526,7 +84297,6 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -85565,9 +84335,7 @@ "nWB" = ( /obj/machinery/vending/boozeomat, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar) "nWI" = ( @@ -85626,8 +84394,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/medical/virology/lab) "nXm" = ( @@ -85681,6 +84448,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -85765,8 +84535,7 @@ /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "nZz" = ( @@ -85832,7 +84601,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/brig) @@ -86065,7 +84833,6 @@ /area/crew_quarters/theatre) "ocE" = ( /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/hardsuitstorage) @@ -86254,7 +85021,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -86280,7 +85046,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -86357,8 +85122,7 @@ /obj/item/clothing/glasses/science, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "ogP" = ( @@ -86382,7 +85146,6 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -86435,7 +85198,6 @@ tag = "icon-pipe-j1 (WEST)" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -86458,7 +85220,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -86522,7 +85283,6 @@ dir = 9 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -86719,7 +85479,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -86936,7 +85695,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -87073,7 +85831,6 @@ "opy" = ( /obj/effect/landmark/event/lightsout, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -87101,6 +85858,7 @@ opacity = 0 }, /obj/effect/spawner/window/reinforced, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/security/holding_cell) "opF" = ( @@ -87292,9 +86050,7 @@ }, /area/medical/virology/lab) "orI" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/item/decorations/sticky_decorations/flammable/spiderweb, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -87332,7 +86088,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -87521,7 +86276,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -87620,7 +86374,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -87863,8 +86616,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "ozd" = ( @@ -87938,8 +86690,20 @@ /turf/simulated/floor/carpet, /area/library) "ozs" = ( -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/machinery/camera{ + c_tag = "Research Break Room"; + network = list("Research","SS13") + }, +/obj/structure/closet/secure_closet/scientist, +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "ozQ" = ( /obj/structure/cable{ icon_state = "2-8" @@ -87969,20 +86733,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ +/obj/effect/spawner/window/reinforced/polarized{ id = "execution" }, /turf/simulated/floor/plating, @@ -88074,7 +86825,6 @@ name = "Труба дыхательной смеси" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -88136,8 +86886,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "oBz" = ( @@ -88145,7 +86894,6 @@ /obj/effect/spawner/random_spawners/blood_maybe, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -88195,8 +86943,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "oCc" = ( @@ -88434,13 +87181,12 @@ }, /area/medical/surgery/south) "oFp" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" +/obj/structure/chair/office/light{ + dir = 4; + pixel_y = 3 }, -/area/medical/research/restroom) +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "oFs" = ( /turf/simulated/floor/plating, /area/engine/engineering) @@ -88550,6 +87296,19 @@ /obj/structure/sign/vacuum, /turf/simulated/wall/r_wall, /area/engine/engineering) +"oHb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -26 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" + }, +/area/medical/research/shallway) "oHg" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -88623,8 +87382,7 @@ "oHK" = ( /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "oHS" = ( @@ -88664,7 +87422,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -88689,6 +87446,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "oIy" = ( @@ -88792,8 +87552,7 @@ "oJO" = ( /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHWEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "oJS" = ( @@ -88815,8 +87574,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "oJX" = ( @@ -89188,13 +87946,6 @@ "oOo" = ( /turf/simulated/wall/r_wall, /area/toxins/xenobiology) -"oOr" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" - }, -/area/medical/reception) "oOK" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -89260,6 +88011,9 @@ /turf/simulated/floor/plating/airless, /area/space) "oPr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 0; icon_state = "blue" @@ -89321,7 +88075,6 @@ /area/security/securearmory) "oPZ" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -89390,12 +88143,6 @@ }, /turf/simulated/floor/plasteel, /area/engine/break_room) -"oQU" = ( -/turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" - }, -/area/medical/reception) "oRe" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -89434,7 +88181,6 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -89456,8 +88202,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "oRC" = ( @@ -89528,7 +88273,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -89605,9 +88349,7 @@ /obj/effect/landmark/event/lightsout, /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/library) "oTl" = ( @@ -89621,6 +88363,9 @@ icon_state = "4-8" }, /obj/structure/grille, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "oTu" = ( @@ -89840,7 +88585,6 @@ /area/gateway) "oWg" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -90005,21 +88749,10 @@ }, /area/toxins/lab) "oXs" = ( -/obj/structure/closet/secure_closet/scientist, -/obj/machinery/power/apc{ - cell_type = 5000; - dir = 4; - name = "east bump"; - pixel_x = 26 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" - }, -/area/medical/research/restroom) +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "oXx" = ( /obj/structure/cable{ icon_state = "1-2" @@ -90357,7 +89090,6 @@ /area/security/permahallway) "pcp" = ( /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/customs) @@ -90663,8 +89395,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "pgt" = ( @@ -90829,10 +89560,11 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -91002,7 +89734,6 @@ "pjS" = ( /obj/machinery/vending/snack, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "yellow" }, /area/hallway/primary/port/west) @@ -91240,6 +89971,18 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint4) +"pmZ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "vault" + }, +/area/engine/mechanic_workshop/hangar) "pnb" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -91256,29 +89999,9 @@ /turf/simulated/floor/plating, /area/magistrateoffice) "pnv" = ( -/obj/structure/sign/science{ - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/camera{ - c_tag = "Research Break Room"; - network = list("Research","SS13") - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" - }, -/area/medical/research/restroom) +/obj/machinery/teleport/hub, +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "pnx" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -91418,7 +90141,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -91644,7 +90366,6 @@ pixel_y = -28 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/customs) @@ -91772,10 +90493,6 @@ /area/storage/tech) "psg" = ( /obj/structure/chair/office/dark, -/obj/machinery/keycard_auth{ - pixel_x = 28; - pixel_y = -24 - }, /obj/machinery/keycard_auth{ pixel_x = 28; pixel_y = -24 @@ -91809,7 +90526,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -91865,8 +90581,7 @@ pixel_y = -5 }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - tag = "icon-whiteblue" + icon_state = "whiteblue" }, /area/medical/sleeper) "psQ" = ( @@ -92003,9 +90718,6 @@ }, /area/maintenance/kitchen) "puA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 9 - }, /obj/machinery/access_button{ command = "cycle_interior"; frequency = 1379; @@ -92014,6 +90726,9 @@ pixel_x = 25; pixel_y = 25 }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 5 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" @@ -92139,7 +90854,6 @@ /area/hallway/secondary/exit) "pwt" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -92187,7 +90901,6 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -92234,8 +90947,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -92355,8 +91068,7 @@ /obj/effect/landmark/start/doctor, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whiteblue" }, /area/medical/sleeper) "pzS" = ( @@ -92466,10 +91178,6 @@ /turf/simulated/floor/plasteel, /area/security/checkpoint/south) "pAy" = ( -/obj/machinery/light{ - dir = 1; - on = 1 - }, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -92512,7 +91220,9 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/structure/disposalpipe/junction{ - dir = 8 + dir = 2; + icon_state = "pipe-j2"; + tag = "icon-pipe-j2" }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" @@ -92551,8 +91261,7 @@ /obj/structure/window/reinforced, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "ramptop"; - tag = "icon-stage_stairs" + icon_state = "ramptop" }, /area/crew_quarters/fitness) "pBl" = ( @@ -92609,6 +91318,9 @@ /obj/machinery/newscaster{ pixel_y = 32 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "green" @@ -92798,11 +91510,6 @@ /turf/simulated/floor/carpet/arcade, /area/crew_quarters/fitness) "pCX" = ( -/obj/structure/closet/secure_closet/guncabinet{ - anchored = 1; - name = "Magazines for SP-91-RC"; - req_access = list(1) - }, /obj/item/gun/energy/gun/advtaser{ pixel_x = -3; pixel_y = 3 @@ -92817,6 +91524,11 @@ name = "Station Intercom (General)"; pixel_y = -29 }, +/obj/structure/closet/secure_closet/guncabinet{ + anchored = 1; + name = "Tasers"; + req_access = list(1) + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "red" @@ -92832,7 +91544,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -92905,8 +91616,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/crew_quarters/kitchen) "pEd" = ( @@ -93061,8 +91771,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "pFF" = ( @@ -93084,6 +91793,10 @@ pixel_y = 32 }, /obj/effect/turf_decal/siding/brown/corner, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood/fancy/light, /area/bridge/meeting_room) "pFI" = ( @@ -93289,7 +92002,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint3) "pHL" = ( -/obj/machinery/photocopier, +/obj/machinery/vending/cigarette, /turf/simulated/floor/plasteel{ icon_state = "whitepurple"; tag = "icon-whitepurple (WEST)" @@ -93467,8 +92180,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/sleeper) "pJg" = ( @@ -93556,7 +92268,6 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -93632,9 +92343,7 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "pKy" = ( @@ -93670,7 +92379,6 @@ /obj/structure/piano, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -93691,8 +92399,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/sleeper) "pLb" = ( @@ -93879,8 +92586,7 @@ /obj/structure/table, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/toxins/explab) "pNf" = ( @@ -94129,8 +92835,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/securehallway) "pQd" = ( @@ -94188,8 +92893,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/lobby) "pQP" = ( @@ -94223,7 +92927,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/warden) @@ -94240,7 +92943,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -94277,7 +92979,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -94518,7 +93219,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -94526,16 +93226,12 @@ /obj/structure/delta_statue/n, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "vault"; - tag = "icon-vault (WEST)" + icon_state = "vault" }, /area/bridge/vip) "pVL" = ( /obj/machinery/disposal, /obj/effect/decal/warning_stripes/red, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, /obj/structure/sign/deathsposal{ pixel_y = 32 }, @@ -94543,6 +93239,9 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -94595,7 +93294,6 @@ req_access = list(63) }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/courtroom) @@ -94771,7 +93469,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -94894,9 +93591,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "pYW" = ( @@ -94913,6 +93608,9 @@ pixel_x = -24; pixel_y = -22 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -95042,7 +93740,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -95144,8 +93841,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -95532,8 +94229,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/brig) "qgl" = ( @@ -95546,7 +94242,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/ne) @@ -95620,7 +94315,6 @@ }, /obj/machinery/light, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/brig) @@ -95642,8 +94336,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "qhS" = ( @@ -95701,20 +94394,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "visiting room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "visiting room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "visiting room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/effect/spawner/window/reinforced/polarized{ id = "visiting room" }, /turf/simulated/floor/plating, @@ -95722,8 +94402,7 @@ "qih" = ( /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "qis" = ( @@ -95741,7 +94420,6 @@ pixel_y = -30 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/permahallway) @@ -95752,7 +94430,6 @@ req_access = list(63) }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/permahallway) @@ -95823,6 +94500,15 @@ }, /turf/simulated/floor/plasteel, /area/engine/gravitygenerator) +"qjq" = ( +/obj/machinery/newscaster{ + pixel_x = 28 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "qjr" = ( /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/unary/vent_pump/high_volume{ @@ -95971,26 +94657,29 @@ }, /area/maintenance/asmaint4) "qla" = ( -/obj/structure/grille, /obj/structure/cable{ icon_state = "0-4" }, /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "courtroom" +/turf/simulated/floor/plating, +/area/crew_quarters/courtroom) +"qlc" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/window/reinforced/polarized{ - id = "courtroom" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "vault" }, -/turf/simulated/floor/wood/fancy/light, -/area/crew_quarters/courtroom) +/area/engine/mechanic_workshop/hangar) "qlu" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -96016,8 +94705,7 @@ }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "qlJ" = ( @@ -96167,7 +94855,6 @@ }, /obj/effect/landmark/start/atmospheric, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -96177,7 +94864,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -96321,6 +95007,7 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -96370,9 +95057,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "qpk" = ( @@ -96408,9 +95093,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "qpC" = ( @@ -96510,9 +95193,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/junction{ dir = 8; icon_state = "pipe-j2"; @@ -96671,9 +95352,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/maintenance/fore) @@ -96735,7 +95413,6 @@ /obj/structure/table/reinforced, /obj/item/flashlight/lamp, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -96793,8 +95470,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitegreen"; - tag = "icon-whitegreen (EAST)" + icon_state = "whitegreen" }, /area/medical/medbay) "qtk" = ( @@ -96850,8 +95526,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "qtU" = ( @@ -96885,8 +95560,7 @@ }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "qud" = ( @@ -96926,7 +95600,6 @@ /obj/structure/dispenser/oxygen, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/ai_monitored/storage/eva) @@ -97012,8 +95685,7 @@ /obj/structure/bed/dogbed/pet, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "quW" = ( @@ -97045,11 +95717,10 @@ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 2; + dir = 8; icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -97095,13 +95766,17 @@ }, /area/engine/aienter) "qwa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/office/light{ +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/effect/decal/warning_stripes/northwest, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research/restroom) "qwb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -97112,6 +95787,9 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "qws" = ( @@ -97273,8 +95951,7 @@ /obj/item/storage/bag/bio, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "qxE" = ( @@ -97359,8 +96036,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/hallway/primary/starboard/east) "qzh" = ( @@ -97452,7 +96128,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -97692,8 +96367,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "qCL" = ( @@ -97701,7 +96375,6 @@ /obj/item/paper_bin, /obj/item/pen, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/chief) @@ -97740,9 +96413,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/security/holding_cell) @@ -97857,8 +96527,7 @@ "qEX" = ( /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/medbay2) "qEZ" = ( @@ -97958,7 +96627,6 @@ /obj/structure/table/reinforced, /obj/item/flashlight/lamp, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/chief) @@ -97968,8 +96636,7 @@ /obj/item/book/manual/research_and_development, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "qGf" = ( @@ -97988,7 +96655,6 @@ pixel_y = -32 }, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/break_room) @@ -98011,8 +96677,7 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHEAST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "qGt" = ( @@ -98038,7 +96703,6 @@ pixel_y = -30 }, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/engineering/monitor) @@ -98147,7 +96811,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -98206,7 +96869,6 @@ /area/chapel/main) "qJo" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -98305,7 +96967,7 @@ pixel_y = 32 }, /turf/simulated/floor/plasteel{ - icon_state = "hydrofloor" + icon_state = "neutralfull" }, /area/crew_quarters/serviceyard) "qKI" = ( @@ -98346,7 +97008,6 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -98400,6 +97061,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "qLc" = ( @@ -98432,7 +97096,6 @@ /area/medical/virology/lab) "qLE" = ( /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "yellow" }, /area/storage/primary) @@ -98499,6 +97162,9 @@ id_tag = "BridgeLockdown"; name = "Bridge Lockdown" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -98541,21 +97207,12 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - id = "execution" - }, /obj/structure/cable{ icon_state = "2-8" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "execution" + }, /turf/simulated/floor/plating, /area/security/execution) "qNd" = ( @@ -98616,11 +97273,14 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/medical/genetics) "qNX" = ( -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /obj/effect/decal/warning_stripes/north, /obj/effect/spawner/random_spawners/blood_maybe, /turf/simulated/floor/plasteel{ @@ -98730,6 +97390,28 @@ icon_state = "dark" }, /area/maintenance/library) +"qPg" = ( +/obj/machinery/door/airlock/research/glass{ + name = "Research Break Room"; + req_access = list(47) + }, +/obj/machinery/door/firedoor, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research/nhallway) "qPr" = ( /obj/machinery/door/airlock/security/glass{ id = "execution"; @@ -99115,7 +97797,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -99155,7 +97836,6 @@ pixel_y = 3 }, /turf/simulated/floor/plasteel{ - dir = 5; icon_state = "whitegreencorner" }, /area/medical/virology) @@ -99184,19 +97864,9 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) -"qVm" = ( -/obj/structure/transit_tube{ - icon_state = "D-SE"; - tag = "icon-D-SE" - }, -/obj/structure/window/reinforced, -/obj/structure/lattice, -/turf/space, -/area/space) "qVp" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -99305,9 +97975,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/crew_quarters/theatre) -"qWU" = ( -/turf/simulated/wall/r_wall, -/area/teleporter/abandoned) "qXd" = ( /obj/machinery/vending/security, /obj/machinery/newscaster/security_unit{ @@ -99341,10 +98008,13 @@ }, /area/maintenance/tourist) "qXv" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurple" @@ -99469,9 +98139,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/security/detectives_office) "qZq" = ( @@ -99574,7 +98242,6 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -99663,8 +98330,7 @@ }, /obj/machinery/light/small, /turf/simulated/floor/plasteel{ - icon_state = "dark"; - temperature = 80 + icon_state = "dark" }, /area/toxins/xenobiology) "rbD" = ( @@ -99750,7 +98416,6 @@ }, /mob/living/simple_animal/mothroach, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos/control) @@ -99793,7 +98458,6 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/chief) @@ -99816,8 +98480,7 @@ /area/library) "rcy" = ( /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - tag = "icon-whiteblue" + icon_state = "whiteblue" }, /area/medical/sleeper) "rcA" = ( @@ -99828,6 +98491,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/bridge/vip) "rcD" = ( @@ -99929,6 +98593,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fore) "rdT" = ( @@ -100029,7 +98694,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -100070,8 +98734,7 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "rfz" = ( @@ -100151,8 +98814,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "rgm" = ( @@ -100179,7 +98841,6 @@ "rgy" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/secondary/exit/maint) @@ -100187,19 +98848,13 @@ /turf/simulated/floor/wood, /area/library) "rgD" = ( -/obj/structure/sign/poster/official/nanotrasen_logo{ - pixel_x = -32 - }, -/obj/structure/table, -/obj/machinery/kitchen_machine/microwave{ - pixel_x = -1; - pixel_y = 7 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/glass{ + amount = 10 }, -/area/medical/research/restroom) +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "rgF" = ( /obj/effect/decal/warning_stripes/west, /obj/structure/table/reinforced, @@ -100427,8 +99082,7 @@ }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTHWEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "rjQ" = ( @@ -100457,7 +99111,6 @@ /turf/simulated/floor/plating, /area/maintenance/maintcentral) "rki" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -100535,8 +99188,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/paramedic) "rlm" = ( @@ -100608,7 +99260,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering/monitor) @@ -100657,7 +99308,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) @@ -100810,7 +99460,6 @@ icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -100842,7 +99491,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -100943,8 +99591,7 @@ "rpM" = ( /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whiteblue"; - tag = "icon-whiteblue (WEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "rpO" = ( @@ -100994,7 +99641,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -101028,8 +99674,7 @@ "rqY" = ( /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitegreen"; - tag = "icon-whitegreen (EAST)" + icon_state = "whitegreen" }, /area/medical/medbay) "rri" = ( @@ -101068,8 +99713,8 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" @@ -101251,6 +99896,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) "rtn" = ( @@ -101271,6 +99919,7 @@ /obj/machinery/light{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -101282,8 +99931,7 @@ /area/toxins/sm_test_chamber) "rtG" = ( /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/range) "rtJ" = ( @@ -101341,7 +99989,6 @@ tag = "icon-pipe-j1 (EAST)" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -101365,15 +100012,15 @@ /turf/simulated/floor/plating, /area/security/checkpoint/south) "ruT" = ( -/obj/effect/decal/warning_stripes/south, -/obj/machinery/vending/snack, -/obj/structure/sign/poster/contraband/smoke{ +/obj/structure/computerframe, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random{ pixel_y = 32 }, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "rvb" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -101469,7 +100116,6 @@ sortType = 9 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -101496,8 +100142,7 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whiteblue"; - tag = "icon-whiteblue (EAST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "rwM" = ( @@ -101602,8 +100247,7 @@ "rxH" = ( /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "rxL" = ( @@ -101739,12 +100383,22 @@ /turf/simulated/floor/wood, /area/crew_quarters/cabin3) "rzA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" + dir = 4 }, -/turf/simulated/wall/r_wall, -/area/security/interrogation) +/turf/simulated/floor/plasteel{ + dir = 1 + }, +/area/security/processing) "rzM" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/portable_atmospherics/canister/air, @@ -101808,7 +100462,6 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -102045,11 +100698,13 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/hor) "rDm" = ( -/obj/structure/transit_tube, /obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/transit_tube/junction{ + dir = 4 + }, /turf/space, /area/space) "rDp" = ( @@ -102085,7 +100740,6 @@ /obj/effect/decal/warning_stripes/west, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/engineering) @@ -102440,8 +101094,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "rHM" = ( @@ -102489,8 +101142,7 @@ /obj/effect/landmark/start/scientist, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "rIw" = ( @@ -102552,10 +101204,10 @@ /turf/simulated/floor/plasteel, /area/gateway) "rJr" = ( -/obj/machinery/vending/cigarette, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/photocopier, /turf/simulated/floor/plasteel{ icon_state = "whitepurple"; tag = "icon-whitepurple (WEST)" @@ -102575,8 +101227,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/closet/radiation, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "rJL" = ( @@ -102651,7 +101302,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -102668,7 +101318,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -102837,9 +101486,7 @@ }, /area/crew_quarters/locker) "rMn" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/item/decorations/sticky_decorations/flammable/christmas_tree, /turf/simulated/floor/plating, /area/crew_quarters/trading) @@ -102871,9 +101518,7 @@ req_access = list(37) }, /obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/library) "rMu" = ( @@ -102927,7 +101572,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -103133,7 +101777,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -103293,13 +101936,12 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, /obj/structure/cable{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, @@ -103355,9 +101997,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint4) "rTm" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "4-8" }, @@ -103537,8 +102177,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/hallway/primary/starboard/east) "rVw" = ( @@ -103555,10 +102194,6 @@ /turf/simulated/floor/plasteel, /area/storage/tech) "rVF" = ( -/obj/structure/disposalpipe/junction{ - dir = 8; - tag = "icon-pipe-j1 (EAST)" - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=A39"; location = "A38" @@ -103571,6 +102206,10 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry/lounge) "rVP" = ( @@ -103597,7 +102236,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -103893,8 +102531,7 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "rampbottom"; - tag = "icon-stage_stairs" + icon_state = "rampbottom" }, /area/medical/research) "sbb" = ( @@ -103965,19 +102602,9 @@ }, /obj/item/aicard, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) -"sbv" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/double, -/turf/simulated/floor/plating, -/area/maintenance/fpmaint) "sbD" = ( /obj/structure/table/reinforced, /obj/machinery/light{ @@ -104278,9 +102905,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "seM" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood{ icon_state = "fancy-wood-cherry" }, @@ -104318,8 +102943,7 @@ }, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "sfU" = ( @@ -104393,7 +103017,6 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -104455,7 +103078,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "2-4" }, @@ -104483,7 +103105,6 @@ }, /obj/effect/landmark/start/atmospheric, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -104683,12 +103304,7 @@ dir = 8; initialize_directions = 11 }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -104747,8 +103363,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/sleeper) "slr" = ( @@ -104776,9 +103391,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -104807,7 +103419,6 @@ /obj/structure/table, /obj/item/deck/cards, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -104972,7 +103583,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -105222,6 +103832,17 @@ icon_state = "red" }, /area/security/range) +"sqA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/hallway/primary/central/nw) "sqB" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -105452,6 +104073,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/bridge/vip) "stf" = ( @@ -105463,7 +104085,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -105483,11 +104104,10 @@ /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; - name = "HoP Office"; - sortType = 15 + name = "NTR Office"; + sortType = 26 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/ne) @@ -105497,8 +104117,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whiteblue"; - tag = "icon-whiteblue (EAST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "stT" = ( @@ -105678,6 +104297,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" @@ -105857,25 +104479,14 @@ }, /area/library/game_zone) "sxM" = ( -/obj/structure/grille, /obj/structure/cable{ icon_state = "1-8" }, /obj/structure/cable, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/turf/simulated/floor/wood/fancy/light{ - color = "gray" - }, +/turf/simulated/floor/plating, /area/crew_quarters/courtroom) "sxO" = ( /obj/machinery/hologram/holopad, @@ -106119,7 +104730,12 @@ scrub_N2O = 1; scrub_Toxins = 1 }, -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + name = "Genetics"; + sortType = 23; + tag = "icon-pipe-j1s (EAST)" + }, /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, @@ -106154,6 +104770,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "sAI" = ( @@ -106166,6 +104785,9 @@ dir = 6; network = list("SS13","MiniSat") }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkblue" @@ -106185,6 +104807,9 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint3) "sAN" = ( +/obj/item/radio/intercom{ + pixel_y = -28 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitegreencorner" @@ -106206,7 +104831,6 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -106297,7 +104921,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -106400,7 +105023,6 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "green" @@ -106428,7 +105050,6 @@ /obj/item/folder, /obj/item/pen, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -106451,9 +105072,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/trading) "sDU" = ( @@ -106493,8 +105112,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whiteblue" }, /area/medical/sleeper) "sEv" = ( @@ -106529,8 +105147,7 @@ "sEK" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, /turf/simulated/floor/plasteel{ - icon_state = "dark"; - temperature = 80 + icon_state = "dark" }, /area/toxins/xenobiology) "sEO" = ( @@ -106638,7 +105255,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 4; icon_state = "darkbluefull" }, /area/turret_protected/aisat_interior) @@ -106690,9 +105306,9 @@ }, /area/turret_protected/aisat_interior) "sHT" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW"; - tag = "icon-D-SW" +/obj/structure/lattice, +/obj/structure/transit_tube/curved/flipped{ + dir = 8 }, /turf/space, /area/space) @@ -106705,14 +105321,11 @@ /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/explab) "sIo" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/window/reinforced{ dir = 8 }, @@ -106798,27 +105411,14 @@ }, /area/toxins/xenobiology) "sIX" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "cloninglab" - }, /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; id_tag = "Genetics"; name = "Genetics Privacy Shutters" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "cloninglab" + }, /turf/simulated/floor/plating, /area/medical/genetics) "sIZ" = ( @@ -107045,7 +105645,6 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -107091,9 +105690,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "sNt" = ( @@ -107102,9 +105699,7 @@ pixel_x = 32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "sND" = ( @@ -107236,18 +105831,11 @@ }, /area/chapel/main) "sPe" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE"; - tag = "icon-D-NE" - }, -/obj/structure/transit_tube{ - icon_state = "D-SE"; - tag = "icon-D-SE" - }, /obj/structure/lattice/catwalk, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/transit_tube/crossing/horizontal, /turf/space, /area/space) "sPr" = ( @@ -107305,10 +105893,27 @@ }, /area/bridge) "sPY" = ( -/obj/machinery/hologram/holopad, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge"; + req_access = list(19) + }, +/obj/machinery/door/poddoor/preopen{ + id_tag = "BridgeLockdown"; + name = "Bridge Lockdown" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel{ - icon_state = "dark" + dir = 8; + icon_state = "vault" }, /area/bridge) "sQd" = ( @@ -107319,8 +105924,7 @@ "sQt" = ( /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitegreen"; - tag = "icon-whitegreen (WEST)" + icon_state = "whitegreen" }, /area/medical/medbay) "sQx" = ( @@ -107434,7 +106038,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -107476,9 +106079,7 @@ }, /area/medical/research) "sRH" = ( -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -107507,7 +106108,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -107757,6 +106357,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -107786,9 +106387,6 @@ }, /turf/simulated/floor/plating, /area/engine/controlroom) -"sVN" = ( -/turf/simulated/wall, -/area/teleporter/abandoned) "sVU" = ( /turf/simulated/wall, /area/security/range) @@ -107798,7 +106396,6 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 5; icon_state = "whitegreencorner" }, /area/medical/virology) @@ -107853,7 +106450,6 @@ /obj/structure/chair/stool, /obj/effect/landmark/start/engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -107878,7 +106474,6 @@ "sXr" = ( /obj/effect/landmark/start/engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -108047,8 +106642,7 @@ "sZT" = ( /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whiteblue" }, /area/medical/sleeper) "sZV" = ( @@ -108102,7 +106696,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -108303,8 +106896,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "tde" = ( @@ -108320,13 +106912,12 @@ }, /area/library/game_zone) "tdf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/office/light{ + dir = 8 }, -/area/medical/research/restroom) +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "tdh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -108478,7 +107069,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -108580,12 +107170,11 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) "tfy" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/sustenance, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whitepurple"; @@ -108668,7 +107257,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -108700,25 +107288,6 @@ icon_state = "purplefull" }, /area/toxins/sm_test_chamber) -"tgP" = ( -/obj/item/radio/intercom{ - dir = 1; - pixel_y = 28 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurple" - }, -/area/medical/research/restroom) "tgT" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -108831,9 +107400,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -108958,12 +107525,13 @@ }, /area/hallway/primary/fore) "tjq" = ( -/obj/structure/computerframe, -/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/snack, +/obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plasteel{ - icon_state = "white" + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "tjr" = ( /obj/machinery/constructable_frame/machine_frame, /obj/machinery/light/small, @@ -109010,12 +107578,10 @@ "tkf" = ( /obj/item/hand_labeler, /obj/item/reagent_containers/spray/cleaner, -/obj/machinery/light_switch{ - dir = 8; - name = "east bump"; - pixel_x = 25 - }, /obj/structure/table/glass, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whitepurple" @@ -109079,7 +107645,6 @@ }, /obj/effect/landmark/start/civilian, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/checkpoint/south) @@ -109306,7 +107871,6 @@ /obj/item/paper/deltainfo, /obj/item/paper/deltainfo, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/engineering) @@ -109359,7 +107923,6 @@ /area/medical/ward) "toi" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -109407,13 +107970,8 @@ /turf/simulated/floor/wood/fancy/light, /area/crew_quarters/heads/hop) "tou" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" - }, +/obj/structure/transit_tube/diagonal/topleft, +/obj/structure/lattice, /turf/space, /area/space) "toB" = ( @@ -109476,9 +108034,7 @@ /area/maintenance/detectives_office) "tpo" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/decorative_structures/flammable/grandfather_clock, /turf/simulated/floor/wood{ icon_state = "fancy-wood-cherry" @@ -109486,8 +108042,7 @@ /area/crew_quarters/trading) "tpt" = ( /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/customs) "tpv" = ( @@ -109621,7 +108176,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/east) @@ -109633,9 +108187,7 @@ pixel_x = -5; pixel_y = 12 }, -/obj/structure/window/reinforced/polarized{ - id = "cloninglab" - }, +/obj/structure/window/reinforced, /turf/simulated/floor/carpet/royalblack, /area/ntrep) "trA" = ( @@ -109646,12 +108198,6 @@ icon_state = "neutralcorner" }, /area/crew_quarters/locker) -"trI" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" - }, -/area/medical/research/restroom) "tsq" = ( /obj/machinery/alarm{ dir = 4; @@ -109676,8 +108222,7 @@ /area/toxins/xenobiology) "tsB" = ( /turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/sleeper) "tsG" = ( @@ -109757,7 +108302,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -109838,15 +108382,17 @@ /turf/simulated/floor/plasteel, /area/medical/research/nhallway) "tuQ" = ( -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" +/obj/structure/window/reinforced, +/obj/structure/transit_tube/station{ + dir = 1 }, -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/transit_tube_pod{ + dir = 8 }, -/turf/space, -/area/space) +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/construction/hallway) "tuS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_switch{ @@ -109868,7 +108414,6 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -110040,12 +108585,12 @@ /area/maintenance/consarea_virology) "twQ" = ( /obj/docking_port/stationary{ - name = "Station Church dock"; dir = 2; - id = "graveyard_church"; dwidth = 2; - width = 10; - height = 7 + height = 7; + id = "graveyard_church"; + name = "Station Church dock"; + width = 10 }, /turf/space{ icon_state = "black" @@ -110125,8 +108670,7 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/permahallway) "txD" = ( @@ -110151,7 +108695,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -110296,13 +108839,11 @@ /obj/item/storage/fancy/donut_box, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) "tzM" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -110357,8 +108898,7 @@ /obj/structure/delta_statue/e, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "vault"; - tag = "icon-vault (WEST)" + icon_state = "vault" }, /area/bridge/vip) "tAq" = ( @@ -110420,7 +108960,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -110469,8 +109008,7 @@ "tCj" = ( /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/mixing) "tCp" = ( @@ -110530,7 +109068,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -110649,7 +109186,6 @@ dir = 5 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -110857,7 +109393,6 @@ name = "Escape Airlock" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/secondary/exit/maint) @@ -110892,7 +109427,6 @@ "tGs" = ( /obj/machinery/photocopier, /turf/simulated/floor/plasteel{ - dir = 5; icon_state = "whitegreencorner" }, /area/medical/virology) @@ -110949,8 +109483,8 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -111061,8 +109595,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner (WEST)" + icon_state = "whitebluecorner" }, /area/medical/paramedic) "tIh" = ( @@ -111123,9 +109656,12 @@ }, /area/security/securehallway) "tID" = ( -/obj/structure/transit_tube{ - icon_state = "D-NE"; - tag = "icon-D-NE" +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/transit_tube/curved/flipped{ + dir = 4 }, /turf/space, /area/space) @@ -111160,8 +109696,7 @@ /obj/item/multitool, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "vault"; - tag = "icon-vault (WEST)" + icon_state = "vault" }, /area/bridge) "tIQ" = ( @@ -111296,13 +109831,10 @@ }, /area/security/processing) "tKj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/warning_stripes/north, -/obj/structure/cable{ - icon_state = "0-4" +/turf/simulated/floor/plasteel{ + icon_state = "white" }, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/area/medical/research/restroom) "tKz" = ( /obj/item/screwdriver, /turf/simulated/floor/plating, @@ -111405,7 +109937,6 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -111460,7 +109991,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/chief) @@ -111472,7 +110002,6 @@ /obj/structure/table/reinforced, /obj/item/camera, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/medical/virology/lab) @@ -111496,20 +110025,12 @@ id = "vir_work_zone1" }, /turf/simulated/floor/plasteel{ - dir = 5; icon_state = "whitegreencorner" }, /area/medical/virology/lab) "tLT" = ( -/obj/effect/decal/warning_stripes/southeast, -/obj/structure/table/glass, -/obj/item/scalpel{ - pixel_y = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplefull" - }, -/area/medical/research/restroom) +/turf/simulated/wall/rust, +/area/teleporter/abandoned) "tMa" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/portable_atmospherics/canister, @@ -111658,7 +110179,11 @@ }, /area/security/customs) "tNb" = ( -/obj/structure/cable, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/maintenance/engineering) "tNf" = ( @@ -111698,7 +110223,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -111760,7 +110284,6 @@ dir = 9 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -111834,7 +110357,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/mimeoffice) @@ -111872,8 +110394,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "tON" = ( @@ -111932,9 +110453,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "tPv" = ( @@ -111976,7 +110495,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/library) @@ -111993,9 +110511,7 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/security/detectives_office) "tQs" = ( @@ -112098,7 +110614,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering/monitor) @@ -112146,9 +110661,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/item/radio/intercom{ dir = 4; pixel_x = 28; @@ -112157,6 +110669,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -112266,7 +110781,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -112362,7 +110876,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -112373,9 +110886,6 @@ }, /area/maintenance/detectives_office) "tVC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 0; icon_state = "green" @@ -112387,7 +110897,6 @@ name = "Library" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/library) @@ -112423,7 +110932,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -112444,7 +110952,6 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -112530,8 +111037,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/paramedic) "tXF" = ( @@ -112746,7 +111252,6 @@ dir = 10 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/tech) @@ -112786,7 +111291,8 @@ /obj/effect/turf_decal/box, /obj/structure/closet/crate, /obj/machinery/alarm{ - pixel_y = 24 + dir = 4; + pixel_x = -23 }, /turf/simulated/floor/plasteel{ dir = 9; @@ -112920,7 +111426,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -112950,8 +111455,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkredcorners" + icon_state = "dark" }, /area/security/interrogation) "ucJ" = ( @@ -112975,7 +111479,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/secondary/exit/maint) @@ -113001,7 +111504,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -113070,8 +111572,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/reception) "udT" = ( @@ -113113,8 +111614,7 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/paramedic) "ues" = ( @@ -113201,7 +111701,7 @@ /area/engine/engineering) "ufn" = ( /obj/structure/window/reinforced, -/obj/item/twohanded/required/kirbyplants, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, @@ -113215,7 +111715,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/nw) @@ -113282,7 +111781,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -113357,7 +111855,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/ne) @@ -113378,7 +111875,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/evidence) @@ -113545,8 +112041,7 @@ icon_state = "2-4" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/brig) "ujh" = ( @@ -113577,7 +112072,6 @@ /obj/effect/landmark/event/lightsout, /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -113629,7 +112123,6 @@ /area/maintenance/kitchen) "ukb" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/west) @@ -113806,9 +112299,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/serviceyard) "umx" = ( @@ -113944,8 +112435,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/main) "unQ" = ( @@ -114005,10 +112495,8 @@ }, /area/security/podbay) "uoI" = ( -/obj/structure/transit_tube{ - icon_state = "D-SE"; - tag = "icon-D-SE" - }, +/obj/structure/lattice, +/obj/structure/transit_tube/diagonal/topleft, /turf/space, /area/space) "uoK" = ( @@ -114043,15 +112531,6 @@ icon_state = "darkred" }, /area/security/warden) -"uoY" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" - }, -/area/medical/research/restroom) "uph" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -114390,10 +112869,19 @@ }, /area/maintenance/bar) "uuo" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/warning_stripes/southwest, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research/restroom) "uuu" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -114425,15 +112913,10 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) "uuD" = ( -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-y" - }, /obj/effect/landmark/start/geneticist, /obj/structure/chair/office/light{ dir = 8 @@ -114488,13 +112971,18 @@ /obj/machinery/door_control{ id = "Genetics"; name = "Genetic Privacy Shutters Control"; - pixel_y = 26 + pixel_y = 26; + pixel_x = -4 }, /obj/item/storage/box/beakers{ pixel_x = 4; pixel_y = 4 }, /obj/item/storage/box/syringes, +/obj/machinery/light_switch{ + pixel_x = 7; + pixel_y = 27 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -114527,8 +113015,7 @@ }, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/range) "uvs" = ( @@ -114724,22 +113211,12 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "execution" - }, /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/grille, +/obj/effect/spawner/window/reinforced/polarized{ + id = "execution" + }, /turf/simulated/floor/plating, /area/security/execution) "uyr" = ( @@ -114848,7 +113325,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -115003,8 +113479,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/securehallway) "uBu" = ( @@ -115094,7 +113569,6 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -115231,8 +113705,7 @@ "uEr" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/customs) "uEP" = ( @@ -115440,7 +113913,6 @@ "uHf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -115551,7 +114023,6 @@ network = list("SS13","Security") }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/customs) @@ -115609,7 +114080,6 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -115642,8 +114112,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "uJd" = ( @@ -115689,12 +114158,6 @@ /turf/simulated/floor/plating/airless, /area/engine/engineering) "uJo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -115704,6 +114167,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -116250,28 +114716,8 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint4) -"uPO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whiteblue" - }, -/area/medical/medbay) "uPT" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/light_switch{ pixel_x = -26; pixel_y = 4 @@ -116396,7 +114842,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -116412,7 +114857,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -116535,6 +114979,7 @@ dir = 4; tag = "icon-bulb1 (EAST)" }, +/obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -116556,7 +115001,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/visiting_room) @@ -116739,6 +115183,16 @@ /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/gateway) +"uVD" = ( +/obj/structure/closet/secure_closet/scientist, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple" + }, +/area/medical/research/restroom) "uVI" = ( /obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ @@ -116835,8 +115289,7 @@ }, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "uXf" = ( @@ -116864,10 +115317,18 @@ /turf/simulated/floor/plasteel, /area/bridge/vip) "uXu" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "darkblue" + icon_state = "vault" }, /area/bridge) "uXz" = ( @@ -116896,7 +115357,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -117026,7 +115486,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port) @@ -117113,12 +115572,8 @@ }, /area/security/permabrig) "vam" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Telescience" - }, -/obj/structure/barricade/wooden, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/turf/simulated/wall/r_wall, +/area/medical/research/restroom) "vap" = ( /obj/item/clothing/under/soviet, /turf/simulated/floor/light, @@ -117143,8 +115598,7 @@ }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "vaS" = ( @@ -117182,7 +115636,6 @@ icon_state = "1-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port) @@ -117364,8 +115817,7 @@ }, /obj/effect/landmark/start/paramedic, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/paramedic) "veO" = ( @@ -117424,7 +115876,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port) @@ -117577,6 +116028,7 @@ /obj/machinery/atm{ pixel_x = -32 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/bridge/vip) "vgP" = ( @@ -117637,7 +116089,6 @@ }, /obj/machinery/door/airlock/public/glass, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port/east) @@ -117727,8 +116178,7 @@ /area/crew_quarters/hor) "vic" = ( /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/main) "vih" = ( @@ -117767,7 +116217,6 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -117918,10 +116367,14 @@ /turf/simulated/floor/plating, /area/security/prisonershuttle) "vkS" = ( +/obj/structure/chair/comfy/purp{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel{ - icon_state = "white" + icon_state = "whitepurplefull" }, -/area/teleporter/abandoned) +/area/medical/research/restroom) "vkV" = ( /obj/item/stack/sheet/mineral/plasma, /obj/structure/table, @@ -117934,9 +116387,6 @@ /turf/simulated/floor/plating, /area/maintenance/kitchen) "vlc" = ( -/obj/machinery/newscaster{ - pixel_y = -28 - }, /obj/structure/table/glass, /obj/item/storage/box/beakers{ pixel_x = 4; @@ -118090,8 +116540,7 @@ /obj/item/slime_scanner, /turf/simulated/floor/plasteel{ dir = 6; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHEAST)" + icon_state = "whitepurple" }, /area/toxins/xenobiology) "vmP" = ( @@ -118132,13 +116581,6 @@ /obj/effect/landmark/start/research_director, /turf/simulated/floor/carpet/purple, /area/crew_quarters/hor) -"vns" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" - }, -/turf/space, -/area/space) "vnu" = ( /obj/structure/rack, /obj/item/extinguisher, @@ -118322,8 +116764,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/explab) "vpA" = ( @@ -118371,8 +116812,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/sleeper) "vpW" = ( @@ -118410,7 +116850,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -118540,7 +116979,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/warning_stripes/northeastcorner, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -118574,7 +117012,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -118695,8 +117132,7 @@ /area/engine/engineering) "vtu" = ( /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/sleeper) "vtK" = ( @@ -118781,9 +117217,6 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plating, /area/security/holding_cell) "vur" = ( @@ -118868,7 +117301,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -118967,10 +117399,6 @@ /turf/simulated/floor/plating, /area/maintenance/ai) "vwH" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -118980,6 +117408,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -119022,7 +117453,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) @@ -119134,10 +117564,23 @@ location = "V4" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) +"vyc" = ( +/obj/machinery/atmospherics/unary/vent_scrubber{ + dir = 8; + name = "standard air scrubber"; + on = 1; + scrub_N2O = 1; + scrub_Toxins = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple"; + tag = "icon-whitepurple (EAST)" + }, +/area/medical/research/shallway) "vyd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/walllocker/emerglocker{ @@ -119177,7 +117620,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/west) @@ -119206,8 +117648,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "vyD" = ( @@ -119245,6 +117686,15 @@ /obj/structure/cable, /turf/simulated/floor/plating, /area/security/hos) +"vzq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/assembly/robotics) "vzv" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -119349,13 +117799,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -119363,6 +117807,12 @@ icon_state = "2-8" }, /obj/structure/grille, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/engineering) "vAj" = ( @@ -119577,7 +118027,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -119600,7 +118049,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/break_room) @@ -119755,9 +118203,7 @@ pixel_x = -32 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "vEb" = ( @@ -119869,7 +118315,6 @@ "vFw" = ( /obj/structure/closet/secure_closet/personal, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -119931,7 +118376,6 @@ "vGw" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/storage/primary) @@ -120022,7 +118466,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -120046,7 +118489,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -120120,6 +118562,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "green" @@ -120171,18 +118616,21 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint4) "vJX" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plating, /area/maintenance/asmaint2) "vKa" = ( @@ -120366,14 +118814,6 @@ /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel/airless, /area/toxins/test_area) -"vNO" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "D-NW"; - tag = "icon-D-NW" - }, -/turf/space, -/area/space) "vNP" = ( /obj/structure/computerframe, /turf/simulated/floor/plating, @@ -120481,7 +118921,6 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint4) "vPj" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -120636,7 +119075,6 @@ /obj/structure/chair/stool, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -120667,9 +119105,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/bar/atrium) "vQX" = ( @@ -120715,14 +119151,6 @@ }, /turf/space, /area/space) -"vSm" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" - }, -/area/maintenance/starboard) "vSn" = ( /obj/structure/table/glass, /obj/item/defibrillator/loaded, @@ -120770,7 +119198,6 @@ /area/crew_quarters/heads/hop) "vSD" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -120814,9 +119241,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - invisibility = 101 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/engineering) "vSV" = ( @@ -120844,9 +119269,14 @@ }, /area/maintenance/electrical) "vTj" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/teleporter/abandoned) +/obj/structure/table/glass, +/obj/item/reagent_containers/food/snacks/sliceable/braincake, +/obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplefull" + }, +/area/medical/research/restroom) "vTk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -120972,7 +119402,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -121075,6 +119504,21 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) +"vUO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" + }, +/area/medical/research/restroom) "vUU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -121154,7 +119598,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -121315,7 +119758,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -121371,7 +119813,6 @@ icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/securearmory) @@ -121393,7 +119834,6 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 10; icon_state = "darkredfull" }, /area/security/securearmory) @@ -121465,22 +119905,12 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "execution" - }, /obj/structure/cable{ icon_state = "2-8" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "execution" + }, /turf/simulated/floor/plating, /area/security/execution) "vZn" = ( @@ -121516,6 +119946,15 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/cabin3) +"vZW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/teleporter/abandoned) "wap" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -121835,8 +120274,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "whitebluefull"; - tag = "icon-whitebluefull" + icon_state = "whitebluefull" }, /area/medical/reception) "wdx" = ( @@ -121868,7 +120306,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -121884,7 +120321,6 @@ name = "Труба обработки" }, /turf/simulated/floor/plasteel{ - dir = 1; icon_state = "dark" }, /area/atmos) @@ -121955,8 +120391,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/mixing) "wff" = ( @@ -122081,7 +120516,6 @@ amount = 10 }, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/break_room) @@ -122125,7 +120559,6 @@ /area/crew_quarters/hor) "wiM" = ( /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/break_room) @@ -122147,12 +120580,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/unary/vent_scrubber{ - name = "standard air scrubber"; - on = 1; - scrub_N2O = 1; - scrub_Toxins = 1 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -122180,7 +120608,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/break_room) @@ -122230,8 +120657,7 @@ }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whiteblue"; - tag = "icon-whiteblue (WEST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "wjF" = ( @@ -122282,9 +120708,7 @@ /obj/item/storage/toolbox/electrical, /obj/item/multitool, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "wkc" = ( @@ -122406,13 +120830,15 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/locker/locker_toilet) "wlE" = ( -/obj/effect/decal/warning_stripes/eastnorthwest, -/obj/structure/chair/comfy/purp, -/obj/effect/landmark/start/scientist, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/barricade/wooden, /turf/simulated/floor/plasteel{ - icon_state = "whitepurplefull" + dir = 8; + icon_state = "whitepurplecorner" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "wlQ" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/wood, @@ -122611,7 +121037,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard/east) @@ -122693,6 +121118,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "woE" = ( @@ -122734,10 +121162,10 @@ /turf/simulated/floor/wood, /area/security/hos) "wpn" = ( -/obj/structure/transit_tube, /obj/structure/window/reinforced{ dir = 8 }, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -122791,7 +121219,7 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint4) "wpN" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -122921,15 +121349,15 @@ /turf/simulated/floor/plasteel, /area/maintenance/electrical) "wrb" = ( -/obj/structure/transit_tube/station/reverse{ - dir = 1 - }, /obj/structure/transit_tube_pod{ dir = 8 }, /obj/machinery/ai_status_display{ pixel_y = -32 }, +/obj/structure/transit_tube/station{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -122991,6 +121419,7 @@ name = "Medbay Maintenance"; req_access = list(5) }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/asmaint) "wsa" = ( @@ -123021,7 +121450,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -123287,7 +121715,6 @@ }, /obj/machinery/light, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/permahallway) @@ -123334,8 +121761,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/medical/research/nhallway) "wvS" = ( @@ -123702,8 +122128,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/explab) "wAE" = ( @@ -123740,8 +122165,7 @@ }, /turf/simulated/floor/plasteel{ dir = 10; - icon_state = "whitepurple"; - tag = "icon-whitepurple (SOUTHWEST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "wAM" = ( @@ -123917,7 +122341,6 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -123961,7 +122384,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/vip) @@ -123981,7 +122403,7 @@ /area/toxins/lab) "wEh" = ( /turf/simulated/wall/r_wall, -/area/medical/research/restroom) +/area/teleporter/abandoned) "wEm" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -124111,7 +122533,7 @@ pixel_x = -26 }, /turf/simulated/floor/plasteel{ - dir = 1; + dir = 8; icon_state = "neutralcorner" }, /area/hallway/primary/central/west) @@ -124122,9 +122544,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/maintenance/fpmaint) @@ -124196,6 +122616,9 @@ icon_state = "4-8" }, /mob/living/simple_animal/mouse/white, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "wGp" = ( @@ -124410,14 +122833,19 @@ "wJy" = ( /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whiteblue"; - tag = "icon-whiteblue (EAST)" + icon_state = "whiteblue" }, /area/medical/sleeper) "wJB" = ( /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/unary/vent_scrubber{ + name = "standard air scrubber"; + on = 1; + scrub_N2O = 1; + scrub_Toxins = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -124471,7 +122899,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -124732,8 +123159,7 @@ /obj/effect/landmark/start/paramedic, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner (WEST)" + icon_state = "whitebluecorner" }, /area/medical/paramedic) "wNc" = ( @@ -124828,28 +123254,17 @@ pixel_x = 7; pixel_y = 14 }, -/turf/simulated/floor/plasteel{ - dir = 1 - }, -/area/security/processing) -"wOf" = ( /obj/structure/disposalpipe/segment{ - dir = 8; + dir = 1; icon_state = "pipe-c" }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 1 }, -/area/medical/research/restroom) +/area/security/processing) +"wOf" = ( +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "wOn" = ( /obj/effect/decal/cleanable/dirt, /obj/item/trash/popcorn, @@ -124911,9 +123326,7 @@ /obj/item/storage/toolbox/electrical, /obj/item/multitool, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "wPv" = ( @@ -124948,7 +123361,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -124968,9 +123380,7 @@ /turf/simulated/floor/plasteel, /area/storage/tech) "wQq" = ( -/obj/effect/decal/cleanable/dirt{ - layer = 2.1 - }, +/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event/revenantspawn, /turf/simulated/floor/plating, /area/crew_quarters/trading) @@ -124988,8 +123398,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/brig) "wQu" = ( @@ -125022,7 +123431,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -125135,9 +123543,7 @@ /obj/item/storage/toolbox/mechanical, /obj/item/flashlight, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/storage/tech) "wRU" = ( @@ -125218,14 +123624,16 @@ icon_state = "4-8" }, /obj/structure/grille/broken, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "wSW" = ( /obj/machinery/computer/med_data, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whiteblue" }, /area/medical/paramedic) "wTf" = ( @@ -125330,7 +123738,6 @@ }, /obj/effect/landmark/start/engineer, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) @@ -125410,13 +123817,14 @@ }, /area/hallway/primary/central/north) "wVA" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "E-NW"; - tag = "icon-E-NW" +/obj/structure/window/reinforced, +/obj/structure/transit_tube/cap{ + dir = 4 }, -/turf/space, -/area/space) +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/construction/hallway) "wVP" = ( /obj/structure/falsewall, /turf/simulated/floor/plating, @@ -125491,8 +123899,7 @@ /obj/structure/delta_statue/c, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "vault"; - tag = "icon-vault (WEST)" + icon_state = "vault" }, /area/bridge/vip) "wWW" = ( @@ -125618,10 +124025,6 @@ }, /area/turret_protected/ai_upload) "wXY" = ( -/obj/structure/transit_tube{ - icon_state = "D-SW"; - tag = "icon-D-SW" - }, /obj/structure/window/reinforced{ dir = 4 }, @@ -125667,7 +124070,6 @@ pixel_y = -24 }, /turf/simulated/floor/plasteel{ - dir = 0; icon_state = "red" }, /area/security/customs) @@ -125880,7 +124282,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -126013,7 +124414,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 4; icon_state = "darkbluefull" }, /area/turret_protected/aisat_interior) @@ -126077,22 +124477,6 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "vir2" - }, -/obj/structure/window/reinforced/polarized{ - id = "vir2" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "vir2" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "vir2" - }, /obj/machinery/door/poddoor{ density = 0; icon_state = "open"; @@ -126106,6 +124490,9 @@ layer = 3.2; name = "Virology Shutters" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "vir2" + }, /turf/simulated/floor/plating, /area/medical/virology) "xek" = ( @@ -126168,9 +124555,12 @@ }, /area/assembly/robotics) "xfd" = ( -/obj/machinery/light{ - dir = 8 +/obj/machinery/camera{ + c_tag = "Research South Hallway"; + dir = 10; + network = list("Research","SS13") }, +/obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whitepurple" @@ -126381,9 +124771,6 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint) "xhi" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, @@ -126400,25 +124787,6 @@ icon_state = "green" }, /area/hallway/secondary/exit) -"xhp" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "cloninglab" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "cloninglab" - }, -/turf/simulated/floor/plating, -/area/medical/cloning) "xhy" = ( /obj/machinery/turretid/lethal{ check_synth = 1; @@ -126466,7 +124834,6 @@ name = "Труба обработки" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/atmos) @@ -126497,8 +124864,7 @@ "xik" = ( /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner (WEST)" + icon_state = "whitebluecorner" }, /area/medical/sleeper) "xiu" = ( @@ -126522,26 +124888,16 @@ }, /area/engine/aienter) "xiA" = ( -/obj/structure/grille, /obj/structure/cable{ icon_state = "0-4" }, /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "courtroom" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "courtroom" }, -/turf/simulated/floor/wood/fancy/light, +/turf/simulated/floor/plating, /area/crew_quarters/courtroom) "xiB" = ( /obj/structure/table, @@ -126776,8 +125132,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/misc_lab) "xnf" = ( @@ -127035,9 +125390,6 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, @@ -127045,6 +125397,9 @@ icon_state = "1-4" }, /obj/effect/landmark/start/coroner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -127248,8 +125603,7 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitepurple"; - tag = "icon-whitepurple (EAST)" + icon_state = "whitepurple" }, /area/toxins/test_chamber) "xsd" = ( @@ -127376,8 +125730,7 @@ "xte" = ( /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitebluecorner"; - tag = "icon-whitebluecorner" + icon_state = "whitebluecorner" }, /area/medical/sleeper) "xts" = ( @@ -128044,7 +126397,6 @@ icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -128059,7 +126411,6 @@ /area/space) "xyi" = ( /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/fitness) @@ -128093,13 +126444,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/fpmaint) -"xyQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/wall/r_wall, -/area/security/interrogation) "xyS" = ( /obj/machinery/computer/teleporter, /obj/effect/decal/warning_stripes/southeast, @@ -128166,8 +126510,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/securehallway) "xzk" = ( @@ -128205,19 +126548,10 @@ /turf/simulated/floor/plasteel, /area/toxins/storage) "xAb" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "execution" - }, -/obj/structure/window/reinforced/polarized{ +/obj/structure/cable, +/obj/effect/spawner/window/reinforced/polarized{ id = "execution" }, -/obj/structure/cable, /turf/simulated/floor/plating, /area/security/execution) "xAj" = ( @@ -128253,9 +126587,6 @@ icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small{ - dir = 1 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -128347,18 +126678,9 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/engine/hardsuitstorage) -"xBT" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "E-SW"; - tag = "icon-E-SW" - }, -/turf/space, -/area/space) "xCj" = ( /obj/structure/window/reinforced{ dir = 1 @@ -128419,9 +126741,8 @@ /area/maintenance/asmaint4) "xCP" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "W-SE"; - tag = "icon-W-SE" +/obj/structure/transit_tube/curved/flipped{ + dir = 4 }, /turf/space, /area/space) @@ -128438,7 +126759,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -128481,7 +126801,6 @@ /obj/structure/cable{ 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{ @@ -128592,16 +126911,16 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint4) "xEA" = ( -/obj/item/twohanded/required/kirbyplants, -/obj/structure/extinguisher_cabinet{ - pixel_x = -28 - }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" - }, -/area/medical/research/restroom) +/obj/structure/safe, +/obj/item/stack/ore/bluespace_crystal, +/obj/item/stack/ore/bluespace_crystal, +/obj/item/stack/ore/bluespace_crystal, +/obj/item/stack/ore/bluespace_crystal, +/obj/item/stack/ore/bluespace_crystal, +/obj/item/grown/bananapeel/bluespace, +/obj/item/slime_extract/bluespace, +/turf/simulated/floor/plating, +/area/teleporter/abandoned) "xEF" = ( /turf/simulated/floor/plasteel{ icon_state = "darkblue" @@ -128678,10 +126997,7 @@ /area/medical/morgue) "xFr" = ( /obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "D-SW"; - tag = "icon-D-SW" - }, +/obj/structure/transit_tube/diagonal/crossing, /turf/space, /area/space) "xFt" = ( @@ -128707,8 +127023,7 @@ /obj/machinery/atmospherics/unary/cryo_cell, /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "whiteblue"; - tag = "icon-whitehall (WEST)" + icon_state = "whiteblue" }, /area/medical/cryo) "xFL" = ( @@ -128775,7 +127090,6 @@ /obj/item/storage/toolbox/mechanical, /obj/item/flashlight, /turf/simulated/floor/plasteel{ - dir = 7; icon_state = "yellow" }, /area/engine/engineering) @@ -128912,7 +127226,6 @@ pixel_x = 5 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/chief) @@ -128992,7 +127305,6 @@ /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/medical/chemistry) @@ -129186,7 +127498,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 6; icon_state = "bluefull" }, /area/bridge/checkpoint/south) @@ -129196,8 +127507,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whiteblue"; - tag = "icon-whiteblue (NORTH)" + icon_state = "whiteblue" }, /area/medical/sleeper) "xKE" = ( @@ -129241,7 +127551,6 @@ /area/crew_quarters/chief) "xKK" = ( /obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, /obj/machinery/firealarm{ dir = 4; pixel_x = 6; @@ -129250,6 +127559,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/disposalpipe/trunk, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whitepurple"; @@ -129264,14 +127574,6 @@ }, /area/medical/cmostore) "xKP" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 26 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple"; @@ -129279,10 +127581,10 @@ }, /area/medical/research/nhallway) "xKT" = ( -/obj/structure/lattice, -/obj/structure/transit_tube{ - icon_state = "NW-SE" +/obj/structure/transit_tube/curved{ + dir = 4 }, +/obj/structure/lattice, /turf/space, /area/space) "xLb" = ( @@ -129330,7 +127632,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/crew_quarters/locker) @@ -129372,8 +127673,7 @@ }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTHWEST)" + icon_state = "whitepurple" }, /area/toxins/launch) "xMc" = ( @@ -129398,8 +127698,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/launch) "xMh" = ( @@ -129422,7 +127721,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/south) @@ -129469,8 +127767,7 @@ }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitepurple"; - tag = "icon-whitepurple (NORTH)" + icon_state = "whitepurple" }, /area/toxins/launch) "xMX" = ( @@ -129696,7 +127993,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/bridge/checkpoint/south) @@ -129853,9 +128149,7 @@ name = "Head of Personal Privacy Shutters" }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark"; - tag = "icon-vault (NORTHEAST)" + icon_state = "dark" }, /area/crew_quarters/heads/hop) "xQj" = ( @@ -129959,9 +128253,6 @@ scrub_N2O = 1; scrub_Toxins = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 0; icon_state = "green" @@ -129984,7 +128275,6 @@ /obj/structure/table/glass, /obj/item/storage/box/gloves, /turf/simulated/floor/plasteel{ - dir = 5; icon_state = "whitegreencorner" }, /area/medical/virology) @@ -130004,7 +128294,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -130450,17 +128739,16 @@ /turf/simulated/floor/plating, /area/security/warden) "xXf" = ( -/obj/effect/decal/warning_stripes/east, -/obj/structure/table/glass, -/obj/effect/decal/warning_stripes/northwestcorner, -/obj/item/reagent_containers/food/snacks/sliceable/braincake, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "0-4" }, +/obj/structure/barricade/wooden, +/obj/machinery/light/small, /turf/simulated/floor/plasteel{ - icon_state = "whitepurplefull" + icon_state = "purplefull" }, -/area/medical/research/restroom) +/area/teleporter/abandoned) "xXi" = ( /obj/effect/decal/warning_stripes/arrow{ dir = 4 @@ -130806,7 +129094,6 @@ /obj/machinery/vending/snack, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -131029,7 +129316,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -131105,7 +129391,6 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" }, /area/crew_quarters/theatre) @@ -131192,7 +129477,6 @@ sortType = 18 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/se) @@ -131359,8 +129643,7 @@ /obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/launch) "yeN" = ( @@ -131428,8 +129711,7 @@ scrub_Toxins = 1 }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" + icon_state = "whitepurple" }, /area/toxins/launch) "yfK" = ( @@ -131522,7 +129804,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port) @@ -131530,18 +129811,8 @@ /turf/simulated/wall, /area/maintenance/detectives_office) "ygS" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple"; - tag = "icon-whitepurple (WEST)" - }, -/area/medical/research/restroom) +/turf/simulated/wall, +/area/teleporter/abandoned) "yhc" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -131677,7 +129948,6 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/gateway) @@ -131702,7 +129972,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/central/sw) @@ -131720,6 +129989,7 @@ /obj/effect/turf_decal/siding/brown{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood/fancy/light, /area/bridge/meeting_room) "yjn" = ( @@ -131899,17 +130169,13 @@ req_access = list(63) }, /turf/simulated/floor/plasteel{ - icon_state = "redfull"; - tag = "icon-redfull (NORTHWEST)" + icon_state = "redfull" }, /area/security/visiting_room) "ykR" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/door/airlock/command{ name = "Server Room"; req_access = list(30) @@ -131917,6 +130183,9 @@ /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" }, @@ -146308,9 +144577,9 @@ coE gum gum xAs -mzX +wgX uNi -ybH +wVA bXR aaq dZq @@ -146567,7 +144836,7 @@ wLE xBE puA uOm -ybH +tuQ bXR coE coE @@ -146816,9 +145085,9 @@ aaq bCI aaq coE -aaq +dZq acF -aaq +dZq gum gum gum @@ -147069,20 +145338,20 @@ aaq aaq aaq aaq -aaq -coE -aaq -bCI -aaq +acF +acF +acF +acF +acF +acF +acF acF aaq -coE -aaq -qVm +oKs muS kmU bRO -kWh +bXR aaq coE aaq @@ -147326,20 +145595,20 @@ aaq aaq aaq aaq -aaq -bCI -aaq -bCI -aaq acF -aaq -coE +acF +acF +acF +acF +acF +acF +acF +dZq coE -xBT -kXY +wKp uOJ jXW -wVA +coE coE dZq aaq @@ -147588,15 +145857,15 @@ bCI coE bCI coE -acF +dZq acF acF aaq -vns +dZq coE -tKX +tID coE -vns +dZq aaq dZq dZq @@ -147605,8 +145874,8 @@ coE bCI coE bCI -aaq -aaq +acF +acF aaq aaq aaq @@ -147846,24 +146115,24 @@ coE aaq coE aaq -coE acF -aaq -xCP -tID -tKX -uoI -cjl -aaq -dZq -aaq -coE -aaq -bCI -coE -bCI -coE -bCI +acF +acF +acF +acF +sPe +acF +acF +acF +acF +acF +acF +acF +acF +acF +acF +acF +acF bCI coE bCI @@ -148102,25 +146371,25 @@ coE bCI bCI dZq -bCI -coE -acF aaq -xFr -xKT +acF +acF +acF +acF +acF sPe -iTF -vNO -aaq -coE -aaq -coE -aaq -aaq -coE -aaq -aaq -aaq +acF +acF +acF +acF +acF +acF +acF +acF +acF +acF +acF +acF coE aaq aaq @@ -148360,15 +146629,15 @@ coE coE coE coE -coE +dZq acF +dZq +dZq aaq -coE -sHT bYl -gkk -coE -coE +aaq +dZq +aaq bCI bCI bCI @@ -148621,9 +146890,9 @@ coE acF coE coE -coE -tuQ -coE +xFr +tKX +uoI coE coE aaq @@ -148877,11 +147146,11 @@ bwN coE acF aaq -dZq -aaq -rDm -aaq -aaq +xCP +coE +tKX +coE +xKT bXU qEj qEj @@ -149134,11 +147403,11 @@ bwN coE acF aaq -dZq +iTF aaq -rDm +tKX aaq -coE +iTF bXU bXU bXU @@ -149391,11 +147660,11 @@ bwN coE acF coE -dZq -coE -tuQ +kXY coE +tKX coE +sHT bXU ybU ivy @@ -149649,10 +147918,10 @@ coE acF aaq coE +tou +tKX +itZ aaq -rDm -aaq -bXU bXU cbb coE @@ -149910,7 +148179,7 @@ aaq rDm aaq bXU -klb +bXU cbb rLd aaq @@ -150164,7 +148433,7 @@ acF coE coE coE -rDm +sPe coE bXU klb @@ -150421,7 +148690,7 @@ wcr acF coE coE -tou +sPe coE bXU oqc @@ -150679,7 +148948,7 @@ cTf cTf coE mSG -itZ +coE bXU bZl cbb @@ -159617,7 +157886,7 @@ dCM nEC bnk evc -bsA +aVS cbs mzQ lyE @@ -160238,7 +158507,7 @@ sHq tNx jfk wBr -kna +wMW iRu oOo fvu @@ -160410,20 +158679,20 @@ bBf dRM dEt dLj -bsA -bsA +aVS +aVS cbs aOo bvG cdw cbs cbs -bsA +aVS kEF ceP cbs -bsA -bsA +aVS +aVS cbs aVS ncP @@ -160495,7 +158764,7 @@ mkL lGo mZA oKx -kna +wMW rbA oOo fvu @@ -160667,7 +158936,7 @@ cEh dEt dEt dLj -bsA +aVS baF baF baF @@ -160752,7 +159021,7 @@ gsc jhm feg cTz -kna +wMW iRu oOo ksG @@ -161170,14 +159439,14 @@ aBr hxk csa cAz -bsA +aVS cNV cbs gbI rTm ceP cbs -bsA +aVS dLg cbs cQq @@ -161429,7 +159698,7 @@ cdF cAz cbs woa -bsA +aVS gbI dbs iTZ @@ -161686,8 +159955,8 @@ cAt cAK xQW cjn -bsA -bsA +aVS +aVS cbs iTZ qKv @@ -161945,7 +160214,7 @@ cfD cjv bvG ccW -liE +bSg iTZ doh iTZ @@ -162455,7 +160724,7 @@ pGp bQU aDm cAz -bsA +aVS aBb iTZ crI @@ -162524,7 +160793,7 @@ oTk dHk gmk vSU -dEi +nUy frh qUe ddi @@ -162741,7 +161010,7 @@ cmP dZN cmP nUq -bDf +cwP bdE baF gcK @@ -163001,7 +161270,7 @@ xsK oPr cFI baF -bsA +aVS qsw kJB sdY @@ -163255,7 +161524,7 @@ bKs cMa gfO hes -cwP +bDf kCr baF ceP @@ -163302,11 +161571,11 @@ kjT ekk hlh ybR -sVN +vam cNt lGD -sVN -cVf +ddM +cUT cQV aEh uHA @@ -163474,10 +161743,10 @@ aoo aoo bEi cbs -bsA +aVS cNV -bsA -sbv +aVS +bWL cbs crN cwa @@ -163554,12 +161823,12 @@ nzf gMw yhX vAg -srk -srk +cry +cry tNb -cbC -yhX -sVN +tNb +cry +eJE jzw qwa gjD @@ -163816,14 +162085,14 @@ iuW iZQ sWp cbC -cVf -sVN +vam +cgJ cOY cPd vkS jcR -cVf -uHA +cjD +bDP xKP uJo pzW @@ -163987,7 +162256,7 @@ bsq bDi aoo cKz -bsA +aVS fFl cNV auo @@ -163998,7 +162267,7 @@ cwt nqt urM cIb -cQQ +bEK cQP cSJ dbv @@ -164076,12 +162345,12 @@ yhX vam ozs tKj -ozs +nrG fYC izb fJp -uHA -pgp +lxY +xKP vye gXb vsH @@ -164107,7 +162376,7 @@ pJs aoc pda puB -fGj +wKr pYt dFS fGj @@ -164305,7 +162574,7 @@ dPt fpN mDY wFd -nNF +dPt fpN dPt tUR @@ -164330,16 +162599,16 @@ nNj cXa cbC cbC -sVN -cVf +vam +uVD fvB vTj cSd -jcR -sVN -uHA +kGZ +vUO +qPg ifq -fnI +ajY gXb pUL xdz @@ -164363,9 +162632,9 @@ wEh wEh wEh wEh -wEh -dfe -dfe +tLT +ygS +fGj gLL tzX dJx @@ -164502,7 +162771,7 @@ qVc aoo cbs cbs -bsA +aVS fOa cgR cEJ @@ -164511,7 +162780,7 @@ cFQ baG dpg urM -cQQ +bEK cIj pYR cst @@ -164539,13 +162808,13 @@ xBC yai mwB dMX +ivL hfx -hFg -mLE +sqA pyj qbQ qvg -dCE +mLE skB mLE dil @@ -164587,14 +162856,14 @@ gRa cXa ybR yhX -sVN +vam hgH -mAd +tKj cQS nPX -jlL +tKj cVg -uHA +bHE nfO aOd xJv @@ -164621,8 +162890,8 @@ iVN xEA dNZ rgD -dsx -dfe +tLT +wKr dFS dFM dJx @@ -164769,7 +163038,7 @@ cwI dvK cEJ cIu -cQQ +bEK cQR btP joM @@ -164780,7 +163049,7 @@ udw jSy udw dPl -bHN +dtC ccO eNq cGj @@ -164844,11 +163113,11 @@ ncZ cXa czD cbC -cVf +vam dHD jMs -cVf -sVN +eke +qjq cSc nDf uHA @@ -164878,8 +163147,8 @@ ruT gpS tdf gAF -bbJ -dfe +ygS +wKr sUN tpM dJx @@ -165014,9 +163283,9 @@ bxB bix bsq aOY -bsA -bsA -bsA +aVS +aVS +aVS dLf cei ckh @@ -165025,7 +163294,7 @@ dbu cxA kIA ckz -cQQ +bEK cIR aBz cst @@ -165037,7 +163306,7 @@ bxt dFv bxt nsi -bCN +dtC cDm bEK pPw @@ -165052,7 +163321,7 @@ gCx xBC dvR wVn -ipW +nqM nIm bqr tUd @@ -165101,13 +163370,13 @@ moW cXa cXa uvt -qWU -qWU -qWU -qWU -qWU -qWU -qWU +vam +vam +vam +vam +vam +vam +vam uHA hoS vye @@ -165131,12 +163400,12 @@ dwg xTh dyG wEh -hLJ -gpS +tLT +vZW kMz -trI -ehA -dfe +tLT +ygS +bbm xAu bAE hVD @@ -165272,7 +163541,7 @@ biQ bDT aoo bJk -bsA +aVS eTZ woa cbs @@ -165317,7 +163586,7 @@ bOA bOA bwf cFK -lVo +eMO byU nZz cks @@ -165366,7 +163635,7 @@ hQl wiY nDj uHA -fEg +xKP fnI gXb wbP @@ -165389,9 +163658,9 @@ xSf xSf wEh pnv -uoY +wOf dDQ -fkL +wOf kdl bpR vJX @@ -165532,7 +163801,7 @@ oWL epg dLg cNV -bsA +aVS cXT hDg dEA @@ -165574,7 +163843,7 @@ coE aaq bwf mMQ -srd +uXu mMQ mMQ cks @@ -165635,7 +163904,7 @@ rKQ rKQ rKQ dzH -rKQ +oHb rKQ rKQ duY @@ -165645,14 +163914,14 @@ rKQ dyC xfd wEh -tgP +ygS wlE xXf tLT -gMU -dfe -kVJ +tLT wKr +bLQ +tLI dJx mSE nfd @@ -165831,7 +164100,7 @@ coE aaq bwf bwf -lXs +sPY cJr bwf cks @@ -165888,26 +164157,26 @@ xJf nbx rKZ sid -lBh +rKZ xDv rNO gkY -rNO +iAW jmL rNO xDv rSp dvd -lBh +eYK hYi -rNO +eYK exh wOf oFp dDR dFn ygS -dfe +fGj dIy fGj dJx @@ -166088,7 +164357,7 @@ coE aaq bwf rlm -lVo +eMO byU cKT cks @@ -166149,7 +164418,7 @@ eYK xDD oxm eCO -xDD +vyc mEE xDD xDD @@ -166163,8 +164432,8 @@ aob kQU dCL oXs -dGO -dfe +ygS +wKr rtl rNh dJx @@ -166345,7 +164614,7 @@ coE coE bwf rma -lVo +eMO byU bCr cks @@ -166380,7 +164649,7 @@ gcg czG dRL oFJ -xMi +fIC vzv oqA oKl @@ -166416,12 +164685,12 @@ tXf tXf ykx wEh -dfe -dfe -dfe -dfe -dfe -dfe +tLT +ygS +tLT +ygS +ygS +wKr rtl nte dJx @@ -166637,7 +164906,7 @@ eXx czG dRL hev -jIN +lap noj oqA jqb @@ -166679,7 +164948,7 @@ pYt lmx tLI wKr -kVJ +dFS nte keY iEY @@ -166860,11 +165129,11 @@ aaq bwf bwf lOt -sPY +bFV cdP bDR -uXu -uXu +tHP +tHP vwH amV iqb @@ -166894,7 +165163,7 @@ mck qRN dRL oFJ -xMi +fIC vzv mcd nJZ @@ -167072,7 +165341,7 @@ bEc apO aqK lZy -bsA +aVS jhv aDI aGn @@ -167182,7 +165451,7 @@ drv rzT dsE rru -xeT +vzq wjc fQT ykx @@ -167196,7 +165465,7 @@ uBY uBY uBY pBI -lap +xQY fkq lFG dTK @@ -167408,7 +165677,7 @@ gcg fvE csK cCM -xMi +fIC vzv oqA sRf @@ -167443,7 +165712,7 @@ dvg xFd xlY ykx -fIC +fGj eGb uBY lJs @@ -167665,7 +165934,7 @@ rnJ fXK csK aVO -xMi +fIC vzv saY dkn @@ -167922,7 +166191,7 @@ tlg eDn csK pCP -xMi +fIC vzv saY dkn @@ -168179,7 +166448,7 @@ csK jqk csK rSJ -xMi +fIC vzv oqA oKl @@ -168425,7 +166694,7 @@ gIn kRz nrh ssw -eMO +lMI geG fYm fYm @@ -168440,7 +166709,7 @@ fgD vzv oqA bRo -eFC +dIG qhT ckq bNH @@ -168693,7 +166962,7 @@ qjj rrz cBk cCM -xMi +fIC kKR fRt mDj @@ -168738,7 +167007,7 @@ phR dGe ukf eey -lap +xQY pvm gwP dXB @@ -168989,9 +167258,9 @@ xUN xpj xWm mjx -dGR +aAy mZk -dGR +aAy oeE qpk mUT @@ -169489,8 +167758,8 @@ dca dnx fau szY -gDZ uuu +mwg uuu cpN qLt @@ -169725,8 +167994,8 @@ xMi gZr uzj xYU -jWl -jWl +hiQ +hiQ xYU cNI xYU @@ -169982,7 +168251,7 @@ hzk liV xYU dmH -oOr +hmB ndm eHp fTC @@ -170238,9 +168507,9 @@ cEN xcb liV ixo -oOr +hmB cPy -oQU +rYG dFQ cPy cPy @@ -170754,7 +169023,7 @@ liV ixo jrm cPy -oQU +rYG wTf cPy cPy @@ -171032,8 +169301,8 @@ dfv cTu vSV dpb -drF -drF +mhI +mhI vQJ dhN iAx @@ -172052,7 +170321,7 @@ mkg pFE xik hlF -krY +mJO mWR rMN smu @@ -172823,7 +171092,7 @@ eyu vpP rcy tfK -krY +mJO hUf dgT diy @@ -173339,7 +171608,7 @@ rcy gsN dfy kWH -xhp +mJO dfy dfy duk @@ -173480,7 +171749,7 @@ azl bcL beC beC -brG +avi beC ayI bBQ @@ -173587,7 +171856,7 @@ cUb cPF oJO xte -mJK +ggC vtu hIA vtu @@ -173607,7 +171876,7 @@ lLn sHA dsR sHA -uPO +vUu sHA qfe wDC @@ -173737,7 +172006,7 @@ aBe aQg aEw bkM -aQg +brG aTy aQg aBd @@ -173866,7 +172135,7 @@ pWy smD pAT jAt -dxT +gDZ wrQ iWJ mZc @@ -174509,9 +172778,9 @@ aLH ePe aTS aOu -aTS -aLH -ePe +dCE +qlc +pmZ cbZ aOR awY @@ -175352,7 +173621,7 @@ qJK iLV nqo pOC -dld +gWJ uoK sps fLk @@ -175609,7 +173878,7 @@ xnx vrl vVv pOC -asU +cyK uoK sps fLk @@ -178464,7 +176733,7 @@ cUz xWh daS ecf -vSm +gvQ lUZ gwx hoH @@ -181494,7 +179763,7 @@ bHH uFM xpr ubg -iGn +pif gLz kJj fCJ @@ -182533,7 +180802,7 @@ oyT rzh nRT tLv -nvV +tMU tzh tzh jtg @@ -182790,7 +181059,7 @@ pif inl nRT tLv -nvV +tMU tzh thk ojk @@ -183033,11 +181302,11 @@ iGx uyw dAc bHO -mwg +nNu pVL ubg xpz -wwO +rzA lFu pBd ubg @@ -183047,7 +181316,7 @@ tuY rzh mpW ija -nvV +tMU hgM lhe syf @@ -183282,139 +181551,239 @@ aaq aaq aaq aaq -dZq -coE -coE -qmr -qmr -qmr -qmr -qmr -lAU -qHb -ubg -ubg -wwO -ubg -ubg -ubg -ubg -ubg -rIw -inl -nRT -tLv -nvV -qFD -rCV -mdH -aun -pQU -xwc -jJj -fCz -hoU -hgg -bNL -mpW -tLv -tMU -thO -aPA -mSc -pJU -aPA -sVU -cBE -slv -mkb -kxq -sVU -pFn -xqu -xqu -nve -gDB -vsF -vsF -ojx -ojx -vsF -vsF -vHh -mSR -igC -vsF -vsF -ojx -ojx -vsF -vsF -qEC -hkp -qEC -qEC -qEC -xWh -xWh -rOm -xZu -xZu -xqm -xWh -rEe -smR -rEe -skZ -xZu -uAW -jrD -xZu -xZu -xZu -coE -coE -coE -coE -fvQ -fvQ -fvQ -fvQ -fvQ -fvQ -pwa -qsE -gLx -fvQ -fvQ -coE -coE -aaq -aaq -aaq -aaq -aaq -aaq -aaq -fsG -sRV -aoF -fTk -nUR -fsG -bgy -rMV -etd -mKC -uzw -hyZ -aaq -aaq -aaq -aaq -aaq -aaq -aaq +dZq +coE +coE +qmr +qmr +qmr +qmr +qmr +qmr +qHb +ubg +ubg +rzA +ubg +ubg +ubg +ubg +ubg +rIw +inl +nRT +tLv +tMU +qFD +rCV +mdH +aun +pQU +xwc +jJj +fCz +hoU +hgg +bNL +mpW +tLv +tMU +thO +aPA +mSc +pJU +aPA +sVU +cBE +slv +mkb +kxq +sVU +pFn +xqu +xqu +nve +gDB +vsF +vsF +ojx +ojx +vsF +vsF +vHh +mSR +igC +vsF +vsF +ojx +ojx +vsF +vsF +qEC +hkp +qEC +qEC +qEC +xWh +xWh +rOm +xZu +xZu +xqm +xWh +rEe +smR +rEe +skZ +xZu +uAW +jrD +xZu +xZu +xZu +coE +coE +coE +coE +fvQ +fvQ +fvQ +fvQ +fvQ +fvQ +pwa +qsE +gLx +fvQ +fvQ +coE +coE +aaq +aaq +aaq +aaq +aaq +aaq +aaq +fsG +sRV +aoF +fTk +nUR +fsG +bgy +rMV +etd +mKC +uzw +hyZ +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +yga +cDs +coE +aaq +aaq +aaq +aaq +aaq +aaq +"} +(201,1,1) = {" +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +yhg +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq +aaq aaq aaq aaq @@ -183439,109 +181808,9 @@ aaq aaq aaq aaq -aaq -aaq -aaq -aaq -yga -cDs coE -aaq -aaq -aaq -aaq -aaq -aaq -"} -(201,1,1) = {" -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -yhg -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -bCI -dZq coE +acF nJR wHu lBw @@ -183797,8 +182066,8 @@ aaq aaq aaq aaq -coE -coE +aaq +ozX opE sVm bub @@ -183818,7 +182087,7 @@ lCu wMw pby tLv -nvV +tMU tzh wnX lvI @@ -184054,8 +182323,8 @@ aaq aaq aaq aaq -dZq coE +acF paa rhG igZ @@ -184317,8 +182586,8 @@ qmr qmr qmr qmr -rzA -xyQ +vyi +vyi fnM iAK jnn @@ -184572,9 +182841,9 @@ dZq coE coE coE -acF -acF -fib +coE +coE +vyi fsq qlW oDN @@ -184589,7 +182858,7 @@ dNo wMw nRT tLv -nvV +tMU lhS rGK szM @@ -184830,8 +183099,8 @@ aaq aaq aaq aaq -ozX -xyQ +coE +vyi jRh skC qfc @@ -185086,8 +183355,8 @@ coE coE coE coE -acF -acF +coE +coE vyi jch tFf @@ -188445,7 +186714,7 @@ ugN oIn mqz mml -gVL +oAa rOY sCY xYa @@ -188708,7 +186977,7 @@ soE gNS tWn uyo -nzk +xAb tWn oIN qKm @@ -189472,7 +187741,7 @@ iwt oHz phf pNN -dsg +scP tWn rQw nud @@ -189729,14 +187998,14 @@ ozo xKm umy xDp -dsg +scP tWn tWn vZl xAb tWn vZl -nzk +xAb tWn qKm qKm diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 639ec41c742..3330c25dd19 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -437,8 +437,21 @@ /area/ruin/powered/beach) "wf" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/tequila{ - pixel_y = 7 +/obj/item/reagent_containers/food/drinks/zaza{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/reagent_containers/food/drinks/zaza{ + pixel_x = 2; + pixel_y = 8 + }, +/obj/item/reagent_containers/food/drinks/zaza{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/reagent_containers/food/drinks/zaza{ + pixel_x = -10; + pixel_y = 8 }, /turf/simulated/floor/wood, /area/ruin/powered/beach) diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm index c0212ce9787..5404e247c38 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm @@ -24,7 +24,7 @@ /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "h" = ( -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /obj/item/candle, /obj/item/storage/box/matches, /obj/effect/decal/cleanable/cobweb2, @@ -49,7 +49,7 @@ /obj/effect/decal/cleanable/blood{ layer = 2.5 }, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /turf/simulated/floor/wood{ broken = 1; icon_state = "wood-broken" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/USSP_gorky17_collapsed.dmm b/_maps/map_files/RandomRuins/SpaceRuins/USSP_gorky17_collapsed.dmm index 49a65c072ed..19ab7762b31 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/USSP_gorky17_collapsed.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/USSP_gorky17_collapsed.dmm @@ -2,7 +2,7 @@ "aa" = ( /obj/effect/decal/cleanable/dirt, /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "ab" = ( /obj/structure/cable{ @@ -16,7 +16,7 @@ dir = 1 }, /obj/item/shard, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "ad" = ( /obj/effect/decal/cleanable/dirt, @@ -144,7 +144,7 @@ /obj/item/clothing/under/soviet, /obj/item/clothing/head/sovietsidecap, /obj/item/clothing/shoes/jackboots, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "az" = ( /obj/structure/cable{ @@ -297,7 +297,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -479,7 +479,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/ash, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "bM" = ( /obj/item/shard{ @@ -540,9 +540,7 @@ /obj/structure/cable{ icon_state = "1-4" }, -/turf/simulated/floor/plasteel{ - dir = 1 - }, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "bR" = ( /obj/machinery/light/small{ @@ -679,11 +677,8 @@ }, /area/ruin/space/USSP_gorky17/collapsed/utility) "cg" = ( -/obj/structure/curtain/medical, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - icon_state = "darkfull" - }, +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/medbay) "ch" = ( /obj/effect/decal/cleanable/blood, @@ -786,7 +781,7 @@ "cw" = ( /obj/machinery/optable, /obj/item/paper/gorky17/autopsy, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -990,7 +985,7 @@ icon_state = "1-4" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "dh" = ( /obj/effect/decal/cleanable/dirt, @@ -1053,6 +1048,8 @@ /obj/item/stack/rods{ amount = 4 }, +/obj/effect/decal/cleanable/glass, +/obj/effect/landmark/tiles/damageturf, /turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/angar) "dt" = ( @@ -1066,7 +1063,7 @@ pixel_y = -6 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -1229,7 +1226,8 @@ icon_state = "1-4"; tag = "90Curve" }, -/turf/simulated/floor/wood, +/obj/effect/decal/cleanable/glass, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "dV" = ( /obj/structure/cable, @@ -1288,7 +1286,7 @@ icon_state = "fleshling1"; melee_damage_lower = 10 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "eh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -1648,9 +1646,8 @@ }, /area/ruin/space/USSP_gorky17/collapsed/utility) "fb" = ( -/turf/simulated/floor/wood{ - icon_state = "wood-broken5"; - tag = "icon-wood-broken5" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken4" }, /area/ruin/space/USSP_gorky17/collapsed/dinning) "fe" = ( @@ -1819,7 +1816,7 @@ /area/ruin/space/USSP_gorky17/collapsed/utility) "fx" = ( /obj/structure/bed, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "fz" = ( /obj/item/solar_assembly, @@ -2025,7 +2022,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "gg" = ( /obj/structure/rack, @@ -2603,9 +2600,7 @@ /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/solmaintsouth) "hL" = ( -/turf/simulated/floor/wood{ - icon_state = "wood-broken3" - }, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "hM" = ( /obj/item/clothing/suit/space/hardsuit/soviet, @@ -2672,7 +2667,7 @@ /obj/item/stack/sheet/metal{ amount = 2 }, -/turf/simulated/floor/plating/damaged, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/common) "hW" = ( /obj/machinery/flasher{ @@ -2858,7 +2853,7 @@ "iv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/ash, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -3042,9 +3037,8 @@ pixel_y = -24; req_access = list(122) }, -/turf/simulated/floor/wood{ - icon_state = "wood-broken3"; - tag = "icon-wood-broken3" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken7" }, /area/ruin/space/USSP_gorky17/collapsed/dinning) "jo" = ( @@ -3054,6 +3048,7 @@ /area/ruin/space/USSP_gorky17/collapsed/engineering) "jp" = ( /obj/effect/decal/cleanable/ash, +/obj/effect/landmark/tiles/damageturf, /turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/gate) "jq" = ( @@ -3150,7 +3145,7 @@ /obj/machinery/light_construct/small{ dir = 1 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "jF" = ( /obj/effect/decal/cleanable/dirt, @@ -3250,9 +3245,7 @@ d2 = 2; icon_state = "0-2" }, -/turf/simulated/floor/wood{ - icon_state = "wood-broken7" - }, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "jU" = ( /obj/structure/cable{ @@ -3487,10 +3480,7 @@ pixel_x = 7 }, /obj/structure/chair, -/turf/simulated/floor/wood{ - broken = 1; - icon_state = "wood-broken" - }, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "ku" = ( /obj/structure/table, @@ -3531,7 +3521,7 @@ pixel_y = 2 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -3569,10 +3559,7 @@ /area/ruin/space/USSP_gorky17/collapsed/gate) "kL" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/wood{ - icon_state = "wood-broken7"; - tag = "icon-wood-broken7" - }, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "kM" = ( /obj/structure/cable, @@ -3582,7 +3569,7 @@ req_access = list(122,123,124,125,126); start_charge = 0 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "kO" = ( /obj/item/clothing/head/bomb_hood/security{ @@ -3711,6 +3698,13 @@ icon_state = "red" }, /area/ruin/space/USSP_gorky17/collapsed/common) +"lh" = ( +/obj/item/shard{ + icon_state = "medium" + }, +/obj/effect/decal/cleanable/glass, +/turf/simulated/floor/plating/airless, +/area/ruin/space/USSP_gorky17/collapsed/medbay) "lj" = ( /obj/structure/window/reinforced{ dir = 4 @@ -3758,7 +3752,7 @@ icon_state = "fleshling1"; melee_damage_lower = 10 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "lt" = ( /obj/structure/table/glass, @@ -3828,7 +3822,7 @@ tag = "" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -3988,7 +3982,7 @@ dir = 8 }, /obj/machinery/light_construct/small, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "ma" = ( /obj/structure/cable{ @@ -4043,6 +4037,12 @@ /obj/effect/decal/cleanable/dust, /turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/medbay) +"mk" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/airless{ + icon_state = "darkfull" + }, +/area/ruin/space/USSP_gorky17/collapsed/medbay) "ml" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/damaged, @@ -4080,7 +4080,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -4100,7 +4100,7 @@ dir = 8; on = 1 }, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -4238,7 +4238,7 @@ start_charge = 0 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -4313,6 +4313,18 @@ }, /turf/space, /area/ruin/space/USSP_gorky17/collapsed/solars) +"na" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/obj/machinery/light_construct/small{ + dir = 1 + }, +/turf/simulated/floor/wood/airless, +/area/ruin/space/USSP_gorky17/collapsed/dorms) "nd" = ( /obj/structure/chair/stool/bar/dark, /turf/simulated/floor/plating/airless, @@ -4437,6 +4449,12 @@ /obj/item/shard, /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/gate) +"ns" = ( +/obj/structure/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/wood/airless, +/area/ruin/space/USSP_gorky17/collapsed/dorms) "nu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -4613,7 +4631,7 @@ /area/ruin/space/USSP_gorky17/collapsed/rnd) "nX" = ( /obj/structure/table_frame, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "oa" = ( /turf/simulated/wall/r_wall, @@ -4849,7 +4867,6 @@ /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/common) "oF" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/mob_spawn/carp, /turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) @@ -4858,7 +4875,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -5062,6 +5079,7 @@ /obj/item/stack/cable_coil{ amount = 3 }, +/obj/effect/landmark/tiles/damageturf, /turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "ps" = ( @@ -5130,7 +5148,7 @@ }, /area/ruin/space/USSP_gorky17/collapsed/angar) "pC" = ( -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -5442,7 +5460,7 @@ /obj/item/stack/rods{ amount = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "qH" = ( /turf/simulated/wall/r_wall/rust, @@ -5553,6 +5571,9 @@ /area/ruin/space/USSP_gorky17/collapsed/rnd) "qW" = ( /obj/structure/table/reinforced, +/obj/machinery/door/window{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -5709,7 +5730,7 @@ /obj/machinery/light_construct{ dir = 1 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "rt" = ( /obj/structure/table/reinforced, @@ -5718,6 +5739,9 @@ pixel_x = 9; pixel_y = -9 }, +/obj/machinery/door/window{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -5791,7 +5815,6 @@ pixel_x = -5; pixel_y = -1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/ash, /turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) @@ -6007,6 +6030,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/common) +"sf" = ( +/obj/effect/decal/cleanable/glass, +/turf/space, +/area/template_noop) "sh" = ( /obj/item/stack/ore/glass/basalt, /turf/space, @@ -6197,7 +6224,9 @@ /turf/simulated/floor/plating/asteroid/airless, /area/ruin/space/USSP_gorky17/collapsed/asteroids) "sM" = ( -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken2" + }, /area/ruin/space/USSP_gorky17/collapsed/dinning) "sN" = ( /obj/effect/decal/cleanable/dirt, @@ -6266,7 +6295,7 @@ "sU" = ( /obj/machinery/door/poddoor, /obj/structure/grille/broken, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/angar) "sV" = ( /obj/item/shard{ @@ -6415,6 +6444,7 @@ icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/glass, /turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/medbay) "to" = ( @@ -6470,6 +6500,9 @@ "tv" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/boiledbuckwheat, +/obj/machinery/door/window{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -6488,7 +6521,7 @@ /area/ruin/space/USSP_gorky17/collapsed/solmaintsouth) "tz" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "tA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -6517,7 +6550,7 @@ icon_state = "1-4"; tag = "90Curve" }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "tD" = ( /obj/effect/decal/cleanable/dirt, @@ -7894,6 +7927,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/gate) +"xE" = ( +/obj/structure/table/wood, +/obj/item/flashlight/lamp{ + on = 0 + }, +/turf/simulated/floor/wood/airless, +/area/ruin/space/USSP_gorky17/collapsed/dorms) "xI" = ( /obj/structure/cable{ icon_state = "0-2" @@ -8238,8 +8278,7 @@ tag = "" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - dir = 5; +/turf/simulated/floor/plasteel/airless{ icon_state = "darkredfull" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -8740,7 +8779,7 @@ }, /area/ruin/space/USSP_gorky17/collapsed/bridge) "zU" = ( -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "zV" = ( /turf/simulated/floor/plasteel{ @@ -9194,7 +9233,7 @@ }, /obj/machinery/disposal, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "Ba" = ( /obj/effect/decal/cleanable/dust, @@ -9343,8 +9382,8 @@ pixel_x = 24; pixel_y = -6 }, -/turf/simulated/floor/wood{ - icon_state = "wood-broken3" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken7" }, /area/ruin/space/USSP_gorky17/collapsed/dorms) "Bu" = ( @@ -9368,9 +9407,7 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - dir = 1 - }, +/turf/simulated/floor/plasteel/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "Bx" = ( /obj/structure/chair/sofa{ @@ -9395,6 +9432,10 @@ /obj/machinery/atmospherics/unary/tank/air/ninja, /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/gate) +"BB" = ( +/obj/effect/decal/cleanable/glass, +/turf/simulated/floor/plating/airless, +/area/ruin/space/USSP_gorky17/collapsed/dinning) "BC" = ( /obj/machinery/door/airlock/multi_tile{ dir = 1; @@ -9476,6 +9517,12 @@ icon_state = "red" }, /area/ruin/space/USSP_gorky17/collapsed/common) +"BW" = ( +/obj/effect/decal/cleanable/glass, +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken7" + }, +/area/ruin/space/USSP_gorky17/collapsed/dorms) "BX" = ( /turf/simulated/wall/r_wall, /area/ruin/space/USSP_gorky17/collapsed/gate) @@ -9593,9 +9640,8 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/wood{ - icon_state = "wood-broken"; - tag = "icon-wood-broken" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken4" }, /area/ruin/space/USSP_gorky17/collapsed/dorms) "Ct" = ( @@ -9629,8 +9675,7 @@ icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - dir = 5; +/turf/simulated/floor/plasteel/airless{ icon_state = "darkredfull" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -9741,7 +9786,7 @@ melee_damage_lower = 10; melee_damage_upper = 15 }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "CW" = ( /obj/machinery/light/small{ @@ -9803,7 +9848,7 @@ /obj/machinery/light_construct/small{ dir = 1 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "De" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -10375,7 +10420,7 @@ "Et" = ( /obj/structure/table/glass, /obj/item/storage/box/bodybags, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -10407,7 +10452,7 @@ /obj/item/clothing/head/sovietsidecap, /obj/item/clothing/shoes/jackboots, /obj/item/clothing/head/soviethelmet, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "EB" = ( /obj/structure/cable{ @@ -10432,7 +10477,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "EE" = ( /obj/structure/lattice/catwalk, @@ -10626,10 +10671,7 @@ /area/ruin/space/USSP_gorky17/collapsed/kitchen) "Fc" = ( /obj/structure/chair, -/turf/simulated/floor/wood{ - broken = 1; - icon_state = "wood-broken" - }, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "Fd" = ( /obj/effect/decal/cleanable/dirt, @@ -10752,7 +10794,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -11070,9 +11112,8 @@ pixel_y = -32 }, /obj/item/trash/plate, -/turf/simulated/floor/wood{ - icon_state = "wood-broken3"; - tag = "icon-wood-broken3" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken3" }, /area/ruin/space/USSP_gorky17/collapsed/dinning) "Gm" = ( @@ -11587,7 +11628,7 @@ icon_state = "1-2"; tag = "" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/medbay) "HX" = ( /obj/structure/chair/office/dark{ @@ -11610,9 +11651,8 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood{ - icon_state = "wood-broken6"; - tag = "icon-wood-broken6" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken3" }, /area/ruin/space/USSP_gorky17/collapsed/dinning) "Ib" = ( @@ -11628,7 +11668,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -11850,6 +11890,7 @@ /obj/item/shard{ icon_state = "medium" }, +/obj/effect/decal/cleanable/glass, /turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/medbay) "IF" = ( @@ -12100,7 +12141,7 @@ dir = 8; on = 1 }, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -12171,6 +12212,11 @@ dir = 1 }, /area/ruin/space/USSP_gorky17/collapsed/common) +"Jz" = ( +/obj/item/tank/internals/oxygen/empty, +/obj/effect/landmark/tiles/damageturf, +/turf/simulated/floor/plating/airless, +/area/ruin/space/USSP_gorky17/collapsed/angar) "JA" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -12431,10 +12477,7 @@ /area/ruin/space/USSP_gorky17/collapsed/solmaintsouth) "Kl" = ( /obj/effect/decal/cleanable/ash, -/turf/simulated/floor/wood{ - icon_state = "wood-broken6"; - tag = "icon-wood-broken6" - }, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "Kn" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -12579,7 +12622,8 @@ }, /area/ruin/space/USSP_gorky17/collapsed/check2) "KQ" = ( -/turf/simulated/floor/plating/damaged, +/obj/effect/landmark/tiles/damageturf, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "KS" = ( /obj/structure/table/reinforced, @@ -12881,11 +12925,9 @@ /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/arrival) "LT" = ( -/obj/structure/table_frame, -/turf/simulated/floor/wood{ - icon_state = "wood-broken3" - }, -/area/ruin/space/USSP_gorky17/collapsed/dorms) +/obj/effect/landmark/tiles/damageturf, +/turf/simulated/floor/plating/airless, +/area/ruin/space/USSP_gorky17/collapsed/angar) "LU" = ( /obj/effect/decal/cleanable/cobweb2, /obj/effect/decal/cleanable/dirt, @@ -12949,7 +12991,7 @@ tag = "" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -13158,6 +13200,12 @@ /obj/effect/decal/cleanable/ash, /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/gate) +"MI" = ( +/obj/effect/decal/cleanable/glass, +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken3" + }, +/area/ruin/space/USSP_gorky17/collapsed/dorms) "MJ" = ( /obj/structure/cable{ d2 = 8; @@ -13351,7 +13399,7 @@ icon_state = "1-2"; tag = "" }, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -13362,7 +13410,7 @@ pixel_x = 9; pixel_y = -9 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "Nk" = ( /obj/structure/cable{ @@ -13379,7 +13427,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/angar) "Nl" = ( /obj/effect/spawner/window/reinforced, @@ -13513,7 +13561,7 @@ "NF" = ( /obj/effect/decal/cleanable/dirt, /obj/item/shard, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "NG" = ( /obj/effect/decal/cleanable/dirt, @@ -13590,7 +13638,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/turf/simulated/floor/plating/damaged, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/common) "NS" = ( /obj/effect/decal/cleanable/dirt, @@ -13707,10 +13755,7 @@ amount = 2 }, /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/wood{ - icon_state = "wood-broken7"; - tag = "icon-wood-broken7" - }, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "Ol" = ( /obj/effect/decal/warning_stripes/northeastcorner, @@ -14016,7 +14061,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "OZ" = ( /obj/effect/decal/warning_stripes/east, @@ -14044,7 +14089,7 @@ /obj/machinery/light_construct/small{ dir = 4 }, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -14102,7 +14147,7 @@ dir = 8 }, /obj/machinery/disposal, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -14260,7 +14305,7 @@ /area/ruin/space/USSP_gorky17/collapsed/bridge) "PI" = ( /obj/machinery/bodyscanner, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "darkfull" }, /area/ruin/space/USSP_gorky17/collapsed/medbay) @@ -14348,6 +14393,11 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/gate) +"PX" = ( +/turf/simulated/floor/plasteel/airless{ + icon_state = "darkfull" + }, +/area/ruin/space/USSP_gorky17/collapsed/medbay) "PY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -14484,7 +14534,7 @@ icon_state = "fleshling1"; melee_damage_lower = 10 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "Qv" = ( /obj/structure/lattice/catwalk, @@ -14500,6 +14550,10 @@ }, /turf/space, /area/ruin/space/USSP_gorky17/collapsed/solars) +"Qw" = ( +/obj/effect/landmark/tiles/damageturf, +/turf/simulated/floor/plating/airless, +/area/ruin/space/USSP_gorky17/collapsed/dinning) "Qx" = ( /obj/structure/table/reinforced, /obj/machinery/kitchen_machine/microwave{ @@ -15069,7 +15123,7 @@ /obj/machinery/light_construct/small{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plating/airless, /area/ruin/space/USSP_gorky17/collapsed/medbay) "Sk" = ( /obj/structure/cable{ @@ -15125,9 +15179,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - dir = 1 - }, +/turf/simulated/floor/plasteel/airless, /area/ruin/space/USSP_gorky17/collapsed/common) "St" = ( /obj/effect/decal/cleanable/dirt, @@ -15363,9 +15415,7 @@ melee_damage_lower = 10; melee_damage_upper = 20 }, -/turf/simulated/floor/plasteel{ - dir = 1 - }, +/turf/simulated/floor/plasteel/airless, /area/ruin/space/USSP_gorky17/collapsed/common) "Tf" = ( /obj/effect/decal/cleanable/dirt, @@ -15513,6 +15563,11 @@ icon_state = "white" }, /area/ruin/space/USSP_gorky17/collapsed/kitchen) +"TB" = ( +/obj/effect/decal/cleanable/ash, +/obj/effect/landmark/tiles/damageturf, +/turf/simulated/floor/plating/airless, +/area/ruin/space/USSP_gorky17/collapsed/dinning) "TC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -15623,9 +15678,8 @@ /area/ruin/space/USSP_gorky17/collapsed/medbay) "TR" = ( /obj/structure/door_assembly, -/turf/simulated/floor/wood{ - broken = 1; - icon_state = "wood-broken" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken5" }, /area/ruin/space/USSP_gorky17/collapsed/dorms) "TT" = ( @@ -15787,9 +15841,7 @@ /area/ruin/space/USSP_gorky17/collapsed/arrival) "Uv" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - dir = 1 - }, +/turf/simulated/floor/plasteel/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "Uz" = ( /obj/effect/spawner/window/reinforced, @@ -15902,7 +15954,6 @@ }, /area/ruin/space/USSP_gorky17/collapsed/check1) "UW" = ( -/obj/structure/curtain/medical, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, @@ -15910,6 +15961,7 @@ icon_state = "1-2"; tag = "" }, +/obj/machinery/door/airlock/public/glass, /turf/simulated/floor/plasteel{ icon_state = "darkfull" }, @@ -16091,7 +16143,7 @@ /obj/item/stack/sheet/metal{ amount = 2 }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "VC" = ( /obj/effect/decal/cleanable/dirt, @@ -16144,9 +16196,8 @@ /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/common) "VH" = ( -/turf/simulated/floor/wood{ - icon_state = "wood-broken3"; - tag = "icon-wood-broken3" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken2" }, /area/ruin/space/USSP_gorky17/collapsed/dorms) "VI" = ( @@ -16267,7 +16318,7 @@ /obj/structure/table, /obj/item/trash/plate, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "VU" = ( /obj/effect/spawner/window/reinforced, @@ -16334,7 +16385,7 @@ /obj/machinery/light_construct/small{ dir = 1 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "Wf" = ( /obj/machinery/computer/rdconsole/mechanics{ @@ -16608,6 +16659,11 @@ }, /turf/simulated/floor/plating/damaged, /area/ruin/space/USSP_gorky17/collapsed/check2) +"WR" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/landmark/tiles/damageturf, +/turf/simulated/floor/plating/airless, +/area/ruin/space/USSP_gorky17/collapsed/angar) "WT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating/damaged, @@ -16675,9 +16731,8 @@ /area/ruin/space/USSP_gorky17/collapsed/gate) "Xc" = ( /obj/structure/door_assembly, -/turf/simulated/floor/wood{ - icon_state = "wood-broken5"; - tag = "icon-wood-broken5" +/turf/simulated/floor/wood/airless{ + icon_state = "wood-broken4" }, /area/ruin/space/USSP_gorky17/collapsed/dorms) "Xd" = ( @@ -16747,7 +16802,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "Xl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -16873,7 +16928,7 @@ /obj/machinery/light_switch{ pixel_x = -24 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "XE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -16921,10 +16976,7 @@ /obj/item/stack/sheet/metal{ amount = 2 }, -/turf/simulated/floor/wood{ - icon_state = "wood-broken3"; - tag = "icon-wood-broken3" - }, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dinning) "XK" = ( /obj/structure/lattice/catwalk, @@ -16957,7 +17009,7 @@ /obj/item/shard{ icon_state = "small" }, -/turf/simulated/floor/plasteel{ +/turf/simulated/floor/plasteel/airless{ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/angar) @@ -17218,7 +17270,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "YP" = ( /obj/effect/decal/cleanable/dirt, @@ -17325,6 +17377,14 @@ icon_state = "dark" }, /area/ruin/space/USSP_gorky17/collapsed/utility) +"Zl" = ( +/obj/structure/table/wood, +/obj/item/folder, +/obj/machinery/light_switch{ + pixel_x = -24 + }, +/turf/simulated/floor/wood/airless, +/area/ruin/space/USSP_gorky17/collapsed/dorms) "Zm" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -17425,6 +17485,12 @@ /obj/item/clothing/suit/hooded/fluff/bone, /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/mining) +"Zz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel/airless{ + icon_state = "dark" + }, +/area/ruin/space/USSP_gorky17/collapsed/angar) "ZA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -17524,7 +17590,7 @@ /area/ruin/space/USSP_gorky17/collapsed/common) "ZJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "ZK" = ( /obj/structure/largecrate/schrodinger, @@ -17556,12 +17622,16 @@ icon_state = "1-2"; tag = "" }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "ZR" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/USSP_gorky17/collapsed/medbay) +"ZS" = ( +/obj/structure/dresser, +/turf/simulated/floor/wood/airless, +/area/ruin/space/USSP_gorky17/collapsed/dorms) "ZT" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 @@ -17573,7 +17643,7 @@ /obj/item/twohanded/required/kirbyplants, /obj/effect/decal/cleanable/blood, /obj/item/clothing/shoes/fluff/arachno_boots, -/turf/simulated/floor/wood, +/turf/simulated/floor/wood/airless, /area/ruin/space/USSP_gorky17/collapsed/dorms) "ZZ" = ( /obj/structure/cable, @@ -31421,7 +31491,7 @@ BU BU gK jE -aQ +MI bL lZ gK @@ -31622,13 +31692,13 @@ Bi PZ aQ gK -aQ +BW tz YO hL ph QF -QF +KQ Zv sv sv @@ -31824,7 +31894,7 @@ Vy aQ aQ tT -LT +nX zU VB TR @@ -32031,10 +32101,10 @@ Kl YO QF lw -QF +KQ QF AO -QF +KQ ph wZ yI @@ -32234,7 +32304,7 @@ Cs OO QF QF -QF +KQ Bb Bb Fu @@ -32425,9 +32495,9 @@ ID ol cC gK -fN +xE XD -PZ +kL QF ph QF @@ -32437,7 +32507,7 @@ KQ QF YN GL -QF +KQ nS gK wZ @@ -32628,7 +32698,7 @@ cJ Qd BU Dd -Vy +ns gB QF VH @@ -32636,7 +32706,7 @@ gx GL gP QF -KQ +QF fX Yl QF @@ -32832,7 +32902,7 @@ BU EA eg fx -Qn +ZS BU YQ QF @@ -32840,7 +32910,7 @@ Sf QF QF QF -QF +KQ QF BG BU @@ -33233,12 +33303,12 @@ Kd sW LY BU -fN -Bi +xE +Zl ZX lw ph -KQ +QF AO Sf fY @@ -33435,15 +33505,15 @@ Mk Gi EH gK -av -Vy +na +ns QF AO Xc kL zU in -KQ +QF gh QF Yl @@ -33640,7 +33710,7 @@ gK EA Jb rP -Qn +ZS gK jT ZQ @@ -35236,15 +35306,15 @@ fB fB fB ok -Rn +lh hO lS Zf Pi iv mt -ii -iW +PX +cg ii cQ wV @@ -35444,7 +35514,7 @@ mE Zf Ku kC -wV +mk Et Ku Ku @@ -41336,9 +41406,9 @@ Fc Lb Lb Ay -Lb +Qw fR -fB +sf rq fB aR @@ -41538,7 +41608,7 @@ Gb Lb rC Cq -Lb +BB eL fB fB @@ -41743,7 +41813,7 @@ Cq VO eL fB -fB +sf fB aR wZ @@ -42144,8 +42214,8 @@ vx Lb qf oF -Lb -Lb +Qw +BB fB fB fB @@ -42344,10 +42414,10 @@ Iy Cq Lb Tn -Cq +Qw ag mY -Gb +TB fB fB fB @@ -42516,7 +42586,7 @@ Ds rV Pk hJ -AD +LT rV ST uJ @@ -42546,11 +42616,11 @@ qF FM qh Cq -Lb +Qw mB -Lb +BB qg -fB +sf fB fB Db @@ -42715,7 +42785,7 @@ fB fB fB dn -fF +Jz Lr Zu AD @@ -42915,10 +42985,10 @@ fB fB fB pD -fB +sf ws dq -AD +WR Th Al wk @@ -43122,7 +43192,7 @@ ws js jR Lr -AD +LT SL ST Oo @@ -43321,17 +43391,17 @@ Df uB fB ws -AD +WR Lr DM fF tV mO -zf -zf +Zz +Zz mq -zf -zf +Zz +Zz xu GX rR @@ -43521,7 +43591,7 @@ fB fB fB fB -fB +sf sU DP Lr @@ -43733,7 +43803,7 @@ XM Pa Jp pC -zf +Zz mq dw xu diff --git a/_maps/map_files/RandomRuins/SpaceRuins/magestavern.dmm b/_maps/map_files/RandomRuins/SpaceRuins/magestavern.dmm index 07abf5b0bd1..df177923fdc 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/magestavern.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/magestavern.dmm @@ -340,16 +340,16 @@ "oq" = ( /obj/effect/decal/cleanable/tomato_smudge, /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /turf/simulated/floor/carpet/red, /area/ruin/unpowered) "pj" = ( @@ -427,7 +427,7 @@ "sp" = ( /obj/structure/kitchenspike, /obj/effect/decal/cleanable/blood/old, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "escape" @@ -939,7 +939,7 @@ /area/ruin/unpowered) "OD" = ( /obj/structure/table/wood/fancy/black, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /obj/item/clothing/glasses/meson/fluff/book_berner_1, /turf/simulated/floor/carpet/black, /area/ruin/unpowered) diff --git a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm index 45de9ba28b9..88ec7e10775 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm @@ -137,6 +137,12 @@ icon_state = "dark" }, /area/ruin/space/ancientstation/hivebot) +"bp" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes/arrow, +/obj/structure/transit_tube/station, +/turf/simulated/floor/plasteel, +/area/ruin/space/ancientstation/thetacorridor) "bs" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -537,9 +543,7 @@ /turf/simulated/floor/plasteel, /area/ruin/space/ancientstation/rnd) "er" = ( -/obj/machinery/conveyor{ - id = null - }, +/obj/machinery/conveyor, /obj/item/circuitboard/ore_redemption, /obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/glass/fifty{ @@ -1143,7 +1147,6 @@ "ix" = ( /obj/item/wirecutters/brass{ desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch. One of the fancy signature instuments of the Chief Engineer tool set. Looks burnt and damaged. Wonder if I could find the rest of them..."; - description_info = null; toolspeed = 1 }, /turf/template_noop, @@ -1170,6 +1173,13 @@ /obj/item/shard, /turf/simulated/floor/plating/airless, /area/ruin/space/ancientstation/betanorth) +"iG" = ( +/obj/structure/transit_tube/cap{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel, +/area/ruin/space/ancientstation/betanorth) "iK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -1305,8 +1315,8 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/remains/robot{ - icon_state = "gibup" +/obj/structure/transit_tube/cap{ + dir = 8 }, /turf/simulated/floor/plasteel, /area/ruin/space/ancientstation/thetacorridor) @@ -1414,7 +1424,6 @@ "kx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor_switch/oneway{ - id = null; obj_integrity = 70 }, /turf/simulated/floor/plasteel/airless, @@ -1570,9 +1579,7 @@ /area/ruin/space/ancientstation/betanorth) "lD" = ( /obj/structure/plasticflaps/mining, -/obj/machinery/conveyor{ - id = null - }, +/obj/machinery/conveyor, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/airless, /area/ruin/space/ancientstation/betamincorridor) @@ -1603,9 +1610,7 @@ }, /area/ruin/space/ancientstation/proto) "mp" = ( -/obj/machinery/conveyor{ - id = null - }, +/obj/machinery/conveyor, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/airless, /area/ruin/space/ancientstation/betamincorridor) @@ -1754,22 +1759,14 @@ /turf/simulated/floor/engine/vacuum, /area/ruin/space/ancientstation/atmos) "nt" = ( -/obj/structure/transit_tube_pod{ - dir = 4 - }, -/obj/structure/transit_tube/station/reverse{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/arrow{ dir = 1 }, -/turf/simulated/floor/plasteel/airless, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel, /area/ruin/space/ancientstation/betanorth) "nu" = ( -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" - }, +/obj/structure/transit_tube/crossing/horizontal, /turf/template_noop, /area/template_noop) "nv" = ( @@ -1890,18 +1887,9 @@ /turf/simulated/floor/plating, /area/ruin/space/ancientstation/sec) "or" = ( -/obj/structure/transit_tube_pod{ - dir = 4 - }, -/obj/structure/transit_tube/station/reverse{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/warning_stripes/arrow{ - dir = 1 - }, /turf/simulated/floor/plasteel, -/area/ruin/space/ancientstation) +/area/ruin/space/ancientstation/betanorth) "ot" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2113,11 +2101,11 @@ /turf/simulated/floor/plasteel/airless, /area/ruin/space/ancientstation/betaengi) "qD" = ( -/obj/structure/transit_tube{ - icon_state = "N-S" - }, -/turf/template_noop, -/area/template_noop) +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes/arrow, +/obj/structure/transit_tube/station, +/turf/simulated/floor/plasteel, +/area/ruin/space/ancientstation) "qK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/southeast, @@ -2127,10 +2115,9 @@ /turf/simulated/floor/plasteel, /area/ruin/space/ancientstation) "qS" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/transit_tube, -/turf/simulated/floor/plating, -/area/ruin/space/ancientstation/thetacorridor) +/obj/structure/transit_tube/horizontal, +/turf/template_noop, +/area/template_noop) "qU" = ( /obj/machinery/light{ dir = 1; @@ -2338,7 +2325,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/airless, +/turf/simulated/floor/plasteel, /area/ruin/space/ancientstation/betanorth) "sS" = ( /obj/effect/decal/cleanable/dirt, @@ -2352,9 +2339,10 @@ /turf/template_noop, /area/template_noop) "sZ" = ( -/obj/structure/transit_tube/station/reverse, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/warning_stripes/arrow, +/obj/effect/decal/remains/robot{ + icon_state = "gibup" + }, /turf/simulated/floor/plasteel, /area/ruin/space/ancientstation/thetacorridor) "ta" = ( @@ -3598,9 +3586,9 @@ /area/ruin/space/ancientstation/thetacorridor) "Dx" = ( /obj/effect/spawner/window/reinforced, -/obj/structure/transit_tube, -/turf/simulated/floor/plating/airless, -/area/ruin/space/ancientstation/betanorth) +/obj/structure/transit_tube/horizontal, +/turf/simulated/floor/plating, +/area/ruin/space/ancientstation) "Dy" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 8 @@ -3666,9 +3654,11 @@ /turf/simulated/floor/plasteel, /area/ruin/space/ancientstation) "DY" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/transit_tube, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/obj/structure/transit_tube/cap{ + dir = 8 + }, +/turf/simulated/floor/plasteel, /area/ruin/space/ancientstation) "Ea" = ( /obj/structure/cable/yellow{ @@ -3692,9 +3682,16 @@ /turf/template_noop, /area/template_noop) "Ep" = ( -/obj/structure/transit_tube, -/turf/template_noop, -/area/template_noop) +/obj/structure/transit_tube_pod{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes/arrow{ + dir = 1 + }, +/obj/structure/transit_tube/station, +/turf/simulated/floor/plasteel, +/area/ruin/space/ancientstation) "Eq" = ( /obj/structure/transit_tube/station/reverse, /obj/effect/decal/cleanable/dirt, @@ -3964,6 +3961,11 @@ /mob/living/simple_animal/hostile/hivebot, /turf/simulated/floor/plasteel, /area/ruin/space/ancientstation/thetacorridor) +"GK" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/transit_tube/horizontal, +/turf/simulated/floor/plating/airless, +/area/ruin/space/ancientstation/betanorth) "GO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/firedoor, @@ -6216,12 +6218,20 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/ruin/space/ancientstation) +"Xk" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/transit_tube/horizontal, +/turf/simulated/floor/plating, +/area/ruin/space/ancientstation/thetacorridor) "Xl" = ( /obj/machinery/light/small{ dir = 8 }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/drip, +/obj/structure/transit_tube/cap{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/ruin/space/ancientstation) "Xn" = ( @@ -6590,11 +6600,13 @@ /turf/template_noop, /area/template_noop) "ZQ" = ( -/obj/structure/transit_tube/station/reverse, +/obj/structure/transit_tube_pod{ + dir = 4 + }, +/obj/structure/transit_tube/station, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/warning_stripes/arrow, /turf/simulated/floor/plasteel, -/area/ruin/space/ancientstation) +/area/ruin/space/ancientstation/betanorth) "ZR" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/cold_sink/freezer{ @@ -8368,8 +8380,8 @@ hY hY hY gP -Qs -Qs +iG +or sQ yw Rp @@ -8416,9 +8428,9 @@ Vf hY tL lB -Qs +ZQ nt -Qs +or yw Rp Pp @@ -8464,8 +8476,8 @@ ZO ZO ZO Ip +GK jR -Dx jR yw Pp @@ -8512,8 +8524,8 @@ Vf ZO ZO ZO +qS ZO -Ep sV yw Eg @@ -8560,8 +8572,8 @@ ZO ZO Vf ZO +qS ZO -Ep ZO ZO Vf @@ -8608,10 +8620,10 @@ ZO ZO ZO ZO -ZO nu ZO ZO +ZO Vf ZO ZO @@ -8656,8 +8668,8 @@ Vf ZO ZO ZO +nu ZO -Ep ZO ZO ZN @@ -8704,8 +8716,8 @@ ZO ZO ZO ZO +nu ZO -Ep ZO Vf Wc @@ -8752,8 +8764,8 @@ ZO ZO ZO ZO +qS ZO -Ep ZO ZO ZN @@ -8800,8 +8812,8 @@ ZO ZO ZO ZO +qS ZO -Ep ZO Vf Wc @@ -8848,8 +8860,8 @@ ZO ZO ZO ZO +nu ZO -Ep ZO ZO ZN @@ -8896,8 +8908,8 @@ ZO ZO ZO ZO +qS ZO -Ep ZO Vf if @@ -8944,8 +8956,8 @@ ZO ZO ZO ZO +qS ZO -Ep ZO ZO qe @@ -8992,8 +9004,8 @@ ZO ZO ZO ZO +nu ZO -Ep ZO ZO Vf @@ -9040,8 +9052,8 @@ ZO ZO ZO ZO +nu ZO -Ep ZO ZO Vf @@ -9088,10 +9100,10 @@ ZO ZO ZO ZO -ZO nu ZO ZO +ZO cp cp cp @@ -9136,8 +9148,8 @@ ZO ZO ZO ZO +qS ZO -Ep ZO ZO cp @@ -9184,8 +9196,8 @@ ZO ZO ZO ZO +qS ZO -Ep ZO cp cp @@ -9232,8 +9244,8 @@ ZO ZO ZO Zs +Dx Vv -DY Vv cp wq @@ -9280,9 +9292,9 @@ ZO ZO ZO Zs -kS -ZQ +qD Vh +kS cp Rn cG @@ -9328,7 +9340,7 @@ ZO ZO ZO Zs -Vh +DY Vh tg cp @@ -10256,8 +10268,8 @@ VW VW IJ Uh +Ep Vh -or Vh Zs ZO @@ -10289,7 +10301,7 @@ ZO ZO Zs Vv -DY +Vv Vv Uh Pz @@ -10304,8 +10316,8 @@ VW Yq zZ Uh +Dx Vv -DY Vv Zs ZO @@ -10337,7 +10349,7 @@ ZO ZO ZO ZO -Ep +ZO ZO Uh lh @@ -10352,8 +10364,8 @@ VW QV Uh Uh +nu ZO -Ep ZO ZO ZO @@ -10384,7 +10396,7 @@ ZO ZO ZO ZO -Ep +ZO ZO ZO hl @@ -10400,8 +10412,8 @@ VT rb Uh ZO +nu ZO -Ep ZO ZO ZO @@ -10434,7 +10446,7 @@ ZO ZO lU pB -Ep +ZO ZO Uh Uh @@ -10448,8 +10460,8 @@ Uh Uh Uh ZO +qS ZO -Ep ZO ZO ZO @@ -10476,7 +10488,7 @@ hY Xd Xd hY -Ep +ZO ZO ZO ZO @@ -10496,13 +10508,13 @@ ZO ZO ZO ZO -ZO nu ZO ZO ZO ZO ZO +ZO Vf ZO ZO @@ -10533,7 +10545,7 @@ ZO ZO ZO ZO -qD +ZO ZO ZO Vf @@ -10544,8 +10556,8 @@ ZO ZO ZO ZO +qS ZO -Ep ZO ZO ZO @@ -10577,7 +10589,7 @@ ZO ZO ZO ZO -qD +ZO ZO ZO hY @@ -10592,8 +10604,8 @@ ZO ZO ZO ZO +nu ZO -Ep ZO ZO ZO @@ -10625,7 +10637,7 @@ ZO ZO ZO ZO -Ep +ZO ZO tL hY @@ -10640,8 +10652,8 @@ ZO ZO ZO ZO +nu ZO -Ep ZO ZO ZO @@ -10673,7 +10685,7 @@ ZO ZO tz lY -qS +lY lY Id ZO @@ -10688,8 +10700,8 @@ ZO ZO ZO tz +Xk lY -qS lY tz ZO @@ -10736,7 +10748,7 @@ ZO ZO ZO tz -oK +bp sZ xD tz diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm index 3e1490adbe7..8d1bcf560ec 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm @@ -4899,6 +4899,7 @@ /area/derelict/garden) "lQ" = ( /obj/structure/closet/crate/hydroponics, +/obj/item/seeds/wheat/meat, /turf/simulated/floor/plasteel/airless{ dir = 5; icon_state = "green" diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm index 7e75e4dfd16..00af1b38752 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wizardcrash.dmm @@ -314,7 +314,7 @@ /area/ruin/unpowered) "bc" = ( /obj/effect/decal/remains/human, -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /turf/simulated/floor/plating, /area/ruin/unpowered) "bd" = ( @@ -339,7 +339,7 @@ /turf/simulated/floor/plating, /area/ruin/unpowered) "bg" = ( -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /turf/simulated/floor/plating, /area/ruin/unpowered) "bh" = ( @@ -353,7 +353,7 @@ }, /area/ruin/unpowered) "bj" = ( -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /obj/effect/decal/cleanable/blood/old, /turf/simulated/floor/plasteel{ icon_state = "chapel" diff --git a/_maps/map_files/RandomZLevels/evil_santa.dmm b/_maps/map_files/RandomZLevels/evil_santa.dmm index 1c5421ecf6a..5d8e6f8bfdc 100644 --- a/_maps/map_files/RandomZLevels/evil_santa.dmm +++ b/_maps/map_files/RandomZLevels/evil_santa.dmm @@ -2948,7 +2948,7 @@ /turf/simulated/wall/shuttle, /area/vision_change_area/awaymission/evil_santa/end/hall) "xP" = ( -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /turf/simulated/floor/plating/asteroid, /area/vision_change_area/awaymission/evil_santa/mine) "xQ" = ( @@ -4373,7 +4373,7 @@ /turf/simulated/floor/carpet, /area/vision_change_area/awaymission/evil_santa/hut_n) "KT" = ( -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /obj/effect/decal/cleanable/blood/gibs, /turf/simulated/floor/plating/asteroid, /area/vision_change_area/awaymission/evil_santa/mine) diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index 6fbebe4824a..3890be3d64f 100644 --- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm +++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -7098,10 +7098,10 @@ name = "meat fridge"; req_access = list(271) }, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor"; temperature = 273.15 diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index 395f042eca3..5dbd8ebf1d1 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -1659,9 +1659,9 @@ /area/awaymission/spacebattle/syndicate1) "fc" = ( /obj/structure/closet/crate/freezer, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /obj/item/reagent_containers/food/snacks/meat/slab, /turf/simulated/floor/plasteel/freezer, /area/awaymission/spacebattle/freezing) @@ -1709,9 +1709,7 @@ /area/awaymission/spacebattle/engine) "fj" = ( /obj/structure/disposalpipe/segment, -/obj/structure/transit_tube{ - icon_state = "N-S" - }, +/obj/structure/transit_tube, /turf/space, /area/space) "fk" = ( @@ -4012,9 +4010,7 @@ /area/space) "lp" = ( /obj/structure/disposalpipe/segment, -/obj/structure/transit_tube{ - icon_state = "N-S" - }, +/obj/structure/transit_tube, /obj/structure/window/full/shuttle, /turf/simulated/floor, /area/awaymission/spacebattle/cruiser) @@ -7411,9 +7407,7 @@ /area/awaymission/spacebattle/freezing) "uV" = ( /obj/structure/disposalpipe/segment, -/obj/structure/transit_tube{ - icon_state = "N-S" - }, +/obj/structure/transit_tube, /obj/structure/window/full/shuttle, /turf/simulated/floor, /area/awaymission/spacebattle/hallway11) @@ -7882,8 +7876,7 @@ master_tag = "left"; name = "interior access button"; pixel_x = -25; - pixel_y = 25; - req_access = null + pixel_y = 25 }, /turf/simulated/floor/shuttle{ icon_state = "floor4" @@ -7904,9 +7897,7 @@ /area/awaymission/spacebattle/hallway12) "wn" = ( /obj/structure/disposalpipe/segment, -/obj/structure/transit_tube{ - icon_state = "N-S" - }, +/obj/structure/transit_tube, /obj/machinery/constructable_frame{ icon = 'icons/obj/engines_and_power/singularity.dmi'; icon_state = "TheSingGen"; @@ -11229,9 +11220,7 @@ /area/awaymission/spacebattle/syndicate1) "Ff" = ( /obj/structure/disposalpipe/segment, -/obj/structure/transit_tube{ - icon_state = "N-S" - }, +/obj/structure/transit_tube, /obj/machinery/constructable_frame{ icon = 'icons/obj/engines_and_power/singularity.dmi'; icon_state = "TheSingGen"; @@ -12393,8 +12382,7 @@ master_tag = "right"; name = "exterior access button"; pixel_x = -25; - pixel_y = -25; - req_access = null + pixel_y = -25 }, /turf/space, /area/awaymission/spacebattle/syndicate1) @@ -17764,8 +17752,7 @@ master_tag = "right"; name = "interior access button"; pixel_x = 25; - pixel_y = 25; - req_access = null + pixel_y = 25 }, /turf/simulated/floor/shuttle{ icon_state = "floor4" @@ -18424,8 +18411,7 @@ master_tag = "left"; name = "exterior access button"; pixel_x = 25; - pixel_y = -25; - req_access = null + pixel_y = -25 }, /turf/space, /area/awaymission/spacebattle/syndicate1) diff --git a/_maps/map_files/RandomZLevels/terrorspiders.dmm b/_maps/map_files/RandomZLevels/terrorspiders.dmm index 01f62974844..be7441e8079 100644 --- a/_maps/map_files/RandomZLevels/terrorspiders.dmm +++ b/_maps/map_files/RandomZLevels/terrorspiders.dmm @@ -2149,10 +2149,10 @@ name = "meat fridge"; req_access = list(271) }, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm index 34802fdaab3..f2f03fcf0b3 100644 --- a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm @@ -2523,10 +2523,10 @@ name = "meat fridge"; req_access = list(201) }, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm index cc7f7e01a4f..b8f44d74610 100644 --- a/_maps/map_files/cerestation/cerestation.dmm +++ b/_maps/map_files/cerestation/cerestation.dmm @@ -50189,7 +50189,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/item/kitchen/knife, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /turf/simulated/floor/plating, /area/maintenance/asmaint5) "jtD" = ( diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 1221eb1ae68..151181b7ca4 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -252,26 +252,13 @@ }, /area/security/securearmory) "acD" = ( -/obj/structure/window/reinforced/polarized{ - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos_room" - }, /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, -/obj/structure/grille, +/obj/effect/spawner/window/reinforced/polarized{ + id = "hos_room" + }, /turf/simulated/floor/plating, /area/security/hos) "acE" = ( @@ -434,36 +421,20 @@ }, /area/security/securearmory) "adb" = ( -/obj/structure/window/reinforced/polarized{ - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos_room" - }, /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, -/obj/structure/grille, /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; id_tag = "HoSPriv" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "hos_room" + }, /turf/simulated/floor/plating, /area/security/hos) "adg" = ( -/obj/structure/window/reinforced/polarized{ - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "hos_room" - }, /obj/structure/cable{ icon_state = "2-8" }, @@ -474,34 +445,27 @@ d2 = 2; icon_state = "0-2" }, -/obj/structure/grille, /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; id_tag = "HoSPriv" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "hos_room" + }, /turf/simulated/floor/plating, /area/security/hos) "adh" = ( -/obj/structure/window/reinforced/polarized{ - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos_room" - }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, -/obj/structure/grille, /obj/machinery/door/poddoor/shutters/preopen{ dir = 1; id_tag = "HoSPriv" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "hos_room" + }, /turf/simulated/floor/plating, /area/security/hos) "adi" = ( @@ -512,15 +476,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/effect/spawner/window/reinforced/polarized{ id = "hos" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/security/hos) "adj" = ( @@ -1021,12 +979,6 @@ }, /area/security/medbay) "aey" = ( -/obj/machinery/requests_console{ - department = "Warden"; - departmentType = 7; - name = "Warden's Requests Console"; - pixel_x = -30 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -1088,11 +1040,6 @@ }, /area/security/hos) "aeE" = ( -/obj/machinery/firealarm{ - dir = 8; - name = "west fire alarm"; - pixel_x = -24 - }, /obj/effect/decal/warning_stripes/east, /obj/structure/rack, /obj/item/tank/internals/oxygen, @@ -1211,12 +1158,8 @@ /obj/structure/filingcabinet/chestdrawer, /obj/machinery/light_switch{ name = "west light switch"; - pixel_x = -24 - }, -/obj/machinery/firealarm{ - dir = 8; - name = "west fire alarm"; - pixel_x = -24 + pixel_x = -24; + pixel_y = -10 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -1652,26 +1595,16 @@ }, /area/security/customs) "agt" = ( -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos_room" - }, /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, -/obj/structure/grille, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "HoSPriv" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "hos_room" + }, /turf/simulated/floor/plating, /area/security/hos) "agu" = ( @@ -2127,6 +2060,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2172,8 +2108,13 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + icon_state = "pipe-j2s"; + name = "Brig Physician"; + sortType = 24 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2184,6 +2125,9 @@ dir = 1 }, /obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2194,6 +2138,9 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2492,14 +2439,6 @@ /turf/simulated/floor/plating, /area/security/permabrig) "ajj" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos_room" - }, /obj/structure/cable{ icon_state = "1-8" }, @@ -2510,10 +2449,12 @@ d2 = 8; icon_state = "0-8" }, -/obj/structure/grille, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "HoSPriv" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "hos_room" + }, /turf/simulated/floor/plating, /area/security/hos) "ajk" = ( @@ -2613,9 +2554,9 @@ /obj/item/stock_parts/cell/high/plus, /obj/effect/decal/warning_stripes/east, /obj/item/clothing/glasses/welding, -/obj/item/radio/intercom/department/security{ - name = "west station intercom (Security)"; - pixel_x = -28 +/obj/machinery/firealarm{ + name = "north fire alarm"; + pixel_y = 24 }, /turf/simulated/floor/plasteel, /area/security/podbay) @@ -2676,6 +2617,12 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "IAA Office"; + sortType = 29 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2703,8 +2650,7 @@ icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -2979,22 +2925,13 @@ }, /area/security/brig) "akt" = ( -/obj/structure/window/reinforced/polarized{ - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos_room" - }, /obj/structure/cable, -/obj/structure/grille, /obj/machinery/door/poddoor/shutters/preopen{ id_tag = "HoSPriv" }, +/obj/effect/spawner/window/reinforced/polarized{ + id = "hos_room" + }, /turf/simulated/floor/plating, /area/security/hos) "aku" = ( @@ -3048,6 +2985,10 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/decal/warning_stripes/blue/hollow, /obj/effect/decal/warning_stripes/east, +/obj/item/radio/intercom/department/security{ + name = "west station intercom (Security)"; + pixel_x = -28 + }, /turf/simulated/floor/plasteel, /area/security/podbay) "akz" = ( @@ -3125,19 +3066,9 @@ d2 = 2; icon_state = "0-2" }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; +/obj/effect/spawner/window/reinforced/polarized{ id = "hos" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/security/hos) "akK" = ( @@ -3168,26 +3099,13 @@ /turf/simulated/floor/plasteel, /area/security/permabrig) "akN" = ( -/obj/structure/window/reinforced/polarized{ - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos_room" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos_room" - }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, -/obj/structure/grille, +/obj/effect/spawner/window/reinforced/polarized{ + id = "hos_room" + }, /turf/simulated/floor/plating, /area/security/hos) "akO" = ( @@ -3294,11 +3212,9 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - icon_state = "pipe-j2s"; - name = "Brig Physician"; - sortType = 24 +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -3338,6 +3254,7 @@ name = "Security Blast Door"; opacity = 0 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/lawoffice) "ale" = ( @@ -3542,18 +3459,9 @@ d2 = 2; icon_state = "0-2" }, -/obj/structure/window/reinforced/polarized{ - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/effect/spawner/window/reinforced/polarized{ id = "hos" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/security/hos) "alD" = ( @@ -4591,28 +4499,16 @@ "aoe" = ( /obj/structure/table/reinforced, /obj/item/flashlight/lamp, -/turf/simulated/floor/plasteel{ - icon_state = "cult" - }, +/turf/simulated/floor/wood, /area/lawoffice) "aof" = ( /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/cable, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "hos" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/security/hos) "aog" = ( @@ -5011,15 +4907,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "hos" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/security/hos) "aoR" = ( @@ -5156,7 +5046,8 @@ /obj/item/pen, /obj/item/radio/intercom{ name = "west station intercom (General)"; - pixel_x = -28 + pixel_x = -28; + pixel_y = 5 }, /obj/item/radio/intercom/department/security{ name = "custom station intercom (Security)"; @@ -5290,10 +5181,6 @@ "apA" = ( /obj/machinery/vending/coffee, /obj/effect/decal/cleanable/dirt, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, /turf/simulated/floor/plasteel{ icon_state = "escape" }, @@ -5326,6 +5213,10 @@ name = "south bump"; pixel_y = -24 }, +/obj/machinery/light_switch{ + name = "east light switch"; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "escape" @@ -5391,18 +5282,9 @@ /area/security/prisonershuttle) "apQ" = ( /obj/structure/cable, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "hos" - }, -/obj/structure/window/reinforced/polarized{ +/obj/effect/spawner/window/reinforced/polarized{ id = "hos" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/security/hos) "apR" = ( @@ -6383,6 +6265,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -8205,6 +8090,10 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/carpet, /area/lawoffice) "avO" = ( @@ -8255,16 +8144,22 @@ /area/lawoffice) "avS" = ( /obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/lawoffice) "avT" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + name = "Internal Affairs Office"; + req_access = list(38) + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/wood, /area/security/lobby) "avV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -8276,11 +8171,6 @@ /turf/simulated/floor/plasteel, /area/security/lobby) "avW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Internal Affairs Office"; - req_access = list(38) - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -8547,6 +8437,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -8816,6 +8707,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/wood, /area/lawoffice) "axs" = ( @@ -8835,14 +8729,15 @@ /turf/simulated/floor/plasteel, /area/security/processing) "axu" = ( -/obj/machinery/newscaster{ - name = "south newscaster"; - pixel_y = -31 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "redcorner" +/obj/effect/spawner/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + density = 0; + icon_state = "open"; + id_tag = "lawyer"; + name = "Internal Affairs Privacy Shutters"; + opacity = 0 }, +/turf/simulated/floor/plating, /area/security/lobby) "axv" = ( /obj/effect/spawner/window/reinforced, @@ -10380,9 +10275,7 @@ /obj/item/storage/box/tapes{ pixel_y = 3 }, -/turf/simulated/floor/plasteel{ - icon_state = "cult" - }, +/turf/simulated/floor/wood, /area/lawoffice) "aAJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ @@ -11295,7 +11188,6 @@ }, /area/hallway/primary/fore) "aDn" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light{ dir = 4 }, @@ -11307,6 +11199,10 @@ c_tag = "Brig Cell Block A South"; dir = 8 }, +/obj/structure/disposalpipe/sortjunction{ + name = "Detective"; + sortType = 27 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "rampbottom" @@ -11322,6 +11218,10 @@ pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "rampbottom" @@ -11693,6 +11593,7 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -11772,6 +11673,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -12077,16 +11982,17 @@ }, /area/hallway/primary/fore) "aFx" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/junction{ - dir = 1 + dir = 8 }, /turf/simulated/floor/plasteel, -/area/hallway/primary/fore) +/area/hallway/primary/starboard/east) "aFy" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -12187,6 +12093,7 @@ name = "Security Blast Door"; opacity = 0 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -12201,22 +12108,6 @@ "aFJ" = ( /turf/simulated/wall/r_wall, /area/crew_quarters/dorms) -"aFK" = ( -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "holodeck" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "aFL" = ( /turf/simulated/wall/r_wall, /area/security/evidence) @@ -12457,6 +12348,7 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkblue" @@ -12936,14 +12828,20 @@ /turf/simulated/wall, /area/maintenance/fsmaint2) "aHQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkredcorners" + }, +/area/security/brig) "aHR" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -13006,6 +12904,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -13027,6 +12929,10 @@ /area/security/detectives_office) "aIe" = ( /obj/item/flag/clown, +/obj/item/radio/intercom{ + name = "west station intercom (General)"; + pixel_x = -28 + }, /turf/simulated/floor/wood, /area/clownoffice) "aIf" = ( @@ -13122,10 +13028,6 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, /turf/simulated/floor/carpet/arcade, /area/crew_quarters/arcade) "aIq" = ( @@ -13142,7 +13044,12 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "Magistrate's Office"; + sortType = 28 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/fore) "aIs" = ( @@ -13468,13 +13375,17 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint) "aJh" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/area/hallway/primary/fore) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/starboard/west) "aJi" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -13482,10 +13393,6 @@ /turf/simulated/floor/carpet, /area/crew_quarters/courtroom) "aJj" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkred" @@ -13899,17 +13806,17 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/fore) "aKA" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, +/obj/structure/table/wood/poker, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkred" }, /area/hallway/primary/fore) "aKB" = ( -/obj/machinery/dnaforensics, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkblue" @@ -13989,6 +13896,10 @@ /obj/structure/chair/comfy/black{ dir = 1 }, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, /turf/simulated/floor/carpet/arcade, /area/crew_quarters/arcade) "aKK" = ( @@ -14411,8 +14322,11 @@ /area/crew_quarters/courtroom) "aLX" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "blue" @@ -14437,6 +14351,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" @@ -14450,6 +14367,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "bluecorner" @@ -14659,9 +14579,7 @@ /obj/item/pen, /obj/item/paper_bin/nanotrasen, /obj/effect/spawner/lootdrop/officetoys, -/turf/simulated/floor/plasteel{ - icon_state = "cult" - }, +/turf/simulated/floor/wood, /area/lawoffice) "aMP" = ( /obj/machinery/atmospherics/pipe/simple/visible/purple{ @@ -14935,9 +14853,8 @@ /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "aNM" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" @@ -15127,17 +15044,6 @@ }, /turf/simulated/floor/carpet/arcade, /area/crew_quarters/arcade) -"aOh" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "aOj" = ( /obj/structure/cable{ icon_state = "1-4" @@ -17058,12 +16964,6 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/dorms) -"aTH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel, -/area/hallway/primary/central/ne) "aTI" = ( /obj/structure/chair/sofa, /obj/structure/window/reinforced{ @@ -17108,6 +17008,7 @@ name = "Coroner"; req_access = list(5) }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -17165,6 +17066,10 @@ /area/medical/reception) "aTT" = ( /obj/item/twohanded/required/kirbyplants, +/obj/machinery/vending/wallmed{ + name = "West Emergency NanoMed"; + pixel_x = -25 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whiteblue" @@ -17537,7 +17442,6 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint) "aVb" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -18269,8 +18173,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/sortjunction{ - dir = 8; - icon_state = "pipe-j2s"; + dir = 4; name = "Library"; sortType = 16 }, @@ -18937,6 +18840,7 @@ "aYl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -19150,17 +19054,13 @@ /turf/simulated/floor/carpet, /area/crew_quarters/mrchangs) "aYK" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" + dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/fsmaint2) +/turf/simulated/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/chapel/main) "aYL" = ( /obj/machinery/light{ dir = 1 @@ -19610,6 +19510,10 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) "aZW" = ( @@ -19758,12 +19662,9 @@ layer = 4; pixel_y = 32 }, -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 +/obj/machinery/light{ + dir = 1 }, -/obj/item/stack/packageWrap, /turf/simulated/floor/wood, /area/library) "baq" = ( @@ -19836,10 +19737,6 @@ name = "north station intercom (General)"; pixel_y = 28 }, -/obj/structure/table/wood, -/obj/item/dice/d20, -/obj/item/dice, -/obj/item/storage/box/characters, /turf/simulated/floor/wood, /area/library) "baw" = ( @@ -19861,10 +19758,11 @@ }, /area/ai_monitored/storage/eva) "bax" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/wood, -/area/library) +/obj/machinery/dnaforensics, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/security/detectives_office) "bay" = ( /turf/simulated/floor/plasteel{ dir = 5; @@ -20210,6 +20108,10 @@ /area/medical/morgue) "bbB" = ( /obj/item/flag/mime, +/obj/item/radio/intercom{ + name = "west station intercom (General)"; + pixel_x = -28 + }, /turf/simulated/floor/plasteel{ icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" @@ -20429,12 +20331,6 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) "bcb" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - icon_state = "pipe-j2s"; - name = "Chapel"; - sortType = 17 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -20444,6 +20340,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) "bcc" = ( @@ -20496,29 +20395,23 @@ }, /area/maintenance/livingcomplex) "bch" = ( -/obj/structure/chair/office/dark, /obj/machinery/camera{ c_tag = "Library North" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/wood, /area/library) "bci" = ( /obj/structure/chair/office/dark, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/wood, /area/library) "bcj" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Chapel" }, -/turf/simulated/floor/wood, -/area/library) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/chapel/main) "bck" = ( /obj/effect/spawner/window/reinforced, /obj/structure/disposalpipe/segment{ @@ -20585,11 +20478,14 @@ }, /area/chapel/office) "bcs" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/wood, -/area/library) +/turf/simulated/floor/plasteel, +/area/hallway/primary/aft) "bct" = ( /obj/structure/cable{ icon_state = "1-2" @@ -20601,7 +20497,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 2; + dir = 8; icon_state = "pipe-c" }, /turf/simulated/floor/plating, @@ -20978,10 +20874,6 @@ /area/hallway/secondary/entry) "bdo" = ( /obj/structure/closet/secure_closet/clown, -/obj/item/radio/intercom{ - name = "west station intercom (General)"; - pixel_x = -28 - }, /turf/simulated/floor/wood, /area/clownoffice) "bdq" = ( @@ -21007,10 +20899,6 @@ /area/clownoffice) "bds" = ( /obj/structure/closet/secure_closet/mime, -/obj/item/radio/intercom{ - name = "west station intercom (General)"; - pixel_x = -28 - }, /turf/simulated/floor/plasteel{ icon_regular_floor = "yellowsiding"; icon_state = "tranquillite" @@ -21476,6 +21364,7 @@ /area/shuttle/arrival/station) "bek" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/library) "bel" = ( @@ -21504,17 +21393,19 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/locker) "beo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/structure/chair/office/dark{ - dir = 8 + dir = 1 }, /turf/simulated/floor/wood, /area/library) "bep" = ( -/obj/machinery/newscaster{ - name = "east newscaster"; - pixel_x = 32; - pixel_y = 1 - }, +/obj/structure/table/wood, +/obj/item/dice/d20, +/obj/item/dice, +/obj/item/storage/box/characters, /turf/simulated/floor/wood, /area/library) "beq" = ( @@ -22227,15 +22118,10 @@ icon_state = "darkblue" }, /area/chapel/main) -"bfT" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/library) "bfU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/library) "bfV" = ( @@ -22883,13 +22769,11 @@ /turf/simulated/floor/wood, /area/library) "bhx" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/library) "bhy" = ( @@ -23174,6 +23058,11 @@ dir = 8 }, /obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/stack/packageWrap, /turf/simulated/floor/wood, /area/library) "bii" = ( @@ -23184,8 +23073,6 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/library) "bio" = ( @@ -23227,16 +23114,17 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + name = "Chapel Junction"; + sortType = 17 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -23267,6 +23155,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -23298,6 +23190,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -23667,12 +23562,11 @@ /turf/simulated/floor/plating, /area/maintenance/fpmaint) "bjk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/machinery/atmospherics/unary/outlet_injector/on{ + dir = 1 }, -/turf/simulated/floor/plating, -/area/maintenance/fsmaint2) +/turf/simulated/floor/plating/airless, +/area/space) "bjm" = ( /obj/structure/chair/sofa/corp/left, /turf/simulated/floor/carpet/black, @@ -23838,9 +23732,6 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -24019,6 +23910,9 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/west) "bki" = ( @@ -24057,12 +23951,12 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/port) "bkn" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /obj/structure/chair/office/dark{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /turf/simulated/floor/wood, /area/library) "bko" = ( @@ -24075,6 +23969,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/west) "bkp" = ( @@ -24082,6 +23979,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/library) "bkr" = ( @@ -24100,12 +23998,18 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/central/nw) "bkt" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1450; + master_tag = "sci_maint"; + name = "interior access button"; + pixel_x = -28; + pixel_y = -5; + req_access = list(13) }, +/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating, -/area/maintenance/fsmaint2) +/area/maintenance/asmaint2) "bku" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -24117,6 +24021,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/west) "bkw" = ( @@ -24173,9 +24080,6 @@ /obj/item/stack/rods{ amount = 10 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/spawner/random_spawners/grille_maybe, /obj/structure/cable{ icon_state = "1-2" @@ -24201,21 +24105,23 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/east) "bkI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint2) "bkJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 @@ -24249,11 +24155,9 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/east) "bkN" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/fsmaint2) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/carpet, +/area/lawoffice) "bkR" = ( /obj/machinery/door/poddoor{ density = 0; @@ -24394,6 +24298,7 @@ name = "west fire alarm"; pixel_x = -24 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -24536,6 +24441,7 @@ name = "west station intercom (General)"; pixel_x = -28 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -25119,6 +25025,7 @@ name = "west bump"; pixel_x = -24 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -25202,6 +25109,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -25408,7 +25316,6 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) "bnn" = ( @@ -25792,15 +25699,16 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) "bop" = ( @@ -25958,9 +25866,6 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -26454,12 +26359,6 @@ /obj/machinery/vending/chinese, /turf/simulated/floor/carpet, /area/crew_quarters/mrchangs) -"bpR" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/simulated/floor/carpet, -/area/crew_quarters/mrchangs) "bpS" = ( /obj/machinery/kitchen_machine/candy_maker, /turf/simulated/floor/plasteel{ @@ -26731,6 +26630,10 @@ "bqD" = ( /obj/structure/table/wood, /obj/machinery/fishtank/bowl, +/obj/item/radio/intercom{ + name = "west station intercom (General)"; + pixel_x = -28 + }, /turf/simulated/floor/wood, /area/civilian/pet_store) "bqE" = ( @@ -26797,6 +26700,7 @@ "bqM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/library) "bqN" = ( @@ -27127,6 +27031,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -27483,10 +27388,6 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bsQ" = ( -/obj/item/radio/intercom{ - name = "east station intercom (General)"; - pixel_x = 28 - }, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -27652,6 +27553,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/black, /area/crew_quarters/bar/atrium) "btp" = ( @@ -27795,6 +27697,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/carpet, /area/library) "btW" = ( @@ -27804,16 +27709,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/carpet, /area/library) -"btX" = ( -/obj/structure/extinguisher_cabinet{ - name = "south extinguisher cabinet"; - pixel_y = -30 - }, -/obj/machinery/light, -/turf/simulated/floor/plasteel, -/area/hallway/primary/starboard/west) "btY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -27821,6 +27722,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood, /area/library) "btZ" = ( @@ -27830,6 +27735,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/wood, /area/library) "bua" = ( @@ -27981,6 +27889,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/library) "bux" = ( @@ -28012,6 +27921,7 @@ c_tag = "Chapel West"; dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -28135,7 +28045,7 @@ dir = 6 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-4" }, /turf/simulated/floor/carpet, /area/crew_quarters/mrchangs) @@ -28167,6 +28077,7 @@ "buQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/black, /area/crew_quarters/bar/atrium) "buR" = ( @@ -28226,6 +28137,7 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/chapel/main) "buZ" = ( @@ -29532,9 +29444,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -29550,10 +29459,6 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, @@ -29580,9 +29485,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -29691,9 +29593,6 @@ name = "Bridge"; req_access = list(19) }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -29705,7 +29604,6 @@ "byr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/hallway/primary/central/se) @@ -29723,9 +29621,6 @@ name = "Bridge"; req_access = list(19) }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-8" }, @@ -29742,17 +29637,22 @@ /turf/simulated/floor/plasteel, /area/bridge) "byu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/central/ne) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/explab) "byv" = ( /obj/machinery/hologram/holopad, /obj/machinery/firealarm{ @@ -29773,10 +29673,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/ne) "byy" = ( @@ -29800,9 +29696,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/ne) "byB" = ( @@ -29944,7 +29837,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/east) "byR" = ( @@ -30032,6 +29924,9 @@ name = "south light switch"; pixel_y = -24 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -30150,6 +30045,9 @@ /area/hallway/secondary/exit) "bzo" = ( /obj/effect/turf_decal/siding/wood/corner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) "bzp" = ( @@ -30157,6 +30055,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/library) "bzr" = ( @@ -30649,7 +30548,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -30698,11 +30596,9 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) "bAW" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -30724,6 +30620,10 @@ "bAY" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/carpet, /area/library) "bAZ" = ( @@ -31230,7 +31130,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ id_tag = "captainofficedoor"; @@ -31332,7 +31231,6 @@ /turf/simulated/floor/wood, /area/crew_quarters/captain) "bCN" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -31363,7 +31261,10 @@ /turf/simulated/floor/carpet, /area/crew_quarters/captain) "bCR" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/simulated/floor/wood, /area/library) "bCS" = ( @@ -31405,10 +31306,6 @@ pixel_x = 6; pixel_y = 6 }, -/obj/machinery/vending/wallmed{ - name = "West Emergency NanoMed"; - pixel_x = -25 - }, /obj/item/roller, /turf/simulated/floor/plasteel{ dir = 8; @@ -31816,10 +31713,6 @@ /turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) "bEe" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ icon_state = "1-4" }, @@ -31828,13 +31721,16 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bEg" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/central/ne) "bEh" = ( @@ -31941,6 +31837,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -31960,7 +31860,7 @@ pixel_y = -24 }, /obj/structure/disposalpipe/trunk{ - dir = 1 + dir = 8 }, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) @@ -31988,7 +31888,7 @@ req_access = list(4,5) }, /obj/structure/disposalpipe/segment{ - dir = 1; + dir = 8; icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ @@ -32108,6 +32008,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bFi" = ( @@ -32117,7 +32018,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/central/se) "bFj" = ( @@ -32128,13 +32028,19 @@ /area/hallway/primary/starboard/west) "bFk" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel, -/area/hallway/primary/starboard/east) +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkredcorners" + }, +/area/security/brig) "bFl" = ( /obj/structure/cable{ icon_state = "1-2" @@ -32403,10 +32309,10 @@ }, /area/crew_quarters/toilet) "bFT" = ( +/obj/effect/landmark/event/revenantspawn, /obj/structure/morgue{ dir = 8 }, -/obj/effect/landmark/event/revenantspawn, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -32931,6 +32837,7 @@ "bHm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bHo" = ( @@ -32940,7 +32847,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/central/se) "bHp" = ( @@ -33042,13 +32948,12 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/east) "bHD" = ( @@ -33065,6 +32970,11 @@ /area/medical/morgue) "bHG" = ( /obj/structure/filingcabinet/chestdrawer/autopsy, +/obj/machinery/firealarm{ + dir = 1; + name = "south fire alarm"; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -33079,26 +32989,22 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Sci Robotics"; - sortType = 24 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/east) "bHJ" = ( -/obj/machinery/firealarm{ - dir = 1; - name = "south fire alarm"; - pixel_y = -24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" +/obj/machinery/suit_storage_unit/atmos, +/obj/item/radio/intercom{ + name = "west station intercom (General)"; + pixel_x = -28 }, -/area/medical/morgue) +/turf/simulated/floor/plasteel, +/area/atmos) "bHK" = ( /obj/structure/chair/office/dark, /obj/effect/landmark/start/coroner, @@ -33152,12 +33058,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/east) "bHQ" = ( @@ -33167,8 +33073,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/structure/disposalpipe/junction{ - icon_state = "pipe-y" +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/east) @@ -33580,6 +33487,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bIQ" = ( @@ -33589,6 +33500,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bIR" = ( @@ -33598,7 +33513,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/central/se) "bIT" = ( @@ -33905,6 +33819,7 @@ dir = 1 }, /obj/item/hand_tele, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bJN" = ( @@ -34040,7 +33955,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/starboard/east) "bKc" = ( @@ -34275,6 +34189,7 @@ /obj/effect/landmark/start/captain, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bKM" = ( @@ -34287,7 +34202,6 @@ "bKN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/central/se) "bKO" = ( @@ -34325,7 +34239,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/assembly/chargebay) "bKS" = ( @@ -34436,12 +34349,11 @@ }, /area/medical/morgue) "bLl" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel, -/area/assembly/chargebay) +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/chapel/main) "bLo" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -34711,7 +34623,6 @@ /obj/item/multitool{ pixel_x = 3 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/assembly/robotics) "bLU" = ( @@ -34759,6 +34670,10 @@ "bMb" = ( /obj/machinery/light, /obj/effect/decal/warning_stripes/south, +/obj/item/radio/intercom{ + name = "south station intercom (General)"; + pixel_y = -28 + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "bMg" = ( @@ -34946,6 +34861,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bMM" = ( @@ -34986,6 +34905,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bMP" = ( @@ -35001,6 +34923,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bMQ" = ( @@ -35011,6 +34936,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bMR" = ( @@ -35027,6 +34955,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bMS" = ( @@ -35042,6 +34973,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood, /area/crew_quarters/captain) "bMT" = ( @@ -35057,19 +34992,12 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/bluegrid, /area/assembly/chargebay) "bMV" = ( /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /turf/simulated/floor/bluegrid, /area/assembly/chargebay) "bMW" = ( @@ -35082,9 +35010,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/assembly/chargebay) "bMX" = ( @@ -35117,8 +35042,7 @@ /area/medical/biostorage) "bMZ" = ( /obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -35131,9 +35055,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/assembly/chargebay) "bNc" = ( @@ -35146,10 +35067,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -35177,9 +35094,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -35213,7 +35127,6 @@ /obj/item/stack/cable_coil, /obj/item/flash, /obj/item/flash, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/assembly/robotics) "bNj" = ( @@ -35257,20 +35170,13 @@ }, /area/medical/research) "bNl" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Sci RD Office 2"; - sortType = 13 - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" +/obj/structure/window/reinforced, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, -/area/medical/research) +/turf/simulated/floor/wood, +/area/lawoffice) "bNm" = ( /obj/machinery/camera{ c_tag = "Research Access"; @@ -35345,15 +35251,17 @@ }, /area/toxins/lab) "bNq" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "whitehall" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/area/medical/research) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/fore) "bNr" = ( /obj/machinery/light{ dir = 4 @@ -35839,6 +35747,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/crew_quarters/captain) "bOz" = ( @@ -36068,7 +35977,6 @@ }, /area/medical/morgue) "bOX" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -36245,7 +36153,7 @@ "bPn" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ - dir = 1 + dir = 4 }, /turf/simulated/floor/plasteel, /area/assembly/robotics) @@ -36286,7 +36194,6 @@ /turf/simulated/floor/transparent/glass/reinforced, /area/hallway/secondary/exit) "bPx" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -36777,10 +36684,6 @@ }, /area/medical/biostorage) "bQF" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkblue" @@ -36790,18 +36693,11 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/medical/morgue) "bQH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/light/small, /turf/simulated/floor/plasteel{ icon_state = "darkblue" @@ -36856,6 +36752,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/crew_quarters/captain) "bQO" = ( @@ -36863,7 +36760,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/central/se) "bQP" = ( @@ -37019,7 +36915,6 @@ name = "Morgue"; req_access = list(5,6) }, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -37174,6 +37069,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/assembly/robotics) "bRt" = ( @@ -37196,6 +37094,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/assembly/robotics) "bRz" = ( @@ -37205,6 +37107,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -37240,6 +37145,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/assembly/robotics) "bRH" = ( @@ -37276,6 +37184,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -37615,7 +37527,6 @@ }, /area/medical/cloning) "bSD" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light_switch{ name = "east light switch"; pixel_x = 24 @@ -38035,7 +37946,6 @@ /turf/simulated/floor/carpet, /area/crew_quarters/captain/bedroom) "bTC" = ( -/obj/effect/spawner/window/reinforced, /obj/structure/sign/securearea{ desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; @@ -38046,7 +37956,6 @@ d2 = 4; icon_state = "0-4" }, -/obj/structure/cable, /obj/machinery/door/poddoor/shutters{ density = 0; dir = 8; @@ -38055,6 +37964,12 @@ name = "Privacy Shutters"; opacity = 0 }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/crew_quarters/heads) "bTE" = ( @@ -38074,6 +37989,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/crew_quarters/captain) "bTG" = ( @@ -38221,7 +38137,6 @@ }, /area/medical/cloning) "bUb" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -38242,6 +38157,7 @@ "bUe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -38749,6 +38665,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/teleporter) "bVs" = ( @@ -38992,6 +38909,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/teleporter) "bVS" = ( @@ -38999,7 +38917,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/central/se) "bVT" = ( @@ -39796,10 +39713,6 @@ }, /area/medical/sleeper) "bXF" = ( -/obj/machinery/light_switch{ - name = "west light switch"; - pixel_x = -24 - }, /obj/machinery/sleeper{ dir = 4 }, @@ -40034,6 +39947,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/teleporter) "bXZ" = ( @@ -40045,6 +39961,10 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/teleporter) "bYa" = ( @@ -40054,10 +39974,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/se) "bYb" = ( @@ -40070,6 +39993,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "blue" @@ -40151,6 +40077,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -41100,13 +41027,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-y" - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -41237,6 +41164,7 @@ "cax" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitered" @@ -41282,7 +41210,7 @@ /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; - name = "Sci RD Office 2"; + name = "RD Office"; sortType = 13 }, /turf/simulated/floor/plasteel{ @@ -42035,8 +41963,10 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Robotics Junction"; + sortType = 14 }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -42482,6 +42412,10 @@ /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 1 }, +/obj/machinery/firealarm{ + name = "north fire alarm"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel/dark/telecomms, /area/toxins/server) "ccW" = ( @@ -42965,12 +42899,19 @@ name = "north bump"; pixel_y = 24 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/south) "cet" = ( /obj/machinery/ai_status_display{ pixel_y = 32 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/south) "ceu" = ( @@ -42978,6 +42919,9 @@ name = "north station intercom (General)"; pixel_y = 28 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/south) "cev" = ( @@ -42987,6 +42931,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/south) "cew" = ( @@ -42994,6 +42941,9 @@ pixel_y = 32 }, /obj/effect/decal/warning_stripes/northeastcorner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/south) "cex" = ( @@ -43001,6 +42951,10 @@ layer = 4; pixel_y = 32 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/south) "cey" = ( @@ -43008,6 +42962,9 @@ pixel_y = 32 }, /obj/effect/decal/warning_stripes/northwestcorner, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/south) "cez" = ( @@ -43356,9 +43313,6 @@ /area/hallway/primary/central/se) "cfC" = ( /obj/structure/table/glass, -/obj/machinery/alarm{ - pixel_y = 24 - }, /obj/item/reagent_containers/iv_bag/salglu, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" @@ -43455,6 +43409,10 @@ "cfL" = ( /obj/structure/table/glass, /obj/item/storage/toolbox/surgery, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -43629,13 +43587,6 @@ icon_state = "dark" }, /area/medical/cmo) -"cfY" = ( -/obj/item/radio/intercom/department/security{ - name = "north station intercom (Security)"; - pixel_y = 25 - }, -/turf/simulated/floor/plasteel, -/area/security/main) "cfZ" = ( /obj/machinery/light/small{ dir = 4 @@ -43725,9 +43676,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, /obj/structure/cable{ icon_state = "2-8" }, @@ -43737,6 +43685,10 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/central/south) "cgj" = ( @@ -44292,20 +44244,12 @@ }, /area/medical/medbreak) "chE" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, /obj/machinery/photocopier, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, /area/medical/cmo) "chF" = ( -/obj/item/radio/intercom{ - name = "west station intercom (General)"; - pixel_x = -28 - }, /obj/effect/decal/cleanable/dirt, /obj/item/storage/box/gloves{ pixel_x = 3; @@ -44386,9 +44330,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-y" +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -44894,12 +44838,10 @@ /turf/simulated/floor/plating, /area/maintenance/genetics) "cjb" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) +/obj/structure/chair/stool, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "cjc" = ( /obj/structure/sign/poster/random{ pixel_x = 32 @@ -45199,11 +45141,6 @@ /turf/simulated/floor/engine, /area/toxins/explab_chamber) "cjJ" = ( -/obj/machinery/firealarm{ - dir = 1; - name = "south fire alarm"; - pixel_y = -24 - }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, @@ -46083,9 +46020,9 @@ "cmh" = ( /obj/structure/closet/secure_closet/ntrep, /obj/machinery/firealarm{ - dir = 4; - name = "east fire alarm"; - pixel_x = 24 + dir = 1; + name = "south fire alarm"; + pixel_y = -24 }, /turf/simulated/floor/wood, /area/ntrep) @@ -46460,10 +46397,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/radio/intercom{ - name = "north station intercom (General)"; - pixel_y = 28 - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitegreen" @@ -48974,13 +48907,13 @@ }, /area/medical/virology/lab) "cur" = ( -/obj/item/radio/intercom{ - name = "west station intercom (General)"; - pixel_x = -28 - }, /obj/structure/closet/l3closet, /obj/item/clothing/mask/gas, /obj/effect/decal/warning_stripes/southwest, +/obj/item/radio/intercom{ + name = "south station intercom (General)"; + pixel_y = -28 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -48993,6 +48926,10 @@ on = 1 }, /obj/effect/decal/warning_stripes/southeast, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -49131,6 +49068,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -49153,6 +49093,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -49172,6 +49115,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -49182,6 +49128,9 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -49198,6 +49147,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -49400,6 +49352,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -49416,6 +49371,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -49706,7 +49664,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment{ - dir = 2; + dir = 8; icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ @@ -50025,7 +49983,6 @@ /turf/simulated/floor/plating, /area/maintenance/genetics) "cxc" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, @@ -50354,20 +50311,12 @@ /turf/simulated/wall, /area/toxins/xenobiology) "cxO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, +/obj/effect/turf_decal/siding/wood, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/genetics) +/turf/simulated/floor/wood/fancy/cherry, +/area/crew_quarters/bar/atrium) "cxP" = ( /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ @@ -50381,10 +50330,6 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -50400,9 +50345,6 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -50440,9 +50382,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -50973,9 +50912,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -52146,10 +52082,6 @@ }, /area/toxins/misc_lab) "cCp" = ( -/obj/item/radio/intercom{ - name = "west station intercom (General)"; - pixel_x = -28 - }, /obj/structure/dispenser, /turf/simulated/floor/plasteel, /area/atmos) @@ -53457,19 +53389,9 @@ d2 = 2; icon_state = "0-2" }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "ceoffice" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/engine/chiefs_office) "cFD" = ( @@ -53726,7 +53648,8 @@ dir = 1 }, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) @@ -53809,18 +53732,12 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cGl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-j2" +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) +/turf/simulated/floor/carpet, +/area/library) "cGm" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -53835,9 +53752,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cGo" = ( @@ -54055,6 +53969,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "Mechanic"; + sortType = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "yellow" }, @@ -54212,15 +54132,9 @@ d2 = 8; icon_state = "1-8" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "ceoffice" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/engine/chiefs_office) "cHb" = ( @@ -54257,7 +54171,7 @@ /obj/item/reagent_containers/food/snacks/meat, /obj/item/reagent_containers/food/snacks/meat/corgi, /obj/item/reagent_containers/food/snacks/meat/corgi, -/obj/item/reagent_containers/food/snacks/meat/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, /obj/item/kitchen/knife, /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plating, @@ -54297,19 +54211,9 @@ /area/hallway/primary/aft) "cHk" = ( /obj/structure/cable/yellow, -/obj/structure/window/reinforced/polarized{ - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "ceoffice" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/engine/chiefs_office) "cHl" = ( @@ -54483,21 +54387,18 @@ /turf/simulated/floor/plating, /area/assembly/assembly_line) "cHG" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) -"cHI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/disposalpipe/sortjunction{ - dir = 8; - icon_state = "pipe-j2s"; - name = "Engineering Main"; - sortType = 4 +/turf/simulated/floor/carpet, +/area/library) +"cHI" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) +/turf/simulated/floor/carpet, +/area/chapel/main) "cHJ" = ( /obj/structure/reagent_dispensers/watertank, /obj/structure/sign/poster/official/random{ @@ -54646,6 +54547,10 @@ /turf/simulated/floor/plasteel, /area/engine/break_room) "cHW" = ( +/obj/item/radio/intercom{ + name = "west station intercom (General)"; + pixel_x = -28 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitegreen" @@ -54866,18 +54771,9 @@ icon_state = "1-4" }, /obj/structure/cable/yellow, -/obj/structure/window/reinforced/polarized{ - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "ceoffice" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/engine/chiefs_office) "cIx" = ( @@ -54914,18 +54810,9 @@ d2 = 8; icon_state = "0-8" }, -/obj/structure/window/reinforced/polarized{ - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; +/obj/effect/spawner/window/reinforced/polarized{ id = "ceoffice" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/engine/chiefs_office) "cIz" = ( @@ -55075,6 +54962,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/engineering) "cIQ" = ( @@ -55243,15 +55131,20 @@ /turf/simulated/floor/plasteel, /area/assembly/assembly_line) "cJk" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) +/turf/simulated/floor/plating, +/area/maintenance/engineering) "cJl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -55265,10 +55158,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cJn" = ( @@ -55951,6 +55841,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/engineering) "cKL" = ( @@ -55960,6 +55851,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cKM" = ( @@ -56702,10 +56594,6 @@ /turf/simulated/floor/plasteel, /area/maintenance/asmaint) "cMG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "yellowcorner" @@ -56908,13 +56796,19 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "cNf" = ( -/obj/structure/grille, -/obj/structure/window/reinforced{ - dir = 5; - max_integrity = 1e+007 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "NTR Office"; + sortType = 26 + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/central/south) "cNg" = ( /obj/structure/sign/barsign, /turf/simulated/wall, @@ -57220,6 +57114,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "yellow" }, @@ -57230,6 +57127,10 @@ icon_state = "1-8" }, /obj/item/twohanded/required/kirbyplants, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, @@ -57454,6 +57355,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/engineering) "cOr" = ( @@ -57472,6 +57374,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/engineering) "cOt" = ( @@ -57610,6 +57513,7 @@ codes_txt = "patrol;next_patrol=AIE"; location = "AftH" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cOL" = ( @@ -58100,10 +58004,13 @@ }, /area/toxins/xenobiology) "cPL" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cautioncorner" @@ -58938,6 +58845,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/engineering) "cRG" = ( @@ -58981,6 +58892,12 @@ dir = 10 }, /obj/structure/grille/broken, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "Engineering Main"; + sortType = 4 + }, /turf/simulated/floor/plating, /area/maintenance/engineering) "cRJ" = ( @@ -59003,15 +58920,9 @@ d2 = 4; icon_state = "0-4" }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "ceoffice" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/engine/chiefs_office) "cRK" = ( @@ -59607,12 +59518,14 @@ /turf/simulated/floor/carpet, /area/crew_quarters/mrchangs) "cSX" = ( -/obj/structure/chair/wood, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/extinguisher_cabinet{ + name = "east extinguisher cabinet"; + pixel_x = 27 }, -/turf/simulated/floor/carpet, -/area/crew_quarters/mrchangs) +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/gateway) "cSZ" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -60662,6 +60575,10 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/engineering) "cUZ" = ( @@ -61140,22 +61057,9 @@ d2 = 4; icon_state = "0-4" }, -/obj/structure/window/reinforced/polarized{ - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "ceoffice" }, -/obj/structure/grille, /turf/simulated/floor/plating, /area/engine/chiefs_office) "cVV" = ( @@ -61512,12 +61416,15 @@ }, /area/engine/engineering) "cWJ" = ( +/obj/item/twohanded/required/kirbyplants, /obj/structure/disposalpipe/segment{ - dir = 2; + dir = 1; icon_state = "pipe-c" }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/chapel/main) "cWK" = ( /obj/effect/decal/warning_stripes/east, /obj/structure/closet/radiation, @@ -61880,7 +61787,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/asmaint2) "cXA" = ( @@ -62330,9 +62236,15 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "cYw" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "cautioncorner" + }, +/area/hallway/primary/aft) "cYx" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/heat_exchanging, @@ -62519,8 +62431,9 @@ dir = 1; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/area/maintenance/asmaint) "cYS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -62772,11 +62685,9 @@ }, /area/hallway/secondary/exit) "cZE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, +/area/lawoffice) "cZF" = ( /obj/structure/closet/cardboard{ icon_closed = "cardboard_engineering"; @@ -63028,12 +62939,16 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "daj" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass{ + name = "Chapel Office"; + req_access = list(22) }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/chapel/office) "dak" = ( /obj/machinery/camera{ c_tag = "Departure Lounge South"; @@ -63114,12 +63029,9 @@ /turf/simulated/wall/r_wall, /area/engine/engineering) "day" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/carpet, +/area/chapel/main) "daA" = ( /obj/structure/cable{ icon_state = "4-8" @@ -64077,10 +63989,10 @@ /turf/space, /area/solar/starboard) "ddC" = ( -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" +/obj/structure/transit_tube/junction{ + dir = 4 }, -/obj/structure/lattice/catwalk, +/obj/structure/lattice, /turf/space, /area/space) "ddD" = ( @@ -64864,9 +64776,9 @@ name = "north fire alarm"; pixel_y = 24 }, -/obj/structure/transit_tube{ - dir = 4; - icon_state = "Block" +/obj/structure/transit_tube/station, +/obj/structure/transit_tube_pod{ + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -64885,6 +64797,9 @@ name = "north station intercom (General)"; pixel_y = 28 }, +/obj/structure/transit_tube/cap{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "blue" @@ -64892,7 +64807,7 @@ /area/maintenance/atmospherics) "dfD" = ( /obj/effect/spawner/window/reinforced, -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plating, /area/maintenance/atmospherics) "dfE" = ( @@ -64900,10 +64815,7 @@ layer = 4; pixel_y = 32 }, -/obj/structure/transit_tube/station, -/obj/structure/transit_tube_pod{ - dir = 8 - }, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -65208,11 +65120,6 @@ }, /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/mug, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/structure/cable, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -65387,6 +65294,12 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 26 + }, +/obj/structure/cable, /turf/simulated/floor/wood, /area/crew_quarters/mrchangs) "dhr" = ( @@ -66461,10 +66374,6 @@ /obj/machinery/camera{ c_tag = "Central Hallway North-West" }, -/obj/structure/extinguisher_cabinet{ - name = "north extinguisher cabinet"; - pixel_y = 30 - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "bluecorner" @@ -66474,6 +66383,10 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/extinguisher_cabinet{ + name = "north extinguisher cabinet"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -66524,10 +66437,6 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/item/radio/intercom{ - name = "east station intercom (General)"; - pixel_x = 28 - }, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/structure/cable{ icon_state = "1-2" @@ -66763,10 +66672,6 @@ dir = 8 }, /obj/effect/landmark/join_late_cyborg, -/obj/item/radio/intercom{ - name = "west station intercom (General)"; - pixel_x = -28 - }, /obj/machinery/computer/cryopod/robot{ pixel_x = -30; pixel_y = 30 @@ -66914,8 +66819,8 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "dla" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/asmaint) @@ -67164,18 +67069,16 @@ }, /area/aisat/maintenance) "dlN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/junction{ + icon_state = "pipe-y" }, /turf/simulated/floor/plating, /area/maintenance/asmaint) "dlO" = ( -/obj/structure/chair/stool, -/obj/effect/spawner/lootdrop/maintenance, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/plating, /area/maintenance/asmaint) "dlP" = ( @@ -67372,13 +67275,9 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "dmq" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/obj/item/twohanded/required/kirbyplants, +/turf/simulated/floor/wood, +/area/lawoffice) "dmr" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance/double, @@ -67402,10 +67301,12 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "dmu" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/maintenance/asmaint2) +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel, +/area/assembly/robotics) "dmv" = ( /obj/structure/cable{ icon_state = "4-8" @@ -67494,9 +67395,11 @@ /turf/simulated/floor/engine/insulated, /area/maintenance/turbine) "dmF" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/visible/purple, -/turf/space, +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/plating/airless, /area/maintenance/asmaint) "dmG" = ( /obj/effect/spawner/window/reinforced, @@ -67555,9 +67458,10 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "dmN" = ( +/obj/effect/spawner/window/reinforced, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating/airless, -/area/maintenance/asmaint2) +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "dmO" = ( /obj/structure/cable{ d2 = 2; @@ -67639,12 +67543,13 @@ }, /area/aisat) "dmW" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, +/obj/structure/lattice, /turf/space, /area/space) "dmX" = ( -/obj/structure/transit_tube{ - icon_state = "E-W-Pass" +/obj/structure/transit_tube/junction{ + dir = 8 }, /obj/structure/lattice, /turf/space, @@ -67666,12 +67571,12 @@ }, /area/turret_protected/ai) "dmZ" = ( -/obj/structure/transit_tube, /obj/effect/spawner/window/reinforced, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plating, /area/turret_protected/aisat_interior) "dna" = ( -/obj/structure/transit_tube, +/obj/structure/transit_tube/horizontal, /turf/simulated/floor/plating, /area/turret_protected/aisat_interior) "dnb" = ( @@ -67704,10 +67609,7 @@ }, /area/turret_protected/ai) "dng" = ( -/obj/machinery/atmospherics/unary/outlet_injector/on{ - dir = 1 - }, -/turf/simulated/floor/plating/airless, +/turf/space, /area/maintenance/asmaint) "dni" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -67767,21 +67669,18 @@ /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 }, +/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating, /area/maintenance/asmaint2) "dno" = ( -/obj/structure/transit_tube{ - dir = 8; - icon_state = "Block" +/obj/structure/transit_tube/cap{ + dir = 8 }, /turf/simulated/floor/plating, /area/turret_protected/aisat_interior) "dnp" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/disposaloutlet, -/turf/simulated/floor/plating/airless, +/obj/structure/lattice, +/turf/space, /area/maintenance/asmaint2) "dnq" = ( /obj/structure/cable{ @@ -68045,16 +67944,6 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "dnQ" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1450; - master_tag = "sci_maint"; - name = "interior access button"; - pixel_x = -28; - pixel_y = -5; - req_access = list(13) - }, -/obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, @@ -68542,6 +68431,9 @@ pixel_x = -24 }, /obj/machinery/portable_atmospherics/canister/air, +/obj/item/radio/intercom{ + pixel_y = 23 + }, /turf/simulated/floor/plating, /area/aisat/atmospherics) "dpD" = ( @@ -68599,6 +68491,9 @@ }, /obj/item/stack/sheet/mineral/plasma, /obj/item/clothing/head/welding, +/obj/item/radio/intercom{ + pixel_y = 23 + }, /turf/simulated/floor/plating, /area/aisat/maintenance) "dpM" = ( @@ -68873,15 +68768,16 @@ pixel_y = 7 }, /obj/item/pen/multi, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -22 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" }, /area/turret_protected/ai) "drq" = ( -/obj/machinery/alarm{ - pixel_y = 24 - }, /obj/structure/chair{ dir = 8 }, @@ -69231,7 +69127,10 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/engineering) "dsP" = ( @@ -69267,12 +69166,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/engineering) -"dsW" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/engineering) +"dsW" = ( +/turf/simulated/wall/r_wall, +/area/space) "dsX" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -69485,10 +69384,9 @@ }, /area/quartermaster/office) "dAN" = ( -/turf/simulated/floor/plasteel{ - icon_state = "darkblue" - }, -/area/security/detectives_office) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/hallway/primary/starboard/east) "dBn" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock{ @@ -69817,17 +69715,6 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/security/range) -"dVs" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "dVu" = ( /obj/structure/table, /obj/machinery/alarm{ @@ -70018,6 +69905,12 @@ icon_state = "cafeteria" }, /area/crew_quarters/kitchen) +"eiL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/central/south) "eja" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -70545,6 +70438,9 @@ name = "south newscaster"; pixel_y = -31 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) "eKG" = ( @@ -70845,36 +70741,16 @@ /turf/simulated/floor/plating, /area/security/warden) "eZr" = ( -/obj/structure/window/reinforced/polarized{ - id = "holodeck" - }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) -"eZu" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "holodeck" +/obj/structure/chair{ + dir = 8 }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" +/obj/effect/landmark/start/security_officer, +/obj/item/radio/intercom/department/security{ + name = "north station intercom (Security)"; + pixel_y = 25 }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) +/turf/simulated/floor/plasteel, +/area/security/main) "eZH" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -70883,21 +70759,6 @@ icon_state = "whitepurple" }, /area/toxins/launch) -"eZP" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "fba" = ( /obj/structure/cable{ d2 = 2; @@ -71749,20 +71610,15 @@ }, /area/security/brig) "fVD" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" +/obj/machinery/light/small{ + dir = 4 }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "holodeck" +/obj/item/radio/intercom{ + name = "east station intercom (General)"; + pixel_x = 28 }, /turf/simulated/floor/plating, -/area/crew_quarters/dorms) +/area/maintenance/genetics) "fWY" = ( /obj/structure/cable{ icon_state = "2-4" @@ -71973,10 +71829,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -71984,6 +71836,7 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -72163,10 +72016,6 @@ dir = 1 }, /obj/effect/turf_decal/siding/wood/corner, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -72182,7 +72031,6 @@ }, /area/security/range) "gwS" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "yellow" @@ -72462,6 +72310,17 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/asmaint2) +"gNo" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/medical/morgue) "gNq" = ( /obj/effect/spawner/random_spawners/grille_maybe, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -73248,7 +73107,8 @@ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 2; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -73630,17 +73490,14 @@ /turf/simulated/floor/plating, /area/maintenance/cafeteria) "ibg" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" +/obj/machinery/light_switch{ + name = "south light switch"; + pixel_y = -24 }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) +/area/medical/sleeper) "ibv" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -74305,22 +74162,6 @@ }, /turf/simulated/floor/carpet/purple, /area/maintenance/server) -"iOx" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "iPr" = ( /turf/simulated/floor/plasteel{ icon_state = "darkblue" @@ -74406,27 +74247,11 @@ /area/crew_quarters/bar/atrium) "iYB" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/asmaint) -"iZs" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "iZN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dust, @@ -74620,7 +74445,6 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar) "jkT" = ( @@ -74856,6 +74680,13 @@ /obj/effect/spawner/random_spawners/cobweb_right_frequent, /turf/simulated/floor/plating, /area/maintenance/apmaint) +"jvb" = ( +/obj/structure/transit_tube/curved{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/space) "jvC" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -75110,6 +74941,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/engineering) "jSX" = ( @@ -75439,9 +75271,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -75499,21 +75328,6 @@ icon_state = "dark" }, /area/security/warden) -"kjf" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "kjl" = ( /obj/machinery/door_control{ id = "maint_house"; @@ -75560,6 +75374,10 @@ pixel_y = -30 }, /obj/machinery/papershredder, +/obj/machinery/alarm{ + dir = 8; + pixel_x = 24 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkblue" @@ -75983,7 +75801,7 @@ /area/medical/cloning) "kIR" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/space, /area/space) "kJr" = ( @@ -76394,6 +76212,13 @@ /obj/structure/girder, /turf/simulated/floor/plating, /area/maintenance/asmaint) +"lll" = ( +/obj/structure/transit_tube/curved/flipped{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/space) "llO" = ( /obj/item/radio/intercom{ name = "north station intercom (General)"; @@ -77114,9 +76939,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) @@ -78255,6 +78080,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) "njA" = ( @@ -78502,6 +78331,12 @@ icon_state = "neutralfull" }, /area/maintenance/engineering) +"ntA" = ( +/obj/structure/sign/poster/random{ + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/library) "nui" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -78717,6 +78552,17 @@ icon_state = "dark" }, /area/hydroponics) +"nKh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "yellowcorner" + }, +/area/hallway/primary/aft) "nKt" = ( /obj/structure/rack{ dir = 1 @@ -78937,18 +78783,6 @@ icon_state = "whitepurple" }, /area/toxins/launch) -"nYU" = ( -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "nZS" = ( /obj/effect/decal/warning_stripes/northwest, /obj/machinery/atmospherics/unary/portables_connector, @@ -79134,18 +78968,6 @@ icon_state = "cafeteria" }, /area/medical/research/restroom) -"ooN" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "ooS" = ( /obj/structure/cable{ d1 = 1; @@ -79406,10 +79228,6 @@ }, /area/hydroponics) "oHW" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, /obj/structure/sink{ dir = 8; pixel_x = -12; @@ -80162,8 +79980,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, /turf/simulated/floor/plating, /area/maintenance/engineering) @@ -80244,7 +80061,8 @@ /obj/machinery/computer/crew, /obj/item/radio/intercom{ name = "east station intercom (General)"; - pixel_x = 28 + pixel_x = 28; + pixel_y = 5 }, /turf/simulated/floor/plasteel{ dir = 5; @@ -80635,6 +80453,10 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/asmaint) +"qbk" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/space) "qbw" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -80884,7 +80706,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "qlm" = ( @@ -81400,6 +81221,10 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/wood/fancy/cherry, /area/crew_quarters/bar/atrium) "qKo" = ( @@ -81635,6 +81460,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/lawoffice) "qTv" = ( @@ -81716,6 +81542,11 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) +"qYV" = ( +/obj/structure/transit_tube/crossing/horizontal, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space) "qZx" = ( /obj/structure/table/glass, /obj/item/clipboard, @@ -81957,21 +81788,6 @@ /obj/structure/table, /turf/simulated/floor/plating, /area/storage/secure) -"rmc" = ( -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - id = "holodeck" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "rmn" = ( /obj/structure/closet/secure_closet/cargotech, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -82204,6 +82020,16 @@ /obj/machinery/light{ dir = 8 }, +/obj/machinery/requests_console{ + department = "Warden"; + departmentType = 7; + name = "Warden's Requests Console"; + pixel_x = -30 + }, +/obj/machinery/firealarm{ + name = "north fire alarm"; + pixel_y = 24 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkred" @@ -82290,22 +82116,6 @@ }, /turf/simulated/floor/engine, /area/toxins/mixing) -"rFJ" = ( -/obj/structure/cable/yellow, -/obj/structure/window/reinforced/polarized{ - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "ceoffice" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "ceoffice" - }, -/obj/structure/grille, -/turf/simulated/floor/plating, -/area/engine/chiefs_office) "rGg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -82337,7 +82147,8 @@ "rIF" = ( /obj/item/radio/intercom{ name = "east station intercom (General)"; - pixel_x = 28 + pixel_x = 28; + pixel_y = 5 }, /obj/machinery/flasher{ id = "brigmedflash"; @@ -82853,6 +82664,13 @@ }, /turf/simulated/floor/engine, /area/toxins/mixing) +"spb" = ( +/obj/structure/transit_tube/curved/flipped{ + dir = 8 + }, +/obj/structure/lattice, +/turf/space, +/area/space) "sqy" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ @@ -83003,6 +82821,12 @@ icon_state = "darkred" }, /area/security/prisonershuttle) +"szF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/hallway/primary/starboard/west) "szV" = ( /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ @@ -83083,7 +82907,7 @@ /area/hallway/primary/central/sw) "sDN" = ( /obj/structure/morgue{ - dir = 8 + dir = 1 }, /turf/simulated/floor/plasteel{ dir = 6; @@ -83906,6 +83730,19 @@ icon_state = "dark" }, /area/aisat) +"tvW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/starboard/west) "txi" = ( /obj/structure/cable{ icon_state = "4-8" @@ -84135,10 +83972,33 @@ icon_state = "freezerfloor" }, /area/maintenance/apmaint) +"tGb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/sortjunction{ + name = "Morgue"; + sortType = 25 + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/starboard/east) +"tGd" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/starboard/east) "tGS" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/engine, /area/engine/mechanic_workshop) +"tGW" = ( +/obj/structure/transit_tube/curved{ + dir = 8 + }, +/obj/structure/lattice, +/turf/space, +/area/space) "tHc" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -84889,22 +84749,6 @@ /obj/item/toy/figure/assistant, /turf/simulated/floor/plasteel, /area/crew_quarters/locker) -"uND" = ( -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; - id = "holodeck" - }, -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 1; - id = "holodeck" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/dorms) "uOI" = ( /obj/structure/door_assembly/door_assembly_research{ anchored = 1 @@ -85088,7 +84932,6 @@ /obj/item/stamp/qm, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/item/qm_quest_tablet{ - pixel_y = 0; pixel_x = -12 }, /turf/simulated/floor/plasteel, @@ -85133,7 +84976,6 @@ /turf/simulated/floor/plating, /area/maintenance/port) "uXX" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, @@ -85143,6 +84985,10 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -85688,6 +85534,10 @@ /obj/structure/mecha_wreckage/ripley/firefighter, /turf/simulated/floor/engine, /area/maintenance/server) +"vxQ" = ( +/obj/effect/decal/warning_stripes/northwest, +/turf/simulated/floor/plating, +/area/maintenance/asmaint2) "vyb" = ( /obj/effect/decal/cleanable/fungus, /turf/simulated/wall, @@ -85746,6 +85596,12 @@ icon_state = "dark" }, /area/security/warden) +"vBs" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/lawoffice) "vBJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -85962,6 +85818,10 @@ /obj/machinery/vending/snack, /obj/machinery/light, /obj/effect/decal/cleanable/dirt, +/obj/machinery/alarm{ + dir = 1; + pixel_y = -24 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "escape" @@ -86141,6 +86001,10 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -86633,16 +86497,6 @@ "wtL" = ( /turf/simulated/wall/r_wall, /area/maintenance/xenozoo) -"wuv" = ( -/obj/machinery/light_switch{ - name = "east light switch"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "escape" - }, -/area/security/customs2) "wvx" = ( /obj/structure/table/reinforced, /obj/item/gun/energy/laser/practice, @@ -87215,10 +87069,6 @@ pixel_y = -32 }, /obj/effect/decal/warning_stripes/south, -/obj/item/radio/intercom{ - name = "east station intercom (General)"; - pixel_x = 28 - }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "xcT" = ( @@ -87334,6 +87184,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/simulated/floor/carpet, /area/crew_quarters/mrchangs) "xgd" = ( @@ -88231,16 +88084,7 @@ /turf/simulated/floor/carpet, /area/civilian/vacantoffice) "yjM" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/polarized{ - dir = 4; - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - id = "holodeck" - }, -/obj/structure/window/reinforced/polarized{ - dir = 8; +/obj/effect/spawner/window/reinforced/polarized{ id = "holodeck" }, /turf/simulated/floor/plating, @@ -111340,7 +111184,7 @@ cwF cvo cER hFD -ckO +cYw cJZ cLy cLi @@ -111865,7 +111709,7 @@ cKb cRC cRC cUc -cRG +cJk cNB cLi uTI @@ -112122,7 +111966,7 @@ cLq cRK cRC cRC -cRG +cJk cWn cOx uTI @@ -112379,7 +112223,7 @@ cLv cRE cSS cKb -cRG +cJk cNB cOx uTI @@ -112636,7 +112480,7 @@ cLv cRE cTd cKb -cRG +cJk cNB cLi lTl @@ -112893,7 +112737,7 @@ cOr cOV cKb cKb -cRG +cJk cNB cLi cLi @@ -113342,7 +113186,7 @@ aUF bfe bhP bmk -aUF +cSX cZa aSA djW @@ -113408,8 +113252,8 @@ cPb dsG dsG dsO -dsW -dsW +cNB +cNB pzr cZw dar @@ -113565,8 +113409,8 @@ uQe fYH aef ago -aie -gSV +akV +bFk alc anZ aqY @@ -113652,7 +113496,7 @@ cng cvp cFa cFt -cGl +cfl cGW cKe cLC @@ -113825,9 +113669,9 @@ hdV aig ajO ald -aKs -aKs -asN +cZE +cZE +bkN qTn avS avN @@ -113909,7 +113753,7 @@ uTI uTI cFa cFk -cGi +cGp ckO cKf pKG @@ -114079,8 +113923,8 @@ ahu afs aeg ago -aie -atE +aso +aHQ alc aob ara @@ -114166,7 +114010,7 @@ cCM uTI cFa cFt -cGi +cGp ckO cKb cLE @@ -114341,11 +114185,11 @@ ajQ alc aoe aMO -aod -aod +dmq +vBs avW -aod -aod +bNl +dmq aoe aAI aCb @@ -114423,7 +114267,7 @@ cwU uTI cFa cFl -cGi +cGp ckO cKb cKb @@ -114599,7 +114443,7 @@ aIo aod aod aIo -avd +axu avT axu aIo @@ -114680,7 +114524,7 @@ cCN uTI cFa cFt -cGi +cGp ckO cKf cLD @@ -114937,7 +114781,7 @@ cwV cvq cvq cFt -cGi +cGp ckO cKf cLG @@ -115107,7 +114951,7 @@ tUB afv aeg aqX -aie +aso ajR alo aAz @@ -115194,7 +115038,7 @@ cCO cEd cvx cFt -cGg +bcs vJo cKf cLF @@ -115451,7 +115295,7 @@ jQO cDW cvx cFk -cGi +cGp ckO cKb cJx @@ -115708,7 +115552,7 @@ cwO cEe cvx cFt -cGi +cGp ckO cKb cJx @@ -115965,7 +115809,7 @@ cwO cEe cvx cFt -cGi +cGp ckO cKb cLH @@ -116201,7 +116045,7 @@ bXr ljb cbe bZd -cdN +eiL cgh vJM cgZ @@ -116479,7 +116323,7 @@ cAL cDY cvx cFt -cGi +cGp ckO cKk ckO @@ -116736,12 +116580,12 @@ cvx cvx cvx cFr -cfl -cHG +cGp +cHD qkZ -cHG -cJk -cfz +cHD +cJl +cHD cHD cNS cJZ @@ -116926,7 +116770,7 @@ aDm aFy aFF aFF -aUq +bNq aGx aFF aSN @@ -116997,10 +116841,10 @@ cGp cHD cHL cHD -cHI -cjb +cJl cHD -cMV +cHD +nKh cJZ cRR cPl @@ -117163,7 +117007,7 @@ aov api eZh ago -akV +aso alb anI nrc @@ -117181,7 +117025,7 @@ aCo aCJ aDl aEh -aFx +aHq aHq aIr aKg @@ -117438,7 +117282,7 @@ aCx aDk aFF aFF -aGx +aFF aHT aIO aKz @@ -117695,7 +117539,7 @@ aEi aFw aFw aFw -aJh +aFw aKy aEj aPb @@ -117744,7 +117588,7 @@ gpA iVV iVV cex -bKQ +cNf bwN chc chc @@ -117777,7 +117621,7 @@ cRR cTg cFC cHa -rFJ +cHk cRR cRR cZP @@ -118738,8 +118582,8 @@ aRx bdN bgT biR -bpR -cSX +boU +cUi dgH aDN bhq @@ -118956,7 +118800,7 @@ acy aiv xzR asn -wuv +amJ amJ aoD apE @@ -120009,7 +119853,7 @@ axe aGF aIg aJo -aKD +bax axe aNU aLP @@ -120266,7 +120110,7 @@ axe aGE aIg aJo -aKC +aKD axe aNU aOI @@ -120292,7 +120136,7 @@ uTI uTI diP bsJ -byu +byA bwf bxv byX @@ -120523,7 +120367,7 @@ axe fyo aIg aJo -dAN +aKC axe aNU aOI @@ -120549,7 +120393,7 @@ uTI uTI bmi bsL -byu +byA bwi bxv aZO @@ -120599,7 +120443,7 @@ cJE cLJ cGK cTh -cTh +bHJ cSb cTh cCp @@ -120806,7 +120650,7 @@ bmi bmi bmi bsK -byu +byA bwh bxv bxv @@ -121321,8 +121165,8 @@ bpA bpA bvD byx -aTH -aTH +bpA +bpA bEg bFi bHo @@ -122097,7 +121941,7 @@ bxx djh bAh bHy -bAk +bCZ bEp aTT bCW @@ -122294,7 +122138,7 @@ vZX nCT qFz wxU -cfY +aoJ adY amm amN @@ -122551,7 +122395,7 @@ ags lio qOo wxU -alF +eZr alF alF amQ @@ -122683,9 +122527,9 @@ dkT cQZ doE lTl -lTl +uTI dmX -lTl +uTI lTl uTI uTI @@ -122868,7 +122712,7 @@ bJQ eWm bAk bHy -btX +buW bEp aTU bDf @@ -122940,9 +122784,9 @@ cQZ cQZ doE lTl -uTI -dmW -uTI +lll +lTl +jvb lTl uTI uTI @@ -123196,11 +123040,11 @@ dkV dkV cQZ doE -lTl -uTI -dmW -uTI -lTl +doE +qYV +doE +qYV +doE uTI uTI uTI @@ -123400,7 +123244,7 @@ caA caA bXJ bZk -ccu +ibg caA cfA chl @@ -123454,10 +123298,10 @@ dlx cQZ doE lTl -uTI -dmW -uTI +tGW lTl +spb +doE uTI uTI iUc @@ -123710,10 +123554,10 @@ dkV dkV cQZ doE -doE -doE +uTI +uTI ddC -doE +uTI ddM ddO kIR @@ -124149,7 +123993,7 @@ kZd vDP brf wPc -jtW +cxO dnk bAk bHy @@ -126169,17 +126013,17 @@ awH ayg awF awl -eZu -ooN -eZP +yjM +yjM +yjM xyo -eZu -eZr +yjM +yjM xyo -iOx -ibg -ibg -dVs +yjM +yjM +yjM +yjM aPk aVw aVP @@ -126436,7 +126280,7 @@ sHt sHt sHt sHt -aOh +yjM xVt aPm aSM @@ -126693,7 +126537,7 @@ sHt sHt sHt sHt -aOh +yjM xVt pWb aNQ @@ -126950,7 +126794,7 @@ pwU sHt sHt sHt -kjf +yjM aBm aPm aSM @@ -127241,7 +127085,7 @@ bAk bEu aYo bLj -bHJ +aZT bEu bMY bOV @@ -127493,8 +127337,8 @@ bwr eVW bzh bAk -bHA -bJb +tvW +szF aTN aYl bEx @@ -127711,12 +127555,12 @@ ylx ylx ylx atG -iZs +yjM yjM aOI xyo -uND -fVD +yjM +yjM xyo aOI aOI @@ -127750,11 +127594,11 @@ bwr rUR beb bAk -bHy +aJh bAk bEu aYr -bbA +gNo bHL bEu bLK @@ -128007,11 +127851,11 @@ ioG beb beb bAp -bHy +aJh bCZ bEu aYq -aZT +bMZ bHK bKe bFX @@ -128264,7 +128108,7 @@ jtT blb bzk bAs -bHy +aJh bAk bEu aZU @@ -128323,7 +128167,7 @@ cJu cKw cJt cLZ -cNf +cBQ dbE cyJ chf @@ -128485,9 +128329,9 @@ uTI uTI uTI aOI -aFK -nYU -rmc +yjM +yjM +yjM aOI aOI aIF @@ -128521,11 +128365,11 @@ xhE jtT bzj bAr -bHy +aJh buW bEu qzo -bMZ +aZT bOX bOX bOX @@ -128580,7 +128424,7 @@ cJt cJt cIj cIj -cNf +cBQ dbE fDl chf @@ -128592,7 +128436,7 @@ chf dkZ cUm cYg -csL +dmr cBP uTI uTI @@ -128778,7 +128622,7 @@ hZf jtT jjn bAr -bHy +aJh bAk bEu bob @@ -128837,7 +128681,7 @@ cJv cKA cJt cMc -cNf +cBQ dbE cyJ chf @@ -128849,9 +128693,9 @@ lsc dkS dlA dfM -csL +cjb cBQ -uTI +afO uTI uTI uTI @@ -129017,7 +128861,7 @@ kKR kKR qKL qKL -bjk +aGY bcb beb dhs @@ -129035,7 +128879,7 @@ hQc vbu bzk bAr -bHy +aJh bJc bEu bby @@ -129094,7 +128938,7 @@ csL cIj cKS cMb -cNf +cBQ kIe eMx dgZ @@ -129104,10 +128948,10 @@ djm eUX chf dla -cps +csL dlN -dml -dmt +cYi +dmN dmF dng uTI @@ -129361,11 +129205,11 @@ chf iDA dwF iYB -cYg +cYR dlO -dmr -cBQ -uTI +dml +dmt +bjk uTI uTI uTI @@ -129531,7 +129375,7 @@ aMz aGX aMz aMz -bkt +vnb bck beb bdV @@ -129788,7 +129632,7 @@ aGX aTZ fyD aGX -bkI +doE bcn beb bdW @@ -130045,7 +129889,7 @@ dvr yig oVG aHP -bkt +vnb bck beb bei @@ -130084,7 +129928,7 @@ bXQ caY bWg ceq -cfZ +fVD chG ciZ cga @@ -130302,7 +130146,7 @@ aMz aGX aGX aGX -bkN +aGY bcm beb beb @@ -130559,24 +130403,24 @@ aCO gwT aGX aWb -aYK -bct bfn -bfR -bfR -bfR -bfR -bfR -bfR -bfR -bfR -bfR +bct +bkI +bkI +bkI +bkI +bkI +bkI +bkI +bkI +bkI +bkI bPx byQ bAW aVb bCN -bFk +bCN bHC bwv bKa @@ -130838,7 +130682,7 @@ bHH bKb bKb bKR -bLl +bUl bMV bLE bHX @@ -131333,7 +131177,7 @@ aWg aGY bau bau -btl +bjF bih bia bju @@ -131632,10 +131476,10 @@ coi cpV cSe crL -hHY +byu cvT cpR -cxO +cxD hSk cts mEo @@ -131846,9 +131690,9 @@ aGX aWA aYY bqj -aHQ +bfU bhx -bij +bfU bkp bfU bfU @@ -131889,10 +131733,10 @@ cod cpR csA crL -hHY +byu crL cpR -cxO +cxD cAe jnc kGe @@ -132104,9 +131948,9 @@ bbh bau bau bch -bem -bfY -bkn +bcp +bcp +bkK bcp blj blj @@ -132360,10 +132204,10 @@ aGX bbh bau bav -bci -btl -bfZ -bkn +bcp +bij +bij +bkK bcp blj blj @@ -132384,7 +132228,7 @@ bId bNh bPa bRy -bPo +dmu bPo bId crH @@ -132406,7 +132250,7 @@ crL cuS cpR cxI -cxO +cxD csr csr csr @@ -132617,10 +132461,10 @@ aGX bbh bau bao -bcs -beo +bci +bem +bfY beo -bkK bcp bcp blj @@ -132873,12 +132717,12 @@ kuS aGX bbh bau -bax -bcj +ntA +bci bep -bfT -wjB -bjF +bfZ +bkn +ntA bll bcp boG @@ -132920,7 +132764,7 @@ ctv cuX bIi cpI -cxO +cxD csr mRB cYu @@ -133177,7 +133021,7 @@ bYm cuV bIi bQX -cxO +cxD csr qwN qbV @@ -133400,7 +133244,7 @@ bpY buy btj buV -blj +cHG bxV bau bFs @@ -133434,7 +133278,7 @@ bLR cvF bIi cxU -cxO +cxD csr onN ugD @@ -133477,9 +133321,9 @@ bGG bGG dbg bGH -uTI -uTI -uTI +dsW +dsW +qbk uTI uTI uTI @@ -133657,7 +133501,7 @@ bqc wjB btb buV -blj +cHG bxW bau bwv @@ -133691,7 +133535,7 @@ ctC cvF bIi cxM -cxO +cxD csr mcq qAN @@ -133733,9 +133577,9 @@ bGH dlD dgy bGG -bGH -bGH -bGH +cuQ +vxQ +bkt bZZ bZZ bZZ @@ -133914,7 +133758,7 @@ bcp brA btl buV -blj +cHG bCS bau bFv @@ -133991,7 +133835,7 @@ dlJ bGG bGG cjA -dmb +bGG dnQ dnR dnS @@ -134171,12 +134015,12 @@ bqd brB brG buV -blj +cGl bCR bau bFu bkH -bwv +tGd bDq bGF bIi @@ -134433,7 +134277,7 @@ aYP aYP bFz bHQ -bJq +tGb bJq bKT bSz @@ -134450,7 +134294,7 @@ ccp cdL ceN chO -bNl +bJk cln mbq qqL @@ -134676,8 +134520,8 @@ bcu ber bga bis -bvN -bcD +daj +bLl bld blw bmI @@ -134685,8 +134529,8 @@ bmT buz brI buY -khg -bjD +day +cWJ aYP bFw bkL @@ -134707,7 +134551,7 @@ bJB bJB bJB chN -bNq +tml bTw tml vic @@ -134760,9 +134604,9 @@ cuQ cQC dlP bGG -dmq -dmu -dmN +cAU +bZZ +dnp dnp lTl uTI @@ -135017,10 +134861,8 @@ cuQ cJQ bGG bGG -cZE -bGH -lTl -lTl +bGG +bZZ lTl uTI uTI @@ -135036,6 +134878,8 @@ uTI uTI uTI uTI +uTI +uTI abp uTI uTI @@ -135200,7 +135044,7 @@ szV buA khg khg -bya +aYK aYQ bwv bkL @@ -135274,7 +135118,7 @@ cuQ cuQ cuQ cuQ -cZE +bGG bGH bGH uTI @@ -135457,10 +135301,10 @@ khg khg khg khg -khg -bEl -bwv -bkL +cHI +bcj +dAN +aFx bwv bDq bGL @@ -135531,7 +135375,7 @@ cQC dlj dlz cuQ -cZE +bGG dbg bGH lTl @@ -135780,15 +135624,15 @@ rOj oiL kZk ioj -cWJ +bGG cXz -cYw -cYw -cYw -cYw -cYR +bGG +bGG +bGG +bGG +bGG cuQ -cZE +bGG bPA bZZ uTI @@ -136043,9 +135887,9 @@ cuQ cuQ cuQ bGG -cZE +bGG cuQ -cZE +bGG cLh bZZ uTI @@ -136300,9 +136144,9 @@ cuQ uTI cuQ cuQ -daj +dgf cuQ -cZE +bGG bKl cMs lTl @@ -136557,9 +136401,9 @@ bZZ uTI bZZ bGG -cWJ -cYw -day +bGG +bGG +bGG cMs bGH uTI diff --git a/_maps/map_files/generic/CentComm.dmm b/_maps/map_files/generic/CentComm.dmm index 568dbcc4b09..8fb0a518045 100644 --- a/_maps/map_files/generic/CentComm.dmm +++ b/_maps/map_files/generic/CentComm.dmm @@ -2443,11 +2443,11 @@ desc = "Баксоны максона. Возможно кто-то приобретет пропуск."; name = "100.000 �������� �������" }, -/obj/item/stack/telecrystal/twohundread_fifty{ +/obj/item/stack/telecrystal/twohundred_fifty{ amount = 115; desc = null }, -/obj/item/stack/telecrystal/twohundread_fifty{ +/obj/item/stack/telecrystal/twohundred_fifty{ amount = 115; desc = null }, @@ -11492,18 +11492,18 @@ /area/centcom/zone1) "fQg" = ( /obj/structure/table/wood, -/obj/item/stack/telecrystal/twohundread_fifty{ +/obj/item/stack/telecrystal/twohundred_fifty{ pixel_x = 3 }, -/obj/item/stack/telecrystal/twohundread_fifty{ +/obj/item/stack/telecrystal/twohundred_fifty{ pixel_x = -3; pixel_y = 4 }, -/obj/item/stack/telecrystal/twohundread_fifty{ +/obj/item/stack/telecrystal/twohundred_fifty{ pixel_x = -4; pixel_y = -2 }, -/obj/item/stack/telecrystal/twohundread_fifty{ +/obj/item/stack/telecrystal/twohundred_fifty{ pixel_x = 3; pixel_y = 9 }, diff --git a/_maps/map_files/generic/syndicatebase.dmm b/_maps/map_files/generic/syndicatebase.dmm index 766cf919adf..86f29b09319 100644 --- a/_maps/map_files/generic/syndicatebase.dmm +++ b/_maps/map_files/generic/syndicatebase.dmm @@ -191,8 +191,7 @@ /obj/item/stack/sheet/mineral/gold{ amount = 50 }, -/obj/item/stack/telecrystal/twohundread_fifty{ - amount = 20; +/obj/item/stack/telecrystal/hundred{ desc = null }, /obj/machinery/door/poddoor{ diff --git a/_maps/map_files/generic/z2_old.dmm b/_maps/map_files/generic/z2_old.dmm index 63e10a5e5df..b476204ac52 100644 --- a/_maps/map_files/generic/z2_old.dmm +++ b/_maps/map_files/generic/z2_old.dmm @@ -13202,11 +13202,11 @@ desc = "Баксоны максона. Возможно кто-то приобретет пропуск."; name = "100.000 �������� �������" }, -/obj/item/stack/telecrystal/twohundread_fifty{ +/obj/item/stack/telecrystal/twohundred_fifty{ amount = 115; desc = null }, -/obj/item/stack/telecrystal/twohundread_fifty{ +/obj/item/stack/telecrystal/twohundred_fifty{ amount = 115; desc = null }, diff --git a/_maps/map_files/shuttles/ferry_meat.dmm b/_maps/map_files/shuttles/ferry_meat.dmm index 558df020698..aca9a9bee30 100644 --- a/_maps/map_files/shuttles/ferry_meat.dmm +++ b/_maps/map_files/shuttles/ferry_meat.dmm @@ -50,8 +50,8 @@ /obj/item/grenade/clusterbuster/meat, /obj/item/reagent_containers/food/snacks/meat/corgi, /obj/item/reagent_containers/food/snacks/meat/ham, -/obj/item/reagent_containers/food/snacks/meat/human, -/obj/item/reagent_containers/food/snacks/meat/monkey, +/obj/item/reagent_containers/food/snacks/meat/humanoid/human, +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /obj/item/reagent_containers/food/snacks/meat/pug, /obj/item/reagent_containers/food/snacks/meat/slab/meatproduct, /obj/item/reagent_containers/food/snacks/meat/syntiflesh, diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 552d5afef4d..c465c4a3a8e 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -182,7 +182,7 @@ Pipelines + Other Objects -> Pipe network //(De)construction /obj/machinery/atmospherics/attackby(obj/item/W, mob/user) var/turf/T = get_turf(src) - if(can_unwrench && istype(W, /obj/item/wrench)) + if(can_unwrench && W.tool_behaviour == TOOL_WRENCH) if(level == 1 && T.transparent_floor && istype(src, /obj/machinery/atmospherics/pipe)) to_chat(user, span_danger("You can't interact with something that's under the floor!")) return diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index ebd0b09f2d1..06979391893 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -179,7 +179,7 @@ update_icon() /obj/machinery/atmospherics/binary/passive_gate/attackby(obj/item/W, mob/user, params) - if(!istype(W, /obj/item/wrench)) + if(W.tool_behaviour != TOOL_WRENCH) return ..() if(on) to_chat(user, span_alert("You cannot unwrench this [src], turn it off first.")) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 79e7f3a0392..3d23152fafb 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -236,7 +236,7 @@ Thus, the two variables affect pump operation are set in New(): if(istype(W, /obj/item/pen)) rename_interactive(user, W) return - else if(!istype(W, /obj/item/wrench)) + else if(W.tool_behaviour != TOOL_WRENCH) return ..() if(!(stat & NOPOWER) && on) to_chat(user, span_alert("You cannot unwrench this [src], turn it off first.")) diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 8c6f529924e..aaf1aa23a27 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -233,7 +233,7 @@ Thus, the two variables affect pump operation are set in New(): if(istype(W, /obj/item/pen)) rename_interactive(user, W) return - else if(!istype(W, /obj/item/wrench)) + else if(W.tool_behaviour != TOOL_WRENCH) return ..() if(!(stat & NOPOWER) && on) to_chat(user, span_alert("You cannot unwrench this [src], turn it off first.")) diff --git a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm index 76c6062e5dd..a717401adea 100644 --- a/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/outlet_injector.dm @@ -162,7 +162,7 @@ return*/ /obj/machinery/atmospherics/unary/outlet_injector/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) if(!(stat & NOPOWER) && on) to_chat(user, span_danger("You cannot unwrench this [src], turn if off first.")) return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm index 5c1458b963d..a2de13f7ee4 100644 --- a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm @@ -38,7 +38,7 @@ parent.update = 1 /obj/machinery/atmospherics/unary/portables_connector/attackby(var/obj/item/W as obj, var/mob/user as mob, params) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) if(connected_device) to_chat(user, span_danger("You cannot unwrench this [src], detach [connected_device] first.")) return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index d3ac2bf11ef..0d5d8cf79dd 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -348,7 +348,7 @@ else to_chat(user, "The vent is welded.") return 1 - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) if(!(stat & NOPOWER) && on) to_chat(user, span_danger("You cannot unwrench this [src], turn it off first.")) return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 40e5afcfd6b..8c00018b941 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -370,7 +370,7 @@ playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE) /obj/machinery/atmospherics/unary/vent_scrubber/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) if(!(stat & NOPOWER) && on) to_chat(user, span_danger("You cannot unwrench this [src], turn it off first.")) return 1 diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm index 17e280260a0..e9fc5fe716f 100644 --- a/code/ATMOSPHERICS/pipes/cap.dm +++ b/code/ATMOSPHERICS/pipes/cap.dm @@ -16,9 +16,9 @@ ..() 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_ABSTRACT : 0 + invisibility = i ? INVISIBILITY_MAXIMUM : 0 update_icon() /obj/machinery/atmospherics/pipe/cap/pipeline_expansion() diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index ec91fdc8db9..c7499241080 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -60,9 +60,9 @@ 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_ABSTRACT : 0 + invisibility = i ? INVISIBILITY_MAXIMUM : 0 /obj/machinery/atmospherics/pipe/manifold/pipeline_expansion() return list(node1, node2, node3) diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm index 237251b3803..3e140ed2ebf 100644 --- a/code/ATMOSPHERICS/pipes/manifold4w.dm +++ b/code/ATMOSPHERICS/pipes/manifold4w.dm @@ -131,9 +131,9 @@ // 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_ABSTRACT : 0 + invisibility = i ? INVISIBILITY_MAXIMUM : 0 /obj/machinery/atmospherics/pipe/manifold4w/atmos_init() ..() diff --git a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm index 73f6af89986..67e6981f687 100644 --- a/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm +++ b/code/ATMOSPHERICS/pipes/simple/pipe_simple.dm @@ -163,6 +163,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_ABSTRACT : 0 + invisibility = i ? INVISIBILITY_MAXIMUM : 0 diff --git a/code/__DEFINES/action.dm b/code/__DEFINES/action.dm index a74d261f782..dd60badb0f1 100644 --- a/code/__DEFINES/action.dm +++ b/code/__DEFINES/action.dm @@ -1,10 +1,10 @@ //Action availability flags -#define AB_CHECK_RESTRAINED 1 -#define AB_CHECK_STUNNED 2 -#define AB_CHECK_LYING 4 -#define AB_CHECK_CONSCIOUS 8 -#define AB_TRANSFER_MIND 16 -#define AB_CHECK_TURF 32 +#define AB_CHECK_RESTRAINED (1<<0) +#define AB_CHECK_STUNNED (1<<1) +#define AB_CHECK_LYING (1<<2) +#define AB_CHECK_CONSCIOUS (1<<3) +#define AB_TRANSFER_MIND (1<<4) +#define AB_CHECK_TURF (1<<5) //Advanced action types //Those actions have cooldown, and unavailable until it ends diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 97cfd10d818..19550d20ff3 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -26,27 +26,27 @@ //Please don't edit these values without speaking to Errorage first ~Carn //Admin Permissions -#define R_BUILDMODE 1 -#define R_ADMIN 2 -#define R_BAN 4 -#define R_EVENT 8 -#define R_SERVER 16 -#define R_DEBUG 32 -#define R_POSSESS 64 -#define R_PERMISSIONS 128 -#define R_STEALTH 256 -#define R_REJUVINATE 512 -#define R_VAREDIT 1024 -#define R_SOUNDS 2048 -#define R_SPAWN 4096 -#define R_MOD 8192 -#define R_MENTOR 16384 -#define R_PROCCALL 32768 -#define R_VIEWRUNTIMES 65536 +#define R_BUILDMODE (1<<0) +#define R_ADMIN (1<<1) +#define R_BAN (1<<2) +#define R_EVENT (1<<3) +#define R_SERVER (1<<4) +#define R_DEBUG (1<<5) +#define R_POSSESS (1<<6) +#define R_PERMISSIONS (1<<7) +#define R_STEALTH (1<<8) +#define R_REJUVINATE (1<<9) +#define R_VAREDIT (1<<10) +#define R_SOUNDS (1<<11) +#define R_SPAWN (1<<12) +#define R_MOD (1<<13) +#define R_MENTOR (1<<14) +#define R_PROCCALL (1<<15) +#define R_VIEWRUNTIMES (1<<16) -#define R_MAXPERMISSION 65536 //This holds the maximum value for a permission. It is used in iteration, so keep it updated. +#define R_MAXPERMISSION (1<<16)//This holds the maximum value for a permission. It is used in iteration, so keep it updated. -#define R_HOST 131071 // Sum of all permissions to allow easy setting +#define R_HOST (~0) // Sum of all permissions to allow easy setting #define ADMIN_QUE(user,display) "[display]" #define ADMIN_FLW(user,display) "[display]" diff --git a/code/__DEFINES/bots.dm b/code/__DEFINES/bots.dm index c283445d0ad..3ced8569059 100644 --- a/code/__DEFINES/bots.dm +++ b/code/__DEFINES/bots.dm @@ -26,12 +26,12 @@ #define BOT_NO_ROUTE 17 // no destination beacon found (or no route) //Bot types -#define SEC_BOT 1 // Secutritrons (Beepsky) and ED-209s -#define MULE_BOT 2 // MULEbots -#define FLOOR_BOT 4 // Floorbots -#define CLEAN_BOT 8 // Cleanbots -#define MED_BOT 16 // Medibots -#define HONK_BOT 32 // Honkbots +#define SEC_BOT (1<<0) // Secutritrons (Beepsky) and ED-209s +#define MULE_BOT (1<<1) // MULEbots +#define FLOOR_BOT (1<<2) // Floorbots +#define CLEAN_BOT (1<<3) // Cleanbots +#define MED_BOT (1<<4) // Medibots +#define HONK_BOT (1<<5) // Honkbots //Sentience types #define SENTIENCE_ORGANIC 1 diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index b1c3f75413f..e433856cd00 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -1,13 +1,13 @@ //Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. -#define HIDEGLOVES 1 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDESUITSTORAGE 2 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDEJUMPSUIT 4 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDESHOES 8 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDETAIL 16 //APPLIES ONLY TO THE EXTERIOR SUIT!! -#define HIDEMASK 32 //APPLIES ONLY TO HELMETS/MASKS!! -#define HIDEHEADSETS 64 //APPLIES ONLY TO HELMETS/MASKS!! (headsets and such) -#define HIDEGLASSES 128 //APPLIES ONLY TO HELMETS/MASKS!! -#define HIDENAME 256 //APPLIES ONLY TO HELMETS/MASKS!! Dictates whether we appear as unknown. +#define HIDEGLOVES (1<<0) //APPLIES ONLY TO THE EXTERIOR SUIT!! +#define HIDESUITSTORAGE (1<<1) //APPLIES ONLY TO THE EXTERIOR SUIT!! +#define HIDEJUMPSUIT (1<<2) //APPLIES ONLY TO THE EXTERIOR SUIT!! +#define HIDESHOES (1<<3) //APPLIES ONLY TO THE EXTERIOR SUIT!! +#define HIDETAIL (1<<4) //APPLIES ONLY TO THE EXTERIOR SUIT!! +#define HIDEMASK (1<<5) //APPLIES ONLY TO HELMETS/MASKS!! +#define HIDEHEADSETS (1<<6) //APPLIES ONLY TO HELMETS/MASKS!! (headsets and such) +#define HIDEGLASSES (1<<7) //APPLIES ONLY TO HELMETS/MASKS!! +#define HIDENAME (1<<8) //APPLIES ONLY TO HELMETS/MASKS!! Dictates whether we appear as unknown. // slots #define slot_back 1 @@ -44,24 +44,24 @@ //Cant seem to find a mob bitflags area other than the powers one // bitflags for clothing parts -#define HEAD 1 -#define UPPER_TORSO 2 -#define LOWER_TORSO 4 -#define LEG_LEFT 8 -#define LEG_RIGHT 16 -#define LEGS 24 -#define FOOT_LEFT 32 -#define FOOT_RIGHT 64 -#define FEET 96 -#define ARM_LEFT 128 -#define ARM_RIGHT 256 -#define ARMS 384 -#define HAND_LEFT 512 -#define HAND_RIGHT 1024 -#define HANDS 1536 -#define FULL_BODY 2047 -#define TAIL 4096 -#define WING 8192 +#define HEAD (1<<0) +#define UPPER_TORSO (1<<1) +#define LOWER_TORSO (1<<2) +#define LEG_LEFT (1<<3) +#define LEG_RIGHT (1<<4) +#define LEGS (LEG_LEFT|LEG_RIGHT) +#define FOOT_LEFT (1<<5) +#define FOOT_RIGHT (1<<6) +#define FEET (FOOT_LEFT|FOOT_RIGHT) +#define ARM_LEFT (1<<7) +#define ARM_RIGHT (1<<8) +#define ARMS (ARM_LEFT|ARM_RIGHT) +#define HAND_LEFT (1<<9) +#define HAND_RIGHT (1<<10) +#define HANDS (HAND_LEFT|HAND_RIGHT) +#define FULL_BODY (HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS) +#define TAIL (1<<12) +#define WING (1<<13) // bitflags for the percentual amount of protection a piece of clothing which covers the body part offers. // Used with human/proc/get_heat_protection() and human/proc/get_cold_protection() @@ -80,11 +80,11 @@ #define THERMAL_PROTECTION_HAND_RIGHT 0.025 //flags for covering body parts -#define GLASSESCOVERSEYES 1 -#define MASKCOVERSEYES 2 // get rid of some of the other mess in these flags -#define HEADCOVERSEYES 4 // feel free to realloc these numbers for other purposes -#define MASKCOVERSMOUTH 8 // on other items, these are just for mask/head -#define HEADCOVERSMOUTH 16 +#define GLASSESCOVERSEYES (1<<0) +#define MASKCOVERSEYES (1<<1) // get rid of some of the other mess in these flags +#define HEADCOVERSEYES (1<<2) // feel free to realloc these numbers for other purposes +#define MASKCOVERSMOUTH (1<<3) // on other items, these are just for mask/head +#define HEADCOVERSMOUTH (1<<4) // Suit sensor levels #define SUIT_SENSOR_OFF 0 diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 41f4e049fb0..6cb84115565 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -1,8 +1,10 @@ -#define COLOR_INPUT_DISABLED "#F0F0F0" -#define COLOR_INPUT_ENABLED "#D3B5B5" +#define COLOR_INPUT_DISABLED "#F0F0F0" +#define COLOR_INPUT_ENABLED "#D3B5B5" +#define COLOR_DARK_INPUT_DISABLED "#202020" +#define COLOR_DARK_INPUT_ENABLED "#494949" #define COLOR_RED "#FF0000" -#define COLOR_CULT_RED "#960000" +#define COLOR_CULT_RED "#960000" #define COLOR_GREEN "#00FF00" #define COLOR_BLUE "#0000FF" #define COLOR_CYAN "#00FFFF" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index c3a336e2629..06279990547 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -34,22 +34,22 @@ #define JITTER "jitter" //I hate adding defines like this but I'd much rather deal with bitflags than lists and string searches -#define BRUTELOSS 1 -#define FIRELOSS 2 -#define TOXLOSS 4 -#define OXYLOSS 8 -#define SHAME 16 -#define OBLITERATION 32 +#define BRUTELOSS (1<<0) +#define FIRELOSS (1<<1) +#define TOXLOSS (1<<2) +#define OXYLOSS (1<<3) +#define SHAME (1<<4) +#define OBLITERATION (1<<5) //Bitflags defining which status effects could be or are inflicted on a mob -#define CANSTUN 1 -#define CANWEAKEN 2 -#define CANPARALYSE 4 -#define CANPUSH 8 -#define PASSEMOTES 16 //Mob has a cortical borer or holders inside of it that need to see emotes. -#define IGNORESLOWDOWN 32 -#define IGNORE_SPEED_CHANGES 64 -#define GODMODE 128 +#define CANSTUN (1<<0) +#define CANWEAKEN (1<<1) +#define CANPARALYSE (1<<2) +#define CANPUSH (1<<3) +#define PASSEMOTES (1<<4) //Mob has a cortical borer or holders inside of it that need to see emotes. +#define IGNORESLOWDOWN (1<<5) +#define IGNORE_SPEED_CHANGES (1<<6) +#define GODMODE (1<<7) //Health Defines #define HEALTH_THRESHOLD_CRIT 0 diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index ae552969988..d9fe90f9bd5 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -287,7 +287,8 @@ ///called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source) #define COMSIG_MOVABLE_DISPOSING "movable_disposing" - +///called when the movable is removed from a disposal holder object: /obj/structure/disposalpipe/proc/expel(): (obj/structure/disposalholder/H, turf/T, direction) +#define COMSIG_MOVABLE_EXIT_DISPOSALS "movable_exit_disposals" // /datum/mind signals diff --git a/code/__DEFINES/directions.dm b/code/__DEFINES/directions.dm new file mode 100644 index 00000000000..150f0e37c5e --- /dev/null +++ b/code/__DEFINES/directions.dm @@ -0,0 +1,34 @@ +//Directions (already defined on BYOND natively, purely here for reference) +/// define purely for readability, cables especially need to use this as `NO_DIRECTION` represents a "node" +#define NO_DIRECTION 0 +//#define NORTH 1 +//#define SOUTH 2 +//#define EAST 4 +//#define WEST 8 +//#define NORTHEAST 5 +//#define SOUTHEAST 6 +//#define NORTHWEST 9 +//#define SOUTHWEST 10 + +// Multi-z directions +//#define UP 16 +//#define DOWN 32 + +/// Using the ^ operator or XOR, we can compared TRUE East and West bits against our direction, +/// since XOR will only return TRUE if one bit is False and the other is True, if East is 0, that bit will return TRUE +/// and if West is 1, then that bit will return 0 +/// hence EAST (0010) XOR EAST|WEST (0011) --> WEST (0001) + +///Flips a direction along the horizontal axis, will convert E -> W, W -> E, NE -> NW, SE -> SW, etc +#define FLIP_DIR_HORIZONTALLY(dir) ((dir & (EAST|WEST)) ? dir ^ (EAST|WEST) : dir) +///Flips a direction along the vertical axis, will convert N -> S, S -> N, NE -> SE, SW -> NW, etc +#define FLIP_DIR_VERTICALLY(dir) ((dir & (NORTH|SOUTH)) ? dir ^ (NORTH|SOUTH) : dir) + +/// for directions, each cardinal direction only has 1 TRUE bit, so `1000` or `0100` for example, so when you subtract 1 +/// from a cardinal direction it results in that directions initial TRUE bit always switching to FALSE, so if you & check it +/// against its initial self, it will return false, indicating that the direction is straight and not diagonal + +/// returns TRUE if direction is diagonal and false if not +#define IS_DIR_DIAGONAL(dir) (dir & (dir - 1)) +/// returns TRUE if direction is cardinal and false if not +#define IS_DIR_CARDINAL(dir) (!IS_DIR_DIAGONAL(dir)) diff --git a/code/__DEFINES/diseases.dm b/code/__DEFINES/diseases.dm index 0cc04c49b65..25219ab6859 100644 --- a/code/__DEFINES/diseases.dm +++ b/code/__DEFINES/diseases.dm @@ -13,8 +13,8 @@ #define BIOHAZARD "BIOHAZARD THREAT!" //Spread Flags -#define NON_CONTAGIOUS 0 //virus can't spread -#define BITES 1 //virus can spread with bites -#define BLOOD 2 //virus can spread with infected blood -#define CONTACT 4 //virus can spread with any touch -#define AIRBORNE 8 //virus spreads through the air +#define NON_CONTAGIOUS (1<<0) //virus can't spread +#define BITES (1<<1) //virus can spread with bites +#define BLOOD (1<<2) //virus can spread with infected blood +#define CONTACT (1<<3) //virus can spread with any touch +#define AIRBORNE (1<<4) //virus spreads through the air diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 11ef9cccd13..bbd23310766 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -2,38 +2,39 @@ #define NONE 0 //FLAGS BITMASK -#define STOPSPRESSUREDMAGE 1 // This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere To successfully stop you taking all pressure damage you must have both a suit and head item with this flag. -#define NODROP 2 // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted. -#define NOBLUDGEON 4 // when an item has this it produces no "X has been hit by Y with Z" message with the default handler -#define AIRTIGHT 8 // mask allows internals -#define HANDSLOW 16 // If an item has this flag, it will slow you to carry it -#define CONDUCT 32 // conducts electricity (metal etc.) -#define ABSTRACT 64 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way -#define ON_BORDER 128 // item has priority to check when entering or leaving -#define PREVENT_CLICK_UNDER 256 -#define NODECONSTRUCT 512 +#define STOPSPRESSUREDMAGE (1<<0) // This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere To successfully stop you taking all pressure damage you must have both a suit and head item with this flag. +#define NODROP (1<<1) // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted. +#define NOBLUDGEON (1<<2) // when an item has this it produces no "X has been hit by Y with Z" message with the default handler +#define AIRTIGHT (1<<3) // mask allows internals +#define HANDSLOW (1<<4) // If an item has this flag, it will slow you to carry it +#define CONDUCT (1<<5) // conducts electricity (metal etc.) +#define ABSTRACT (1<<6) // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way +#define ON_BORDER (1<<7) // item has priority to check when entering or leaving +#define PREVENT_CLICK_UNDER (1<<8) +#define NODECONSTRUCT (1<<9) -#define EARBANGPROTECT 1024 +#define EARBANGPROTECT (1<<10) -#define NOSLIP 1024 //prevents from slipping on wet floors, in space etc +#define NOSLIP (1<<10) //prevents from slipping on wet floors, in space etc -#define NOPICKUP 2048 // This flags makes it so an item cannot be picked in hands +#define NOPICKUP (1<<11) // This flags makes it so an item cannot be picked in hands -#define HEADBANGPROTECT 4096 +#define HEADBANGPROTECT (1<<12) -#define BLOCK_GAS_SMOKE_EFFECT 8192 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! -#define THICKMATERIAL 8192 //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with BLOCK_GAS_SMOKE_EFFECT) +#define BLOCK_GAS_SMOKE_EFFECT (1<<13) // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! +#define THICKMATERIAL (1<<13) //prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with BLOCK_GAS_SMOKE_EFFECT) -#define DROPDEL 16384 // When dropped, it calls qdel on itself +#define DROPDEL (1<<14) // When dropped, it calls qdel on itself -#define BLOCKHEADHAIR 32768 // temporarily removes the user's hair overlay. Leaves facial hair. -#define BLOCKHAIR 65536 // temporarily removes the user's hair, facial and otherwise. +#define BLOCKHEADHAIR (1<<15) // temporarily removes the user's hair overlay. Leaves facial hair. +#define BLOCKFACIALHAIR (1<<16) // temporarily removes the user's facial hair overlay. Leaves head hair. +#define BLOCKHAIR (1<<17) // temporarily removes the user's hair, facial and otherwise. -#define NO_PIXEL_RANDOM_DROP 131072 // If dropped, it wont have a randomized pixel_x/pixel_y +#define NO_PIXEL_RANDOM_DROP (1<<18) // If dropped, it wont have a randomized pixel_x/pixel_y -#define BLOCK_CAPSAICIN 262144 // Prevents from passing capsaicin onto human +#define BLOCK_CAPSAICIN (1<<19) // Prevents from passing capsaicin onto human -#define NOSHARPENING 524288 // Prevents from sharpening item with whetstone +#define NOSHARPENING 1048576 // Prevents from sharpening item with whetstone // Update flags for [/atom/proc/update_appearance] /// Update the atom's name @@ -50,36 +51,36 @@ /* Secondary atom flags, for the flags_2 var, denoted with a _2 */ -#define SLOWS_WHILE_IN_HAND_2 1 -#define NO_EMP_WIRES_2 2 -#define HOLOGRAM_2 4 -#define FROZEN_2 8 -#define STATIONLOVING_2 16 -#define INFORM_ADMINS_ON_RELOCATE_2 32 -#define BANG_PROTECT_2 64 +#define SLOWS_WHILE_IN_HAND_2 (1<<0) +#define NO_EMP_WIRES_2 (1<<1) +#define HOLOGRAM_2 (1<<2) +#define FROZEN_2 (1<<3) +#define STATIONLOVING_2 (1<<4) +#define INFORM_ADMINS_ON_RELOCATE_2 (1<<5) +#define BANG_PROTECT_2 (1<<6) // An item worn in the ear slot with HEALS_EARS will heal your ears each // Life() tick, even if normally your ears would be too damaged to heal. -#define HEALS_EARS_2 128 +#define HEALS_EARS_2 (1<<7) // A mob with OMNITONGUE has no restriction in the ability to speak // languages that they know. So even if they wouldn't normally be able to // through mob or tongue restrictions, this flag allows them to ignore // those restrictions. -#define OMNITONGUE_2 256 +#define OMNITONGUE_2 (1<<8) // TESLA_IGNORE grants immunity from being targeted by tesla-style electricity -#define TESLA_IGNORE_2 512 +#define TESLA_IGNORE_2 (1<<9) // Stops you from putting things like an RCD or other items into an ORM or protolathe for materials. -#define NO_MAT_REDEMPTION_2 1024 +#define NO_MAT_REDEMPTION_2 (1<<10) // LAVA_PROTECT used on the flags_2 variable for both SUIT and HEAD items, and stops lava damage. Must be present in both to stop lava damage. -#define LAVA_PROTECT_2 2048 +#define LAVA_PROTECT_2 (1<<11) -#define OVERLAY_QUEUED_2 4096 +#define OVERLAY_QUEUED_2 (1<<12) -#define CHECK_RICOCHET_2 8192 +#define CHECK_RICOCHET_2 (1<<13) #define BLOCKS_LIGHT_2 16384 @@ -92,22 +93,22 @@ #define HAS_SOCKS 4 //Species Body Flags -#define HAS_HEAD_ACCESSORY 1 -#define HAS_TAIL 2 -#define TAIL_OVERLAPPED 4 -#define HAS_SKIN_TONE 8 -#define HAS_ICON_SKIN_TONE 16 -#define HAS_SKIN_COLOR 32 -#define HAS_HEAD_MARKINGS 64 -#define HAS_BODY_MARKINGS 128 -#define HAS_TAIL_MARKINGS 256 -#define TAIL_WAGGING 512 -#define NO_EYES 1024 -#define HAS_ALT_HEADS 2048 -#define HAS_WING 4096 -#define HAS_BODYACC_COLOR 8192 -#define BALD 16384 -#define ALL_RPARTS 32768 +#define HAS_HEAD_ACCESSORY (1<<0) +#define HAS_TAIL (1<<1) +#define TAIL_OVERLAPPED (1<<2) +#define HAS_SKIN_TONE (1<<3) +#define HAS_ICON_SKIN_TONE (1<<4) +#define HAS_SKIN_COLOR (1<<5) +#define HAS_HEAD_MARKINGS (1<<6) +#define HAS_BODY_MARKINGS (1<<7) +#define HAS_TAIL_MARKINGS (1<<8) +#define TAIL_WAGGING (1<<9) +#define NO_EYES (1<<10) +#define HAS_ALT_HEADS (1<<11) +#define HAS_WING (1<<12) +#define HAS_BODYACC_COLOR (1<<13) +#define BALD (1<<14) +#define ALL_RPARTS (1<<15) //Pre-baked combinations of the above body flags #define HAS_BODY_ACCESSORY (HAS_TAIL|HAS_WING) @@ -120,22 +121,21 @@ //bitflags for door switches. -#define OPEN 1 -#define IDSCAN 2 -#define BOLTS 4 -#define SHOCK 8 -#define SAFE 16 - -//flags for pass_flags -#define PASSTABLE 1 -#define PASSGLASS 2 -#define PASSGRILLE 4 -#define PASSBLOB 8 -#define PASSMOB 16 -#define LETPASSTHROW 32 -#define PASSFENCE 64 -#define PASSDOOR 128 -#define PASS_OTHER_THINGS 256 +#define OPEN (1<<0) +#define IDSCAN (1<<1) +#define BOLTS (1<<2) +#define SHOCK (1<<3) +#define SAFE (1<<4) + +#define PASSTABLE (1<<0) +#define PASSGLASS (1<<1) +#define PASSGRILLE (1<<2) +#define PASSBLOB (1<<3) +#define PASSMOB (1<<4) +#define LETPASSTHROW (1<<5) +#define PASSFENCE (1<<6) +#define PASSDOOR (1<<7) +#define PASS_OTHER_THINGS (1<<8) #define PASS_EVERYTHING (PASSTABLE|PASSGLASS|PASSGRILLE|PASSBLOB|PASSMOB|LETPASSTHROW|PASSFENCE|PASSDOOR|PASS_OTHER_THINGS) // for /datum/var/datum_flags @@ -149,23 +149,23 @@ #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_NECK 65536 +#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_DENYPOCKET (1<<12) //this is to deny items with a w_class of 2 or 1 to fit in pockets. +#define SLOT_TWOEARS (1<<13) +#define SLOT_PDA (1<<14) +#define SLOT_TIE (1<<15) +#define SLOT_NECK (1<<16) //ORGAN TYPE FLAGS #define AFFECT_ROBOTIC_ORGAN 1 @@ -184,18 +184,18 @@ #define NO_MALF_EFFECT (1<<8) //So malf cannot blow certain things #define NO_MOUSTACHING (1<<9) //Saves from super hairgrowium shenanigans -#define MEAT 1 -#define VEGETABLES 2 -#define RAW 4 -#define JUNKFOOD 8 -#define GRAIN 16 -#define FRUIT 32 -#define DAIRY 64 -#define FRIED 128 -#define ALCOHOL 256 -#define SUGAR 512 -#define EGG 1024 -#define GROSS 2048 -#define TOXIC 4096 +#define MEAT (1<<0) +#define VEGETABLES (1<<1) +#define RAW (1<<2) +#define JUNKFOOD (1<<3) +#define GRAIN (1<<4) +#define FRUIT (1<<5) +#define DAIRY (1<<6) +#define FRIED (1<<7) +#define ALCOHOL (1<<8) +#define SUGAR (1<<9) +#define EGG (1<<10) +#define GROSS (1<<11) +#define TOXIC (1<<12) GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768)) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index f0a132fce86..d1c08d831bf 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -28,6 +28,7 @@ #define DIAG_PATH_HUD "23"//Bot path indicators #define GLAND_HUD "24"//Gland indicators for abductors #define THOUGHT_HUD "25"//Telepathy bubbles +#define KIDAN_PHEROMONES_HUD "26"//Kidan pheromones hud //by default everything in the hud_list of an atom is an image //a value in hud_list with one of these will change that behavior @@ -61,6 +62,8 @@ #define TAIPAN_HUD 23 #define ANTAG_HUD_THIEF 24 #define THOUGHTS_HUD 25 +//species hud +#define DATA_HUD_KIDAN_PHEROMONES 26 // Notification action types #define NOTIFY_JUMP "jump" @@ -70,10 +73,11 @@ // The kind of things granted by HUD items in game, that do not manifest as // on-screen icons, but rather go to examine text. -#define EXAMINE_HUD_SECURITY_READ "security_read" -#define EXAMINE_HUD_SECURITY_WRITE "security_write" -#define EXAMINE_HUD_MEDICAL "medical" -#define EXAMINE_HUD_SKILLS "skills" +#define EXAMINE_HUD_SECURITY_READ (1<<0) //"security_read" +#define EXAMINE_HUD_SECURITY_WRITE (1<<1) //"security_write" +#define EXAMINE_HUD_MEDICAL (1<<2) //"medical" +#define EXAMINE_HUD_SKILLS (1<<3) //"skills" +#define EXAMINE_HUD_BOTANY (1<<4) //"botany" // Consider these images/atoms as part of the UI/HUD (apart of the appearance_flags) diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index a7614b1c366..e944bc746eb 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -1,22 +1,12 @@ -//Languages! -#define LANGUAGE_HUMAN 1 -#define LANGUAGE_ALIEN 2 -#define LANGUAGE_DOG 4 -#define LANGUAGE_CAT 8 -#define LANGUAGE_BINARY 16 -#define LANGUAGE_OTHER 32768 - -#define LANGUAGE_UNIVERSAL 65535 - //Language flags. -#define WHITELISTED 1 // Language is available if the speaker is whitelisted. -#define RESTRICTED 2 // Language can only be accquired by spawning or an admin. -#define HIVEMIND 16 // Broadcast to all mobs with this language. -#define NONGLOBAL 32 // Do not add to general languages list -#define INNATE 64 // All mobs can be assumed to speak and understand this language (audible emotes) -#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message -#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems -#define NOBABEL 512 // Not granted by book of babel. Typically antag languages. +#define WHITELISTED (1<<0) // Language is available if the speaker is whitelisted. +#define RESTRICTED (1<<1) // Language can only be accquired by spawning or an admin. +#define HIVEMIND (1<<4) // Broadcast to all mobs with this language. +#define NONGLOBAL (1<<5) // Do not add to general languages list +#define INNATE (1<<6) // All mobs can be assumed to speak and understand this language (audible emotes) +#define NO_TALK_MSG (1<<7) // Do not show the "\The [speaker] talks into \the [radio]" message +#define NO_STUTTER (1<<8) // No stuttering, slurring, or other speech problems +#define NOBABEL (1<<9) // Not granted by book of babel. Typically antag languages. //Auto-accent level defines. #define AUTOHISS_OFF 0 diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 687490ed47e..608a444003d 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -21,63 +21,25 @@ #define APC_FULLY_CHARGED 2 //computer3 error codes, move lower in the file when it passes dev -Sayu - #define PROG_CRASH 1 // Generic crash - #define MISSING_PERIPHERAL 2 // Missing hardware - #define BUSTED_ASS_COMPUTER 4 // Self-perpetuating error. BAC will continue to crash forever. - #define MISSING_PROGRAM 8 // Some files try to automatically launch a program. This is that failing. - #define FILE_DRM 16 // Some files want to not be copied/moved. This is them complaining that you tried. - #define NETWORK_FAILURE 32 - -#define IMPRINTER 1 //For circuits. Uses glass/chemicals. -#define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals -#define AUTOLATHE 4 //Uses glass/metal only. -#define CRAFTLATHE 8 //Uses fuck if I know. For use eventually. -#define MECHFAB 16 //Remember, objects utilising this flag should have construction_time and construction_cost vars. -#define PODFAB 32 //Used by the spacepod part fabricator. Same idea as the mechfab -#define BIOGENERATOR 64 //Uses biomass -#define SMELTER 128 //uses various minerals + #define PROG_CRASH (1<<0) // Generic crash + #define MISSING_PERIPHERAL (1<<1) // Missing hardware + #define BUSTED_ASS_COMPUTER (1<<2) // Self-perpetuating error. BAC will continue to crash forever. + #define MISSING_PROGRAM (1<<3) // Some files try to automatically launch a program. This is that failing. + #define FILE_DRM (1<<4) // Some files want to not be copied/moved. This is them complaining that you tried. + #define NETWORK_FAILURE (1<<5) + +#define IMPRINTER (1<<0) //For circuits. Uses glass/chemicals. +#define PROTOLATHE (1<<1) //New stuff. Uses glass/metal/chemicals +#define AUTOLATHE (1<<2) //Uses glass/metal only. +#define CRAFTLATHE (1<<3) //Uses fuck if I know. For use eventually. +#define MECHFAB (1<<4) //Remember, objects utilising this flag should have construction_time and construction_cost vars. +#define PODFAB (1<<5) //Used by the spacepod part fabricator. Same idea as the mechfab +#define BIOGENERATOR (1<<6) //Uses biomass +#define SMELTER (1<<7) //uses various minerals //Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable. #define HYDRO_SPEED_MULTIPLIER 1 -//Modular computer/NTNet defines - -//Modular computer part defines -#define MC_CPU "CPU" -#define MC_HDD "HDD" -#define MC_SDD "SDD" -#define MC_CARD "CARD" -#define MC_NET "NET" -#define MC_PRINT "PRINT" -#define MC_CELL "CELL" -#define MC_CHARGE "CHARGE" -#define MC_AI "AI" - -//NTNet stuff, for modular computers - // NTNet module-configuration values. Do not change these. If you need to add another use larger number (5..6..7 etc) -#define NTNET_SOFTWAREDOWNLOAD 1 // Downloads of software from NTNet -#define NTNET_PEERTOPEER 2 // P2P transfers of files between devices -#define NTNET_COMMUNICATION 3 // Communication (messaging) -#define NTNET_SYSTEMCONTROL 4 // Control of various systems, RCon, air alarm control, etc. - -//NTNet transfer speeds, used when downloading/uploading a file/program. -#define NTNETSPEED_LOWSIGNAL 0.5 // GQ/s transfer speed when the device is wirelessly connected and on Low signal -#define NTNETSPEED_HIGHSIGNAL 1 // GQ/s transfer speed when the device is wirelessly connected and on High signal -#define NTNETSPEED_ETHERNET 2 // GQ/s transfer speed when the device is using wired connection - -//Caps for NTNet logging. Less than 10 would make logging useless anyway, more than 500 may make the log browser too laggy. Defaults to 100 unless user changes it. -#define MAX_NTNET_LOGS 300 -#define MIN_NTNET_LOGS 10 - -//Program bitflags -#define PROGRAM_ALL 7 -#define PROGRAM_CONSOLE 1 -#define PROGRAM_LAPTOP 2 -#define PROGRAM_TABLET 4 -//Program states -#define PROGRAM_STATE_KILLED 0 -#define PROGRAM_STATE_BACKGROUND 1 -#define PROGRAM_STATE_ACTIVE 2 // Demotion Console (card/minor/*) departments #define TARGET_DEPT_GENERIC 1 diff --git a/code/__DEFINES/mecha.dm b/code/__DEFINES/mecha.dm index b414f146705..24b500fa8f8 100644 --- a/code/__DEFINES/mecha.dm +++ b/code/__DEFINES/mecha.dm @@ -20,3 +20,7 @@ #define MECHA_LOOSE_BOLTS 2 #define MECHA_OPEN_HATCH 3 #define MECHA_UNSECURE_CELL 4 + +#define MODULE_SELECTABLE_NONE 0 +#define MODULE_SELECTABLE_TOGGLE 1 +#define MODULE_SELECTABLE_FULL 2 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index ea60af8cb86..6b266774d8f 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -1,16 +1,6 @@ //Object specific defines #define CANDLE_LUM 3 //For how bright candles are -//Directions (already defined on BYOND natively, purely here for reference) -//#define NORTH 1 -//#define SOUTH 2 -//#define EAST 4 -//#define WEST 8 -//#define NORTHEAST 5 -//#define SOUTHEAST 6 -//#define NORTHWEST 9 -//#define SOUTHWEST 10 - //Security levels #define SEC_LEVEL_GREEN 0 #define SEC_LEVEL_BLUE 1 @@ -179,39 +169,40 @@ #define MFOAM_IRON 2 //Human Overlays Indexes///////// -#define BODY_LAYER 43 -#define MUTANTRACE_LAYER 42 -#define WING_UNDERLIMBS_LAYER 41 -#define TAIL_UNDERLIMBS_LAYER 40 //Tail split-rendering. -#define LIMBS_LAYER 39 -#define INTORGAN_LAYER 38 -#define MARKINGS_LAYER 37 -#define UNDERWEAR_LAYER 36 -#define MUTATIONS_LAYER 35 -#define H_DAMAGE_LAYER 34 -#define UNIFORM_LAYER 33 -#define SHOES_LAYER 32 -#define OVER_SHOES_LAYER 31 -#define ID_LAYER 30 -#define GLOVES_LAYER 29 -#define EARS_LAYER 28 -#define SUIT_LAYER 27 -#define BELT_LAYER 26 //Possible make this an overlay of somethign required to wear a belt? -#define NECK_LAYER 25 -#define SUIT_STORE_LAYER 24 -#define BACK_LAYER 23 -#define HEAD_ACCESSORY_LAYER 22 -#define FHAIR_LAYER 21 -#define GLASSES_LAYER 20 -#define HAIR_LAYER 19 //TODO: make part of head layer? -#define HEAD_ACC_OVER_LAYER 18 //Select-layer rendering. -#define FHAIR_OVER_LAYER 17 //Select-layer rendering. -#define GLASSES_OVER_LAYER 16 //Select-layer rendering. -#define WING_LAYER 15 -#define TAIL_LAYER 14 //bs12 specific. this hack is probably gonna come back to haunt me -#define FACEMASK_LAYER 13 -#define OVER_MASK_LAYER 12 //Select-layer rendering. -#define HEAD_LAYER 11 +#define BODY_LAYER 44 +#define MUTANTRACE_LAYER 43 +#define WING_UNDERLIMBS_LAYER 42 +#define TAIL_UNDERLIMBS_LAYER 41 //Tail split-rendering. +#define LIMBS_LAYER 40 +#define INTORGAN_LAYER 39 +#define MARKINGS_LAYER 38 +#define UNDERWEAR_LAYER 37 +#define MUTATIONS_LAYER 36 +#define H_DAMAGE_LAYER 35 +#define UNIFORM_LAYER 34 +#define SHOES_LAYER 33 +#define OVER_SHOES_LAYER 32 +#define ID_LAYER 31 +#define GLOVES_LAYER 30 +#define EARS_LAYER 29 +#define SUIT_LAYER 28 +#define BELT_LAYER 27 //Possible make this an overlay of somethign required to wear a belt? +#define NECK_LAYER 26 +#define SUIT_STORE_LAYER 25 +#define BACK_LAYER 24 +#define HEAD_ACCESSORY_LAYER 23 +#define FHAIR_LAYER 22 +#define GLASSES_LAYER 21 +#define HAIR_LAYER 20 //TODO: make part of head layer? +#define HEAD_ACC_OVER_LAYER 19 //Select-layer rendering. +#define FHAIR_OVER_LAYER 18 //Select-layer rendering. +#define GLASSES_OVER_LAYER 17 //Select-layer rendering. +#define WING_LAYER 16 +#define TAIL_LAYER 15 //bs12 specific. this hack is probably gonna come back to haunt me +#define FACEMASK_LAYER 14 +#define OVER_MASK_LAYER 13 //Select-layer rendering. +#define HEAD_LAYER 12 +#define OVER_HEAD_LAYER 11 #define COLLAR_LAYER 10 #define HANDCUFF_LAYER 9 #define LEGCUFF_LAYER 8 @@ -222,7 +213,7 @@ #define FIRE_LAYER 3 //If you're on fire #define MISC_LAYER 2 #define FROZEN_LAYER 1 -#define TOTAL_LAYERS 43 +#define TOTAL_LAYERS 44 ///Access Region Codes/// #define REGION_ALL 0 @@ -385,7 +376,7 @@ #define EXPLOSION_BLOCK_PROC -1 // The SQL version required by this version of the code -#define SQL_VERSION 31 +#define SQL_VERSION 32 // Vending machine stuff #define CAT_NORMAL 1 @@ -489,15 +480,15 @@ #define SYMPTOM_ACTIVATION_PROB 3 // Atmos stuff that fucking terrifies me -#define LINDA_SPAWN_HEAT 1 -#define LINDA_SPAWN_20C 2 -#define LINDA_SPAWN_TOXINS 4 -#define LINDA_SPAWN_OXYGEN 8 -#define LINDA_SPAWN_CO2 16 -#define LINDA_SPAWN_NITROGEN 32 -#define LINDA_SPAWN_N2O 64 -#define LINDA_SPAWN_AGENT_B 128 -#define LINDA_SPAWN_AIR 256 +#define LINDA_SPAWN_HEAT (1<<0) +#define LINDA_SPAWN_20C (1<<1) +#define LINDA_SPAWN_TOXINS (1<<2) +#define LINDA_SPAWN_OXYGEN (1<<3) +#define LINDA_SPAWN_CO2 (1<<4) +#define LINDA_SPAWN_NITROGEN (1<<5) +#define LINDA_SPAWN_N2O (1<<6) +#define LINDA_SPAWN_AGENT_B (1<<7) +#define LINDA_SPAWN_AIR (1<<8) /// Send to the primary Discord webhook #define DISCORD_WEBHOOK_PRIMARY "PRIMARY" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 1469782fad1..104c46a08c4 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -1,12 +1,12 @@ ///////////////////ORGAN DEFINES/////////////////// // Organ defines. -#define ORGAN_BROKEN 1 -#define ORGAN_ROBOT 2 -#define ORGAN_SPLINTED 4 -#define ORGAN_DEAD 8 -#define ORGAN_MUTATED 16 -#define ORGAN_INT_BLEED 32 +#define ORGAN_BROKEN (1<<0) +#define ORGAN_ROBOT (1<<1) +#define ORGAN_SPLINTED (1<<2) +#define ORGAN_DEAD (1<<3) +#define ORGAN_MUTATED (1<<4) +#define ORGAN_INT_BLEED (1<<5) #define PROCESS_ACCURACY 10 @@ -86,24 +86,24 @@ #define SYNTHETIC 2 // Appearance change flags -#define APPEARANCE_UPDATE_DNA 1 -#define APPEARANCE_RACE 2|APPEARANCE_UPDATE_DNA -#define APPEARANCE_GENDER 4|APPEARANCE_UPDATE_DNA -#define APPEARANCE_SKIN 8 -#define APPEARANCE_HAIR 16 -#define APPEARANCE_HAIR_COLOR 32 -#define APPEARANCE_SECONDARY_HAIR_COLOR 64 -#define APPEARANCE_FACIAL_HAIR 128 -#define APPEARANCE_FACIAL_HAIR_COLOR 256 -#define APPEARANCE_SECONDARY_FACIAL_HAIR_COLOR 512 -#define APPEARANCE_EYE_COLOR 1024 +#define APPEARANCE_UPDATE_DNA (1<<0) +#define APPEARANCE_RACE (1<<1|APPEARANCE_UPDATE_DNA) +#define APPEARANCE_GENDER (1<<2|APPEARANCE_UPDATE_DNA) +#define APPEARANCE_SKIN (1<<3) +#define APPEARANCE_HAIR (1<<4) +#define APPEARANCE_HAIR_COLOR (1<<5) +#define APPEARANCE_SECONDARY_HAIR_COLOR (1<<6) +#define APPEARANCE_FACIAL_HAIR (1<<7) +#define APPEARANCE_FACIAL_HAIR_COLOR (1<<8) +#define APPEARANCE_SECONDARY_FACIAL_HAIR_COLOR (1<<9) +#define APPEARANCE_EYE_COLOR (1<<10) #define APPEARANCE_ALL_HAIR APPEARANCE_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_SECONDARY_HAIR_COLOR|APPEARANCE_FACIAL_HAIR|APPEARANCE_FACIAL_HAIR_COLOR|APPEARANCE_SECONDARY_FACIAL_HAIR_COLOR -#define APPEARANCE_HEAD_ACCESSORY 2048 -#define APPEARANCE_MARKINGS 4096 -#define APPEARANCE_BODY_ACCESSORY 8192 -#define APPEARANCE_ALT_HEAD 16384 +#define APPEARANCE_HEAD_ACCESSORY (1<<11) +#define APPEARANCE_MARKINGS (1<<12) +#define APPEARANCE_BODY_ACCESSORY (1<<13) +#define APPEARANCE_ALT_HEAD (1<<14) #define APPEARANCE_ALL_BODY APPEARANCE_ALL_HAIR|APPEARANCE_HEAD_ACCESSORY|APPEARANCE_MARKINGS|APPEARANCE_BODY_ACCESSORY|APPEARANCE_ALT_HEAD -#define APPEARANCE_ALL 32767 +#define APPEARANCE_ALL APPEARANCE_RACE|APPEARANCE_GENDER|APPEARANCE_SKIN|APPEARANCE_EYE_COLOR|APPEARANCE_ALL_HAIR|APPEARANCE_ALL_BODY #define STAMINA_REGEN_BLOCK_TIME (10 SECONDS) @@ -181,11 +181,11 @@ #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully #define EYE_SHINE_THRESHOLD 6 //dark_view threshold past which a humanoid's eyes will 'shine' in the dark. -#define STATUS_UPDATE_HEALTH 1 -#define STATUS_UPDATE_STAT 2 -#define STATUS_UPDATE_STAMINA 8 -#define STATUS_UPDATE_BLIND 16 -#define STATUS_UPDATE_NEARSIGHTED 64 +#define STATUS_UPDATE_HEALTH (1<<0) +#define STATUS_UPDATE_STAT (1<<1) +#define STATUS_UPDATE_STAMINA (1<<2) +#define STATUS_UPDATE_BLIND (1<<3) +#define STATUS_UPDATE_NEARSIGHTED (1<<4) #define STATUS_UPDATE_NONE 0 #define STATUS_UPDATE_ALL (~0) diff --git a/code/__DEFINES/organ_defines.dm b/code/__DEFINES/organ_defines.dm index 06300d2d299..f71a01b32c0 100644 --- a/code/__DEFINES/organ_defines.dm +++ b/code/__DEFINES/organ_defines.dm @@ -54,3 +54,6 @@ #define ORGAN_MANIPULATION_NOEFFECT 1 #define ORGAN_MANIPULATION_ABDUCTOR 2 +/// used for species that can see without eyes +#define NO_VISION_ORGAN "no_vision_organ" + diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 11c09d747fe..b781d9496c2 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -1,42 +1,42 @@ //Preference toggles -#define SOUND_ADMINHELP 1 -#define SOUND_MIDI 2 -#define SOUND_AMBIENCE 4 -#define SOUND_LOBBY 8 -#define SOUND_HEARTBEAT 32 -#define SOUND_BUZZ 64 -#define SOUND_INSTRUMENTS 128 -#define SOUND_MENTORHELP 256 -#define SOUND_DISCO 512 -#define SOUND_AI_VOICE 1024 -#define SOUND_PRAYERNOTIFY 2048 +#define SOUND_ADMINHELP (1<<0) +#define SOUND_MIDI (1<<1) +#define SOUND_AMBIENCE (1<<2) +#define SOUND_LOBBY (1<<3) +#define SOUND_HEARTBEAT (1<<5) // 16 is lost, don't touch because it's prefs +#define SOUND_BUZZ (1<<6) +#define SOUND_INSTRUMENTS (1<<7) +#define SOUND_MENTORHELP (1<<8) +#define SOUND_DISCO (1<<9) +#define SOUND_AI_VOICE (1<<10) +#define SOUND_PRAYERNOTIFY (1<<11) #define SOUND_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|SOUND_HEARTBEAT|SOUND_BUZZ|SOUND_INSTRUMENTS|SOUND_MENTORHELP|SOUND_DISCO|SOUND_AI_VOICE|SOUND_PRAYERNOTIFY) -#define PREFTOGGLE_CHAT_OOC 1 -#define PREFTOGGLE_CHAT_DEAD 2 -#define PREFTOGGLE_CHAT_GHOSTEARS 4 -#define PREFTOGGLE_CHAT_GHOSTSIGHT 8 -#define PREFTOGGLE_CHAT_PRAYER 16 -#define PREFTOGGLE_CHAT_RADIO 32 -#define PREFTOGGLE_AZERTY 64 -#define PREFTOGGLE_CHAT_DEBUGLOGS 128 -#define PREFTOGGLE_CHAT_LOOC 256 -#define PREFTOGGLE_CHAT_GHOSTRADIO 512 -#define PREFTOGGLE_SHOW_TYPING 1024 -#define PREFTOGGLE_DISABLE_SCOREBOARD 2048 -#define PREFTOGGLE_DISABLE_KARMA_REMINDER 4096 -#define PREFTOGGLE_MEMBER_PUBLIC 8192 -#define PREFTOGGLE_CHAT_NO_ADMINLOGS 16384 -#define PREFTOGGLE_DONATOR_PUBLIC 32768 -#define PREFTOGGLE_CHAT_NO_TICKETLOGS 65536 -#define PREFTOGGLE_UI_DARKMODE 131072 -#define PREFTOGGLE_DISABLE_KARMA 262144 -#define PREFTOGGLE_CHAT_NO_MENTORTICKETLOGS 524288 -#define PREFTOGGLE_TYPING_ONCE 1048576 -#define PREFTOGGLE_AMBIENT_OCCLUSION 2097152 -#define PREFTOGGLE_CHAT_GHOSTPDA 4194304 -#define PREFTOGGLE_NUMPAD_TARGET 8388608 +#define PREFTOGGLE_CHAT_OOC (1<<0) +#define PREFTOGGLE_CHAT_DEAD (1<<1) +#define PREFTOGGLE_CHAT_GHOSTEARS (1<<2) +#define PREFTOGGLE_CHAT_GHOSTSIGHT (1<<3) +#define PREFTOGGLE_CHAT_PRAYER (1<<4) +#define PREFTOGGLE_CHAT_RADIO (1<<5) +#define PREFTOGGLE_AZERTY (1<<6) +#define PREFTOGGLE_CHAT_DEBUGLOGS (1<<7) +#define PREFTOGGLE_CHAT_LOOC (1<<8) +#define PREFTOGGLE_CHAT_GHOSTRADIO (1<<9) +#define PREFTOGGLE_SHOW_TYPING (1<<10) +#define PREFTOGGLE_DISABLE_SCOREBOARD (1<<11) +#define PREFTOGGLE_DISABLE_KARMA_REMINDER (1<<12) +#define PREFTOGGLE_MEMBER_PUBLIC (1<<13) +#define PREFTOGGLE_CHAT_NO_ADMINLOGS (1<<14) +#define PREFTOGGLE_DONATOR_PUBLIC (1<<15) +#define PREFTOGGLE_CHAT_NO_TICKETLOGS (1<<16) +#define PREFTOGGLE_UI_DARKMODE (1<<17) +#define PREFTOGGLE_DISABLE_KARMA (1<<18) +#define PREFTOGGLE_CHAT_NO_MENTORTICKETLOGS (1<<19) +#define PREFTOGGLE_TYPING_ONCE (1<<20) +#define PREFTOGGLE_AMBIENT_OCCLUSION (1<<21) +#define PREFTOGGLE_CHAT_GHOSTPDA (1<<22) +#define PREFTOGGLE_NUMPAD_TARGET (1<<23) #define TOGGLES_TOTAL 16777215 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 564247455e3..5adb7da9ce5 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -5,14 +5,14 @@ #define REAGENT_OVERDOSE_EFFECT 1 #define REAGENT_OVERDOSE_FLAGS 2 // container_type defines -#define INJECTABLE 1 // Makes it possible to add reagents through droppers and syringes. -#define DRAWABLE 2 // Makes it possible to remove reagents through syringes. +#define INJECTABLE (1<<0) // Makes it possible to add reagents through droppers and syringes. +#define DRAWABLE (1<<1) // Makes it possible to remove reagents through syringes. -#define REFILLABLE 4 // Makes it possible to add reagents through any reagent container. -#define DRAINABLE 8 // Makes it possible to remove reagents through any reagent container. +#define REFILLABLE (1<<3) // Makes it possible to add reagents through any reagent container. +#define DRAINABLE (1<<4) // Makes it possible to remove reagents through any reagent container. -#define TRANSPARENT 16 // Used on containers which you want to be able to see the reagents off. -#define AMOUNT_VISIBLE 32 // For non-transparent containers that still have the general amount of reagents in them visible. +#define TRANSPARENT (1<<5) // Used on containers which you want to be able to see the reagents off. +#define AMOUNT_VISIBLE (1<<6) // For non-transparent containers that still have the general amount of reagents in them visible. // Is an open container for all intents and purposes. #define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT) diff --git a/code/__DEFINES/sight.dm b/code/__DEFINES/sight.dm index a77a63cfcd6..9d647fec8e9 100644 --- a/code/__DEFINES/sight.dm +++ b/code/__DEFINES/sight.dm @@ -43,8 +43,13 @@ #define ANTAGHUD 3 //for clothing visor toggles, these determine which vars to toggle -#define VISOR_FLASHPROTECT (1<<0) -#define VISOR_TINT (1<<1) -#define VISOR_VISIONFLAGS (1<<2) //all following flags only matter for glasses -#define VISOR_DARKNESSVIEW (1<<3) -#define VISOR_INVISVIEW (1<<4) +#define VISOR_FLASHPROTECT (1<<0) +#define VISOR_TINT (1<<1) +#define VISOR_VISIONFLAGS (1<<2) //all following flags only matter for glasses +#define VISOR_DARKNESSVIEW (1<<3) +#define VISOR_INVISVIEW (1<<4) +#define VISOR_HUDTYPE (1<<5) +#define VISOR_EXAM_EXTENTIONS (1<<6) + + +#define VISOR_FULL_HUD (VISOR_HUDTYPE|VISOR_EXAM_EXTENTIONS) diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm index 11f779692d8..e34a81282b1 100644 --- a/code/__DEFINES/stat.dm +++ b/code/__DEFINES/stat.dm @@ -10,11 +10,11 @@ #define STATUS_CLOSE -1 // Close the interface // bitflags for machine stat variable -#define BROKEN 1 -#define NOPOWER 2 -#define POWEROFF 4 // tbd -#define MAINT 8 // under maintaince -#define EMPED 16 // temporary broken by EMP pulse +#define BROKEN (1<<0) +#define NOPOWER (1<<1) +#define POWEROFF (1<<2) // tbd +#define MAINT (1<<3) // under maintaince +#define EMPED (1<<4) // temporary broken by EMP pulse /* Shuttles diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 4fe0c1fd7db..2fdda2ee188 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -164,3 +164,5 @@ /// Status effect given when someone uses the Give Item command to offer an item to another player. #define STATUS_EFFECT_OFFERING_ITEM /datum/status_effect/offering_item + +#define STATUS_EFFECT_STARING /datum/status_effect/staring //Used in ../human/examine() proc diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 0f65c67141a..efd68afed06 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -278,7 +278,7 @@ Turf and target are seperate in case you want to teleport some distance from a t for(var/mob/living/silicon/ai/A in GLOB.alive_mob_list) if(A.stat == DEAD) continue - if(A.control_disabled == 1) + if(A.control_disabled) continue if(isclocker(A)) //the active ais list used for uploads. Avoiding to changing the laws even the AI is fully converted continue @@ -1477,6 +1477,9 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) stop_orbit() orbiting = A + if(ismob(A)) + var/mob/M = A + M.ghost_orbiting += 1 var/matrix/initial_transform = matrix(transform) cached_transform = initial_transform var/lastloc = loc @@ -1511,12 +1514,18 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) sleep(0.6) if(orbiting == A) //make sure we haven't started orbiting something else. + if(ismob(orbiting)) + var/mob/M = orbiting + M.ghost_orbiting -= 1 orbiting = null transform = cached_transform SpinAnimation(0, 0, parallel = FALSE) /atom/movable/proc/stop_orbit() + if(ismob(orbiting)) + var/mob/M = orbiting + M.ghost_orbiting -= 1 orbiting = null transform = cached_transform SpinAnimation(0, 0, parallel = FALSE) @@ -1892,6 +1901,13 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) return pois +/proc/get_observers() + var/list/ghosts = list() + for(var/mob/dead/observer/M in GLOB.player_list) // for every observer with a client + ghosts += M + + return ghosts + /proc/flash_color(mob_or_client, flash_color=COLOR_CULT_RED, flash_time=20) var/client/C if(istype(mob_or_client, /mob)) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index e3d450ad800..6618eb1d9aa 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -46,7 +46,9 @@ GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals", //1 "CMO Office", "Chemistry", "Research", "RD Office", //10, 11, 12 ,13 "Robotics", "HoP Office", "Library", "Chapel", //14, 15, 16, 17 "Captain's Office", "Bar", "Kitchen", "Hydroponics", //18, 19, 20, 21 - "Janitor Closet","Genetics","Brig Physician", "Morgue")) //22, 23, 24, 25 + "Janitor Closet","Genetics","Brig Physician", "Morgue", //22, 23, 24, 25 + "NTRep Office", "Detective", "Magistrate's Office", "IAA Office", //26, 27, 28, 29 + "Mechanic")) // 30 GLOBAL_LIST_INIT(hit_appends, list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")) diff --git a/code/_globalvars/lists/misc.dm b/code/_globalvars/lists/misc.dm index e3ba97dfa3d..aff85e3b590 100644 --- a/code/_globalvars/lists/misc.dm +++ b/code/_globalvars/lists/misc.dm @@ -33,10 +33,17 @@ GLOBAL_LIST_INIT(restricted_camera_networks, list( "UO45", "UO45R", "UO71", + "MO19", + "MO19X", + "MO19R", "Xeno", "Hotel", + "spacehotel", + "spacebar", + "USSP", "USSP_LAB", - "USSP_gorky17" + "USSP_gorky17", + "Bunker1" )) //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them. GLOBAL_LIST_INIT(ruin_landmarks, list()) diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 1d87b5f1bfe..649d8b94abf 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -1,9 +1,10 @@ /obj/screen/movable/action_button + desc = "CTRL-Shift click on this button to bind it to a hotkey." var/datum/action/linked_action var/actiontooltipstyle = "" screen_loc = null var/ordered = TRUE - + var/datum/keybinding/mob/trigger_action_button/linked_keybind /obj/screen/movable/action_button/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) if(locked && could_be_click_lag()) // in case something bad happend and game realised we dragged our ability instead of pressing it @@ -34,6 +35,9 @@ /obj/screen/movable/action_button/Click(location,control,params) var/list/modifiers = params2list(params) + if(modifiers["ctrl"] && modifiers["shift"]) + INVOKE_ASYNC(src, PROC_REF(set_to_keybind), usr) + return TRUE if(usr.next_click > world.time) return FALSE usr.changeNext_click(1) @@ -62,11 +66,36 @@ animate(src, transform = matrix(), time = 0.3 SECONDS, alpha = prev_alpha) return TRUE +/obj/screen/movable/action_button/proc/set_to_keybind(mob/user) + var/keybind_to_set_to = sanitize_russian_key_to_english(input(user, "What keybind do you want to set this action button to? You can use non-single keys, but they must be in the correct case, f.e. \"Space\" or \"CtrlE\"") as text) + if(length(keybind_to_set_to) == 1) + keybind_to_set_to = uppertext(keybind_to_set_to) + if(keybind_to_set_to) + if(linked_keybind) + clean_up_keybinds(user) + var/datum/keybinding/mob/trigger_action_button/triggerer = new + triggerer.linked_action = linked_action + user.client.active_keybindings[keybind_to_set_to] += list(triggerer) + linked_keybind = triggerer + triggerer.binded_to = keybind_to_set_to + to_chat(user, span_info("[src] has been binded to [keybind_to_set_to]!")) + else if(linked_keybind) + clean_up_keybinds(user) + to_chat(user, span_info("Your active keybinding on [src] has been cleared.")) + /obj/screen/movable/action_button/AltClick(mob/user) . = linked_action.AltTrigger() linked_action.UpdateButtonIcon() +/obj/screen/movable/action_button/proc/clean_up_keybinds(mob/owner) + if(linked_keybind) + owner.client.active_keybindings[linked_keybind.binded_to] -= (linked_keybind) + if(!length(owner.client.active_keybindings[linked_keybind.binded_to])) + owner.client.active_keybindings[linked_keybind.binded_to] = null + owner.client.active_keybindings -= linked_keybind.binded_to + QDEL_NULL(linked_keybind) + //Hide/Show Action Buttons ... Button /obj/screen/movable/action_button/hide_toggle @@ -140,7 +169,14 @@ /obj/screen/movable/action_button/MouseEntered(location, control, params) if(!QDELETED(src)) - openToolTip(usr, src, params, title = name, content = desc, theme = actiontooltipstyle) + if(!linked_keybind) + openToolTip(usr, src, params, title = name, content = desc, theme = actiontooltipstyle) + else + var/list/desc_information = list() + desc_information += desc + desc_information += "This action is currently bound to the [linked_keybind.binded_to] key." + desc_information = desc_information.Join(" ") + openToolTip(usr, src, params, title = name, content = desc_information, theme = actiontooltipstyle) /obj/screen/movable/action_button/MouseExited() diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index 12d6c020331..0804ceb287f 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -1,6 +1,7 @@ /mob/dead/observer/create_mob_hud() if(client && !hud_used) hud_used = new /datum/hud/ghost(src) + SEND_SIGNAL(src, COMSIG_MOB_HUD_CREATED) /obj/screen/ghost icon = 'icons/mob/screen_ghost.dmi' diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 870f4558257..27f504d88cc 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -102,6 +102,7 @@ /datum/hud/robot/New(mob/user) ..() + user.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness) var/obj/screen/using var/mob/living/silicon/robot/mymobR = mymob diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 248ea88aa78..3bb9e41f6ee 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -279,8 +279,27 @@ if(!choice) return TRUE + if(PL["alt"]) + AltClick(usr, choice) + return + return set_selected_zone(choice) +/obj/screen/zone_sel/AltClick(mob/user, choice) + + if(user.next_click > world.time || user.next_move > world.time) + return FALSE + user.changeNext_click(1) + + var/obj/item/holding_item = user.get_active_hand() + var/old_selecting = selecting + if(!istype(holding_item)) + return FALSE + if(!set_selected_zone(choice, FALSE)) + return FALSE + holding_item.melee_attack_chain(user, user) + set_selected_zone(old_selecting, FALSE) + /obj/screen/zone_sel/MouseEntered(location, control, params) MouseMove(location, control, params) @@ -378,7 +397,7 @@ return BODY_ZONE_WING -/obj/screen/zone_sel/proc/set_selected_zone(choice) +/obj/screen/zone_sel/proc/set_selected_zone(choice, update_overlay = TRUE) if(!hud || !hud.mymob) return FALSE @@ -388,7 +407,8 @@ if(choice != selecting) selecting = choice hud.mymob.zone_selected = choice - update_icon(UPDATE_OVERLAYS) + if(update_overlay) + update_icon(UPDATE_OVERLAYS) return TRUE diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm index dda48fc7f27..4be246df7da 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/jobs.dm @@ -531,8 +531,7 @@ SUBSYSTEM_DEF(jobs) if(equipped != 1) var/obj/item/clothing/glasses/G = H.glasses if(istype(G) && !G.prescription) - G.prescription = TRUE - G.name = "prescription [G.name]" + G.upgrade_prescription() H.update_nearsighted_effects() return H diff --git a/code/controllers/subsystem/non-firing/cargo_quests.dm b/code/controllers/subsystem/non-firing/cargo_quests.dm index 89272e87f99..4351828a442 100644 --- a/code/controllers/subsystem/non-firing/cargo_quests.dm +++ b/code/controllers/subsystem/non-firing/cargo_quests.dm @@ -48,6 +48,7 @@ SUBSYSTEM_DEF(cargo_quests) easy_mode_difficulties[quest_difficulty] = quest_difficulty.weight +/datum/controller/subsystem/cargo_quests/proc/roll_start_quests() for(var/I = 1 to NUMBER_OF_CC_QUEST) create_new_quest(pick(centcomm_departaments), easy_mode = TRUE) for(var/I = 1 to NUMBER_OF_CORP_QUEST) @@ -151,6 +152,9 @@ SUBSYSTEM_DEF(cargo_quests) if(!target_storage) return FALSE + for(var/datum/cargo_quest/quest in target_storage.current_quests) + quest.completed_quest() + if(target_storage.customer in corporations) max_reward = max_reward * 10 diff --git a/code/controllers/subsystem/processing/transittube.dm b/code/controllers/subsystem/processing/transittube.dm new file mode 100644 index 00000000000..1e9f4ec8ed6 --- /dev/null +++ b/code/controllers/subsystem/processing/transittube.dm @@ -0,0 +1,7 @@ +PROCESSING_SUBSYSTEM_DEF(transit_tube) + name = "Transit Tubes" + wait = 1 + flags = SS_NO_INIT|SS_BACKGROUND + offline_implications = "Transit tubes will no longer function. Admin intervention recommended, but shuttle call not required." + cpu_display = SS_CPUDISPLAY_DEFAULT + ss_id = "transit_tube" diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm index 92bc5e437c1..823e70b46c5 100644 --- a/code/controllers/subsystem/shuttles.dm +++ b/code/controllers/subsystem/shuttles.dm @@ -32,6 +32,7 @@ SUBSYSTEM_DEF(shuttle) var/points_per_crate = 5 //points gained per crate returned var/points_per_intel = 250 //points gained per intel returned var/centcom_message = null //Remarks from Centcom on how well you checked the last order. + var/datum/money_account/cargo_money_account var/list/techLevels = list() var/list/shoppinglist = list() var/list/requestlist = list() @@ -45,6 +46,8 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/Initialize() ordernum = rand(1,9000) + cargo_money_account = GLOB.department_accounts["Cargo"] + if(!emergency) WARNING("No /obj/docking_port/mobile/emergency placed on the map!") if(!backup_shuttle) diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index c5b615d4d4d..1f5ba549dbd 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -229,7 +229,7 @@ SUBSYSTEM_DEF(timer) * Generates a string with details about the timed event for debugging purposes */ /datum/controller/subsystem/timer/proc/get_timer_debug_string(datum/timedevent/TE) - . = "Timer: [TE]" + . = "Timer: [TE.getTimerInfo()]" . += "Prev: [TE.prev ? TE.prev : "NULL"], Next: [TE.next ? TE.next : "NULL"]" if(TE.spent) . += ", SPENT([TE.spent])" @@ -516,14 +516,6 @@ SUBSYSTEM_DEF(timer) * If the timed event is tracking client time, it will be added to a special bucket. */ /datum/timedevent/proc/bucketJoin() - // Generate debug-friendly name for timer - - /* Uncomment for explicit debugging, debug info is now handled in /datum/timedevent/proc/getTimerInfo() - name = "Timer: [id] (\ref[src]), TTR: [timeToRun], wait:[wait] Flags: [jointext(bitfield2list(flags, bitfield_flags), ", ")], \ - callBack: \ref[callBack], callBack.object: [callBack.object]\ref[callBack.object]([getcallingtype()]), \ - callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""]), source: [source]" - */ - if (bucket_joined) stack_trace("Bucket already joined! [getTimerInfo()]") @@ -566,11 +558,20 @@ SUBSYSTEM_DEF(timer) prev = null bucket_list[bucket_pos] = src +/** + * Returns debug information about timer + */ /datum/timedevent/proc/getTimerInfo() var/static/list/bitfield_flags = list("TIMER_UNIQUE", "TIMER_OVERRIDE", "TIMER_CLIENT_TIME", "TIMER_STOPPABLE", "TIMER_NO_HASH_WAIT", "TIMER_LOOP") - return "Timer: [id] (\ref[src]), TTR: [timeToRun], wait:[wait] Flags: [jointext(bitfield2list(flags, bitfield_flags), ", ")], \ - callBack: \ref[callBack], callBack.object: [callBack.object]\ref[callBack.object]([getcallingtype()]), \ - callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""]), source: [source]" + if(!name) + name = "Timer: [id] (\ref[src]), TTR: [timeToRun], wait:[wait] Flags: [jointext(bitfield2list(flags, bitfield_flags), ", ")], \ + callBack: \ref[callBack], callBack.object: [callBack.object]\ref[callBack.object]([getcallingtype()]), \ + callBack.delegate:[callBack.delegate]([callBack.arguments ? callBack.arguments.Join(", ") : ""]), source: [source]" + return name + +/datum/timedevent/can_vv_get(var_name) + getTimerInfo() + return ..() /** * Returns a string of the type of the callback for this timer diff --git a/code/datums/action.dm b/code/datums/action.dm index fc52021eebd..dcd6725fad1 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -13,14 +13,16 @@ var/icon_icon = 'icons/mob/actions/actions.dmi' var/mob/owner -/datum/action/New(var/Target) +/datum/action/New(Target) target = Target button = new button.linked_action = src button.name = name button.actiontooltipstyle = buttontooltipstyle - if(desc) - button.desc = desc + var/list/our_description = list() + our_description += desc + our_description += button.desc + button.desc = our_description.Join(" ") /datum/action/Destroy() if(owner) @@ -54,6 +56,7 @@ if(user.client) user.client.screen -= button + button.clean_up_keybinds(user) button.moved = FALSE //so the button appears in its normal position when given to another owner. button.locked = FALSE @@ -135,7 +138,10 @@ button.icon = button_icon button.icon_state = background_icon_state button.name = name - button.desc = desc + var/list/our_description = list() + our_description += desc + our_description += initial(button.desc) + button.desc = our_description.Join(" ") ApplyIcon(button) @@ -627,7 +633,10 @@ var/obj/effect/proc_holder/spell/spell = target spell.action = src name = spell.name - desc = spell.desc + var/list/our_description = list() + our_description += spell.desc + our_description += button.desc + button.desc = our_description.Join(" ") button_icon = spell.action_icon background_icon = spell.action_background_icon button_icon_state = spell.action_icon_state diff --git a/code/datums/components/proximity_monitor.dm b/code/datums/components/proximity_monitor.dm index 8f1dbeb8df4..c453dbce625 100644 --- a/code/datums/components/proximity_monitor.dm +++ b/code/datums/components/proximity_monitor.dm @@ -1,139 +1,291 @@ /** - * # Proximity monitor component + * # Basic Proximity Monitor * - * Attaching this component to an atom means that the atom will be able to detect mobs/objs moving within a 1 tile of it. + * Attaching this component to an atom means that the atom will be able to detect mobs or objects moving within a specified radius of it. * - * The component creates several `obj/effect/abstract/proximity_checker` objects, which follow the parent atom around, always making sure it's at the center. - * When something crosses one of these `proximiy_checker`s, the parent has the `HasProximity()` proc called on it, with the crossing mob/obj as the argument. + * The component creates several [/obj/effect/abstract/proximity_checker] objects, which follow the `parent` AKA `hasprox_receiver` around, always making sure it's at the center. + * When something crosses one of these proximiy checkers, the `hasprox_receiver` will have the `HasProximity()` proc called on it, with the crossing mob/obj as the argument. */ /datum/component/proximity_monitor - var/atom/owner - /// A list of currently created `/obj/effect/abstract/proximity_checker`s in use with this component. + can_transfer = TRUE + var/name = "Proximity detection field" + /// The primary atom the component is attached to and that will be receiving `HasProximity()` calls. Same as the `parent`. + var/atom/hasprox_receiver + /** + * A list which contains references to movable atoms which the `hasprox_receiver` has moved into. + * Used to handle complex situations where the receiver is nested several layers deep into an object. + * For example: inside of a box, that's inside of a bag, which is worn on a human. In this situation there are 3 locations we need to listen to for movement. + */ + var/list/nested_receiver_locs + /// The radius of the field, in tiles. + var/radius + /// A list of currently created [/obj/effect/abstract/proximity_checker] in use with this component. var/list/proximity_checkers + /// The type of checker object that should be used for the main field. + var/field_checker_type = /obj/effect/abstract/proximity_checker + /// Should the parent always detect proximity and update the field on movement, even if it's not on a turf? + var/always_active -/datum/component/proximity_monitor/Initialize() +/datum/component/proximity_monitor/Initialize(_radius = 1, _always_active = FALSE) . = ..() - if(!isatom(parent)) + if(!ismovable(parent) && !isturf(parent)) // No areas or datums allowed. return COMPONENT_INCOMPATIBLE - owner = parent + ASSERT(_radius >= 1) + hasprox_receiver = parent + radius = _radius + always_active = _always_active + nested_receiver_locs = list() create_prox_checkers() + if(isturf(hasprox_receiver.loc)) + toggle_checkers(TRUE) + else if(always_active) + toggle_checkers(TRUE) + else + toggle_checkers(FALSE) + /datum/component/proximity_monitor/Destroy(force, silent) + hasprox_receiver = null + nested_receiver_locs.Cut() QDEL_LIST(proximity_checkers) - owner = null return ..() /datum/component/proximity_monitor/RegisterWithParent() - . = ..() - if(ismovable(parent)) - RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(HandleMove)) + if(ismovable(hasprox_receiver)) + RegisterSignal(hasprox_receiver, COMSIG_MOVABLE_MOVED, PROC_REF(on_receiver_move)) + RegisterSignal(hasprox_receiver, COMSIG_MOVABLE_DISPOSING, PROC_REF(on_disposal_enter)) + RegisterSignal(hasprox_receiver, COMSIG_MOVABLE_EXIT_DISPOSALS, PROC_REF(on_disposal_exit)) + map_nested_locs() /datum/component/proximity_monitor/UnregisterFromParent() - . = ..() - if(ismovable(parent)) - UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) + if(ismovable(hasprox_receiver)) + UnregisterSignal(hasprox_receiver, list(COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_DISPOSING, COMSIG_MOVABLE_EXIT_DISPOSALS)) + clear_nested_locs() + +/** + * Called when the `hasprox_receiver` moves. + * + * Arguments: + * * datum/source - this will be the `hasprox_receiver` + * * atom/old_loc - the location the receiver just moved from + * * dir - the direction the reciever just moved in + */ +/datum/component/proximity_monitor/proc/on_receiver_move(datum/source, atom/old_loc, dir) + SIGNAL_HANDLER + + // It was just a normal tile-based move, so we return here. + if(dir) + move_prox_checkers(dir) + return + + // Moving onto a turf. + if(!isturf(old_loc) && isturf(hasprox_receiver.loc)) + toggle_checkers(TRUE) + clear_nested_locs() + + // Moving into an object. + else if(always_active) + toggle_checkers(TRUE) + map_nested_locs() + + // The receiver moved into something, but isn't `always_active`, so deactivate the checkers. + else + toggle_checkers(FALSE) + + recenter_prox_checkers() + +/** + * Called when an atom in `nested_receiver_locs` list moves, if one exists. + * + * Arguments: + * * atom/moved_atom - one of the atoms in `nested_receiver_locs` + * * atom/old_loc - the location `moved_atom` just moved from + * * dir - the direction `moved_atom` just moved in + */ +/datum/component/proximity_monitor/proc/on_nested_loc_move(atom/moved_atom, atom/old_loc, dir) + SIGNAL_HANDLER + + // It was just a normal tile-based move, so we return here. + if(dir) + move_prox_checkers(dir) + return + + // Moving onto a turf. + if(!isturf(old_loc) && isturf(moved_atom.loc)) + toggle_checkers(TRUE) + + map_nested_locs() + recenter_prox_checkers() + +/** + * Called when the receiver or an atom in the `nested_receiver_locs` list moves into a disposals holder object. + * + * This proc recieves arguments, but they aren't needed. + */ +/datum/component/proximity_monitor/proc/on_disposal_enter(datum/source) + SIGNAL_HANDLER + + toggle_checkers(FALSE) + +/** + * Called when the receiver or an atom in the `nested_receiver_locs` list moves out of a disposals holder object. + * + * This proc recieves arguments, but they aren't needed. + */ +/datum/component/proximity_monitor/proc/on_disposal_exit(datum/source) + SIGNAL_HANDLER + + toggle_checkers(TRUE) + +/** + * Registers signals to any nested locations the `hasprox_receiver` is in, excluding turfs, so they can be monitored for movement. + */ +/datum/component/proximity_monitor/proc/map_nested_locs() + clear_nested_locs() + var/atom/loc_to_check = hasprox_receiver.loc + + while(loc_to_check && !isturf(loc_to_check)) + if(loc_to_check in nested_receiver_locs) + continue + nested_receiver_locs += loc_to_check + RegisterSignal(loc_to_check, COMSIG_MOVABLE_MOVED, PROC_REF(on_nested_loc_move)) + RegisterSignal(loc_to_check, COMSIG_MOVABLE_DISPOSING, PROC_REF(on_disposal_enter)) + RegisterSignal(loc_to_check, COMSIG_MOVABLE_EXIT_DISPOSALS, PROC_REF(on_disposal_exit)) + loc_to_check = loc_to_check.loc /** - * Called when the `parent` receives the `COMSIG_MOVABLE_MOVED` signal, which occurs when it `Move()`s + * Removes and unregisters signals from all objects currently in the `nested_receiver_locs` list. + */ +/datum/component/proximity_monitor/proc/clear_nested_locs() + for(var/nested_loc in nested_receiver_locs) + UnregisterSignal(nested_loc, list(COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_DISPOSING, COMSIG_MOVABLE_EXIT_DISPOSALS)) + nested_receiver_locs = list() + +/** + * Relays basic directional movement from the `hasprox_receiver` or `host`, to all objects in the `proximity_checkers` list. * - * Code is only ran when there is no `Dir`, which occurs when the parent is teleported, gets placed into a storage item, dropped, or picked up. - * Normal movement, for example moving 1 tile to the west, is handled by the `proximity_checker` objects. + * Arguments: + * * move_dir - the direction the checkers should move in + */ +/datum/component/proximity_monitor/proc/move_prox_checkers(move_dir) + for(var/obj/P as anything in proximity_checkers) + P.loc = get_step(P, move_dir) + +/** + * Update all of the component's proximity checker's to either become active or not active. + * + * Arguments: + * * new_active - the value to be assigned to the proximity checker's `active` variable + */ +/datum/component/proximity_monitor/proc/toggle_checkers(new_active) + for(var/obj/effect/abstract/proximity_checker/P as anything in proximity_checkers) + P.active = new_active + +/** + * Specifies a new radius for the field. Creates or deletes proximity_checkers accordingly. + * + * This proc *can* have a high cost due to the `new`s and `qdel`s of the proximity checkers, depending on the number of calls you need to make to it. + * + * Arguments: + * new_radius - the new value that `proximity_radius` should be set to. + */ +/datum/component/proximity_monitor/proc/set_radius(new_radius) + ASSERT(new_radius >= 1) + + var/new_field_size = (1 + new_radius * 2) ** 2 + var/old_field_size = length(proximity_checkers) + radius = new_radius + + // Radius is decreasing. + if(new_field_size < old_field_size) + for(var/i in 1 to (old_field_size - new_field_size)) + qdel(proximity_checkers[length(proximity_checkers)]) // Pop the last entry. + // Radius is increasing. + else + var/turf/parent_turf = get_turf(parent) + for(var/i in 1 to (new_field_size - old_field_size)) + create_single_prox_checker(parent_turf) + recenter_prox_checkers() + +/** + * Creates a single proximity checker object, at the given location and of the given type. Adds it to the proximity checkers list. * * Arguments: - * * source - this will be the `parent` - * * OldLoc - the location the parent just moved from - * * Dir - the direction the parent just moved in - * * forced - if we were forced to move + * * turf/T - the turf the checker should be created on + * * checker_type - the type of [/obj/item/abstract/proximity_checker] to create */ -/datum/component/proximity_monitor/proc/HandleMove(datum/source, atom/OldLoc, Dir, forced) - if(!Dir) // No dir means the parent teleported, or moved in a non-standard way like getting placed into disposals, onto a table, dropped, picked up, etc. - recenter_prox_checkers() +/datum/component/proximity_monitor/proc/create_single_prox_checker(turf/T, checker_type = field_checker_type) + var/obj/effect/abstract/proximity_checker/P = new checker_type(T, src) + proximity_checkers += P + return P /** - * Called in Initialize(). Generates a set of `/obj/effect/abstract/proximity_checker` objects around the parent, and registers signals to them. + * Called in Initialize(). Generates a set of [proximity checker][/obj/effect/abstract/proximity_checker] objects around the parent. */ /datum/component/proximity_monitor/proc/create_prox_checkers() - proximity_checkers = list() - for(var/turf/T in range(1, get_turf(parent))) - var/obj/effect/abstract/proximity_checker/P = new(T, parent) - proximity_checkers += P - // Basic movement for the proximity_checker objects. The objects will move 1 tile in the direction the parent just moved. - P.RegisterSignal(parent, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/obj/effect/abstract/proximity_checker, HandleMove)) + LAZYINITLIST(proximity_checkers) + var/turf/parent_turf = get_turf(parent) + // For whatever reason their turf is null. Create the checkers in nullspace for now. When the parent moves to a valid turf, they can be recenetered. + if(!parent_turf) + // Since we can't use `in range` in nullspace, we need to calculate the number of checkers to create with the below formula. + var/checker_amount = (1 + radius * 2) ** 2 + for(var/i in 1 to checker_amount) + create_single_prox_checker(null) + return + for(var/T in RANGE_TURFS(radius, parent_turf)) + create_single_prox_checker(T) /** - * Re-centers all of the parent's `proximity_checker`s around its current location. + * Re-centers all of the `proximity_checker`s around the parent's current location. */ /datum/component/proximity_monitor/proc/recenter_prox_checkers() - var/list/prox_checkers = owner.get_all_adjacent_turfs() - for(var/checker in proximity_checkers) - var/obj/effect/abstract/proximity_checker/P = checker - P.loc = pick_n_take(prox_checkers) + var/turf/parent_turf = get_turf(parent) + if(!parent_turf) + toggle_checkers(FALSE) + return // Need a sanity check here for certain situations like objects moving into disposal holders. Their turf will be null in these cases. + var/index = 1 + var/checkercount = length(proximity_checkers) + for(var/turf/T as anything in RANGE_TURFS(radius, parent_turf)) + if(index > checkercount) + return + var/obj/checker = proximity_checkers[index++] + checker.loc = T /** - * # Proximity checker abstract object + * # Basic Proximity Checker * - * Inteded for use with the proximity checker component (/datum/component/proximity_monitor). + * Inteded for use with the proximity checker component [/datum/component/proximity_monitor]. * Whenever a movable atom crosses this object, it calls `HasProximity()` on the object which is listening for proximity (`hasprox_receiver`). + * + * Because these objects try to make the smallest footprint possible, when these objects move **they should use direct `loc` setting only, and not `forceMove`!** + * The overhead for forceMove is very unnecessary, because for example turfs and areas don't need to know when these have entered or exited them, etc. + * These are invisible objects who's sole purpose is to simply inform the receiver that something has moved within X tiles of the it. */ /obj/effect/abstract/proximity_checker - name = "Proximity checker" + name = "proximity checker" + /// The component that this object is in use with, and that will receive `HasProximity()` calls. + var/datum/component/proximity_monitor/monitor /// Whether or not the proximity checker is listening for things crossing it. var/active - /// The linked atom which has the proximity_monitor component, and will recieve the `HasProximity()` calls. - var/atom/hasprox_receiver -// If this object is initialized without a `_hasprox_receiver` arg, it is qdel'd. -/obj/effect/abstract/proximity_checker/Initialize(mapload, atom/_hasprox_receiver) - if(_hasprox_receiver) - hasprox_receiver = _hasprox_receiver - RegisterSignal(hasprox_receiver, COMSIG_PARENT_QDELETING, PROC_REF(OnParentDeletion)) - if(isturf(hasprox_receiver.loc)) // if the reciever is inside a locker/crate/etc, they don't detect proximity - active = TRUE - else - stack_trace("/obj/effect/abstract/proximity_checker created without a receiver") - return INITIALIZE_HINT_QDEL - return ..() +/obj/effect/abstract/proximity_checker/Initialize(mapload, datum/component/proximity_monitor/P) + . = ..() + monitor = P /obj/effect/abstract/proximity_checker/Destroy() - hasprox_receiver = null + monitor.proximity_checkers -= src + monitor = null return ..() /** - * Called when the `hasprox_receiver` receives the `COMSIG_PARENT_QDELETING` signal. When the receiver is deleted, so is this object. + * Called when something crossed over the proximity_checker. Notifies the `hasprox_receiver` it has proximity with something. * - * Arugments: - * * source - this will be the `hasprox_receiver` - * * force - the force flag taken from the qdel proc currently running on `hasprox_receiver` - */ -/obj/effect/abstract/proximity_checker/proc/OnParentDeletion(datum/source, force = FALSE) - qdel(src) - -/** - * Something crossed over the proximity_checker. Notify the `hasprox_receiver` it has proximity with something. Only fires if the checker is `active`. + * Arguments: + * * atom/movable/AM - the atom crossing the proximity checker + * * oldloc - the location `AM` used to be at */ /obj/effect/abstract/proximity_checker/Crossed(atom/movable/AM, oldloc) set waitfor = FALSE - if(active) - hasprox_receiver.HasProximity(AM) - -/** - * Moves the proximity_checker 1 tile in the `Dir` direction. - * - * If `Dir` is null it will be recentered around the receiver via the `recenter_prox_checkers()` proc. - * If the new location of the receiver is NOT a turf, set `active` to FALSE, so that it does not receive proximity calls. - * If the new location of the receiver IS a turf, set `active` to TRUE, so that it can receive proximity calls again. - * - * Arguments: - * * source - this will be the `hasprox_receiver` - * * OldLoc - the location the `hasprox_receiver` just moved from - * * Dir - the direction the `hasprox_receiver` just moved in - * * forced - if we were forced to move - */ -/obj/effect/abstract/proximity_checker/proc/HandleMove(datum/source, atom/OldLoc, Dir, forced) - if(Dir) - loc = get_step(src, Dir) // Basic movement 1 tile in some direction. - return - if(!isturf(hasprox_receiver.loc)) - active = FALSE // Receiver shouldn't detect proximity while picked up, in a backpack, closet, etc. - else - active = TRUE // Receiver can detect proximity again because it's on a turf. + . = ..() + if(active && AM != monitor.hasprox_receiver && !(AM in monitor.nested_receiver_locs)) + monitor.hasprox_receiver.HasProximity(AM) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index e62d5d35c30..11283d480d2 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -165,6 +165,10 @@ GLOBAL_VAR_INIT(record_id_num, 1001) G.fields["notes"] = H.gen_record else G.fields["notes"] = "No notes found." + if(H.exploit_record && !jobban_isbanned(H, "Records")) + G.fields["exploit_record"] = H.exploit_record + else + G.fields["exploit_record"] = "No notes found." general += G //Medical Record diff --git a/code/datums/diseases/viruses/advance/symptoms/deafness.dm b/code/datums/diseases/viruses/advance/symptoms/deafness.dm index 381fe5a9be3..f07b6bc32a8 100644 --- a/code/datums/diseases/viruses/advance/symptoms/deafness.dm +++ b/code/datums/diseases/viruses/advance/symptoms/deafness.dm @@ -34,11 +34,5 @@ Bonus if(3, 4) to_chat(M, span_warning(pick("You hear a ringing in your ear.", "Your ears pop."))) if(5) - if(!(DEAF in M.mutations)) - to_chat(M, span_userdanger("Your ears pop and begin ringing loudly!")) - M.BecomeDeaf() - spawn(200) - if(M) - to_chat(M, span_warning("The ringing in your ears fades...")) - M.CureDeaf() - return + to_chat(M, span_userdanger("Your ears pop and begin ringing loudly!")) + M.Deaf(40 SECONDS) diff --git a/code/datums/emote/emote.dm b/code/datums/emote/emote.dm index 3501ffed071..7cc28dd5eb3 100644 --- a/code/datums/emote/emote.dm +++ b/code/datums/emote/emote.dm @@ -220,10 +220,10 @@ for(var/mob/dead/observer/ghost in viewers(user)) ghost.show_message(span_deadsay("[displayed_msg]"), EMOTE_VISIBLE) - else if((emote_type & (EMOTE_AUDIBLE|EMOTE_SOUND)) && !user.mind?.miming) + else if((emote_type & (EMOTE_AUDIBLE|EMOTE_SOUND)) && user.mind && !user.mind.miming) user.audible_message(displayed_msg, deaf_message = span_italics("You see how [user] [msg]")) else - user.visible_message(displayed_msg, blind_message = span_italics("You hear how someone [msg]")) + user.visible_message(displayed_msg) if(!(emote_type & (EMOTE_FORCE_NO_RUNECHAT|EMOTE_SOUND)) && !isobserver(user)) runechat_emote(user, msg) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 895293a1ea1..f25a8138879 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -27,7 +27,8 @@ GLOBAL_LIST_INIT(huds, list( \ ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden(),\ TAIPAN_HUD = new/datum/atom_hud/antag(),\ ANTAG_HUD_THIEF = new/datum/atom_hud/antag/hidden(),\ - THOUGHTS_HUD = new/datum/atom_hud/thoughts()\ + THOUGHTS_HUD = new/datum/atom_hud/thoughts(),\ + DATA_HUD_KIDAN_PHEROMONES = new/datum/atom_hud/kidan_pheromones()\ )) /datum/atom_hud @@ -62,7 +63,7 @@ GLOBAL_LIST_INIT(huds, list( \ M.huds_counter["huds"] -= src for(var/atom/A in hudatoms) - remove_from_single_hud(M, A, TRUE) + remove_from_single_hud(M, A, remove_from_mob=TRUE) hudusers -= M /datum/atom_hud/proc/remove_from_hud(atom/A) @@ -82,23 +83,25 @@ GLOBAL_LIST_INIT(huds, list( \ continue M.client.images -= A.hud_list[i] -/datum/atom_hud/proc/add_hud_to(mob/M) +/datum/atom_hud/proc/add_hud_to(mob/M, only_once=FALSE) if(!M) return hudusers |= M - if (src in M.huds_counter["huds"]) - M.huds_counter["huds"][src]++ - else - M.huds_counter["huds"][src] = 1 + if (!only_once || !(src in M.huds_counter["huds"])) + if (src in M.huds_counter["huds"]) + M.huds_counter["huds"][src]++ + else + M.huds_counter["huds"][src] = 1 + + for (var/i in hud_icons) + if (i in M.huds_counter["icons"]) + M.huds_counter["icons"][i]++ + else + M.huds_counter["icons"][i] = 1 for(var/atom/A in hudatoms) add_to_single_hud(M, A) - for (var/i in hud_icons) - if (i in M.huds_counter["icons"]) - M.huds_counter["icons"][i]++ - else - M.huds_counter["icons"][i] = 1 /datum/atom_hud/proc/add_to_hud(atom/A) if(!A) @@ -128,26 +131,26 @@ GLOBAL_LIST_INIT(huds, list( \ for(var/datum/atom_hud/hud in (GLOB.all_huds|serv_huds))//|gang_huds)) if(src in hud.hudusers) - hud.add_hud_to(src) + hud.add_hud_to(src, only_once=TRUE) for(var/obj/item/check in contents) if(istype(check, /obj/item/clothing/glasses/hud)) var/obj/item/clothing/glasses/hud/glasses = check if(glasses.HUDType && get_slot_by_item(glasses) == slot_glasses) var/datum/atom_hud/my_hud = GLOB.huds[glasses.HUDType] - my_hud.add_hud_to(src) + my_hud.add_hud_to(src, only_once=TRUE) if(istype(check, /obj/item/clothing/head)) var/obj/item/clothing/head/helmet = check if(helmet.HUDType && get_slot_by_item(helmet) == slot_head) var/datum/atom_hud/my_hud = GLOB.huds[helmet.HUDType] - my_hud.add_hud_to(src) + my_hud.add_hud_to(src, only_once=TRUE) if(istype(check, /obj/item/organ/internal/cyberimp/eyes/hud)) var/obj/item/organ/internal/cyberimp/eyes/hud/implant = check - if(implant.HUD_type && !implant.is_equipped(TRUE, TRUE)) - var/datum/atom_hud/my_hud = GLOB.huds[implant.HUD_type] - my_hud.add_hud_to(src) + if(implant.HUDType && !implant.is_equipped(TRUE, TRUE)) + var/datum/atom_hud/my_hud = GLOB.huds[implant.HUDType] + my_hud.add_hud_to(src, only_once=TRUE) /mob/new_player/reload_huds() diff --git a/code/datums/keybindings/mob.dm b/code/datums/keybindings/mob.dm index 8f9c48a4411..b593215a923 100644 --- a/code/datums/keybindings/mob.dm +++ b/code/datums/keybindings/mob.dm @@ -131,6 +131,14 @@ . = ..() C.body_toggle_head() +/datum/keybinding/mob/target_cycle/chest + name = "Выбрать грудь/крылья" + keys = list("Numpad5") + +/datum/keybinding/mob/target_cycle/chest/down(client/C) + . = ..() + C.body_chest() + /datum/keybinding/mob/target_cycle/r_arm name = "Выбрать правую руку/кисть" keys = list("Numpad4") @@ -147,6 +155,14 @@ . = ..() C.body_l_arm() +/datum/keybinding/mob/target_cycle/groin + name = "Выбрать пах/хвост" + keys = list("Numpad2") + +/datum/keybinding/mob/target_cycle/groin/down(client/C) + . = ..() + C.body_groin() + /datum/keybinding/mob/target_cycle/r_leg name = "Выбрать правую ногу/ступню" keys = list("Numpad1") @@ -191,12 +207,10 @@ /datum/keybinding/mob/target/chest name = "Выбрать грудь" body_part = BODY_ZONE_CHEST - keys = list("Numpad5") -/datum/keybinding/mob/target/groin - name = "Выбрать пах" - body_part = BODY_ZONE_PRECISE_GROIN - keys = list("Numpad2") +/datum/keybinding/mob/target/wing + name = "Выбрать крылья" + body_part = BODY_ZONE_WING /datum/keybinding/mob/target/r_arm name = "Выбрать правую руку" @@ -214,6 +228,14 @@ name = "Выбрать левую кисть" body_part = BODY_ZONE_PRECISE_L_HAND +/datum/keybinding/mob/target/groin + name = "Выбрать пах" + body_part = BODY_ZONE_PRECISE_GROIN + +/datum/keybinding/mob/target/tail + name = "Выбрать хвост" + body_part = BODY_ZONE_TAIL + /datum/keybinding/mob/target/r_leg name = "Выбрать правую ногу" body_part = BODY_ZONE_R_LEG @@ -229,3 +251,14 @@ /datum/keybinding/mob/target/l_foot name = "Выбрать левую ступню" body_part = BODY_ZONE_PRECISE_L_FOOT + +/datum/keybinding/mob/trigger_action_button // Don't add a name to this, shouldn't show up in the prefs menu + var/datum/action/linked_action + var/binded_to // these are expected to actually get deleted at some point, to prevent hard deletes we need to know where to remove them from the clients list + +/datum/keybinding/mob/trigger_action_button/down(client/C) + . = ..() + if(C.mob.next_click > world.time) + return + linked_action.Trigger() + linked_action.UpdateButtonIcon() diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f6e18b902f8..99729309552 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -44,6 +44,7 @@ var/list/spell_list = list() // Wizard mode & "Give Spell" badmin button. var/datum/martial_art/martial_art + var/list/known_martial_arts = list() var/role_alt_title @@ -171,10 +172,10 @@ transfer_actions(new_character, old_current) if(martial_art) - if(martial_art.temporary) - martial_art.remove(current) - else - martial_art.teach(current) + for(var/datum/martial_art/MA in known_martial_arts) + MA.remove(current) + if(!MA.temporary) + MA.teach(current) for(var/datum/antagonist/antag in antag_datums) //Makes sure all antag datums effects are applied in the new body antag.on_body_transfer(old_current, current) diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index a8db8a0ae99..ec9ccf325dc 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -87,9 +87,9 @@ equip_item(H, suit_store, slot_s_store) if(l_hand) - H.put_in_l_hand(new l_hand(H)) + H.equip_to_slot_if_possible(new l_hand(H.loc), slot_l_hand, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE) if(r_hand) - H.put_in_r_hand(new r_hand(H)) + H.equip_to_slot_if_possible(new r_hand(H.loc), slot_r_hand, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE) if(pda) equip_item(H, pda, slot_wear_pda) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index cec12385793..d61c287aad7 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -223,7 +223,7 @@ id = /obj/item/card/id/centcom backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8ar = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8ar = 1, /obj/item/ammo_box/magazine/sp8 = 2, /obj/item/storage/box/responseteam = 1, /obj/item/gun/energy/gun/blueshield = 1, diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 9c463b4dccf..88bb4dadb78 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -48,7 +48,7 @@ description = "A race of unbreathing lizards live here, that run faster than a human can, worship a broken dead city, and are capable of reproducing by something involving tentacles? \ Probably best to stay clear." suffix = "lavaland_surface_ash_walker1.dmm" - cost = 20 + always_place = TRUE allow_duplicates = FALSE /datum/map_template/ruin/lavaland/syndicate_base diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 6bca31b35cc..9a1ca5a6df6 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -33,7 +33,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) to_chat(user, span_warning("[user.ranged_ability.name] has been disabled.")) user.ranged_ability.remove_ranged_ability(user) return TRUE //TRUE for failed, FALSE for passed. - user.changeNext_click(CLICK_CD_CLICK_ABILITY) user.face_atom(target) return FALSE @@ -222,6 +221,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) if(!can_cast(user, charge_check, TRUE)) return FALSE + user.changeNext_click(CLICK_CD_CLICK_ABILITY) + if(ishuman(user)) var/mob/living/carbon/human/caster = user if(caster.remoteview_target) diff --git a/code/datums/spells/alien_spells/neurotoxin_spit.dm b/code/datums/spells/alien_spells/neurotoxin_spit.dm index 66913cc2e65..a147c2a984d 100644 --- a/code/datums/spells/alien_spells/neurotoxin_spit.dm +++ b/code/datums/spells/alien_spells/neurotoxin_spit.dm @@ -16,12 +16,15 @@ return new /datum/spell_targeting/clicked_atom -/obj/effect/proc_holder/spell/alien_spell/neurotoxin/update_icon() +/obj/effect/proc_holder/spell/alien_spell/neurotoxin/update_icon_state() if(!action) return action.button_icon_state = "alien_neurotoxin_[active]" action.UpdateButtonIcon() +//sets charge_check = FALSE so that you can cancel spell while it's charging +/obj/effect/proc_holder/spell/alien_spell/neurotoxin/can_cast(mob/user, charge_check = FALSE, show_message) + . = ..() /obj/effect/proc_holder/spell/alien_spell/neurotoxin/cast(list/targets, mob/living/carbon/user) var/target = targets[1] @@ -40,6 +43,20 @@ return TRUE +//sets charge_check = FALSE so that you can cancel spell while it's charging +/obj/effect/proc_holder/spell/alien_spell/neurotoxin/Click() + if(cast_check(FALSE, FALSE, usr)) + choose_targets(usr) + return TRUE + +//removes line (user.changeNext_click(CLICK_CD_CLICK_ABILITY)) in parent proc to quick toggle spell +/obj/effect/proc_holder/spell/alien_spell/neurotoxin/InterceptClickOn(mob/user, params, atom/target) + if(user.ranged_ability != src) + to_chat(user, span_warning("[user.ranged_ability.name] has been disabled.")) + user.ranged_ability.remove_ranged_ability(user) + else + targeting.InterceptClickOn(user, params, target, src) + /obj/effect/proc_holder/spell/alien_spell/neurotoxin/after_cast(list/targets, mob/user) . = ..() if(should_remove_click_intercept(user)) diff --git a/code/datums/spells/charge.dm b/code/datums/spells/charge.dm index 87ea7265721..a9673916a94 100644 --- a/code/datums/spells/charge.dm +++ b/code/datums/spells/charge.dm @@ -4,6 +4,7 @@ school = "transmutation" base_cooldown = 1 MINUTES clothes_req = FALSE + human_req = FALSE invocation = "DIRI CEL" invocation_type = "whisper" cooldown_min = 40 SECONDS //50 deciseconds reduction per rank diff --git a/code/datums/spells/devil.dm b/code/datums/spells/devil.dm index e926e1dade2..590080a8c09 100644 --- a/code/datums/spells/devil.dm +++ b/code/datums/spells/devil.dm @@ -4,7 +4,7 @@ item_type = /obj/item/twohanded/pitchfork/demonic action_icon_state = "pitchfork" action_background_icon_state = "bg_demon" - + human_req = FALSE /obj/effect/proc_holder/spell/conjure_item/pitchfork/greater item_type = /obj/item/twohanded/pitchfork/demonic/greater @@ -104,7 +104,8 @@ action_icon_state = "jaunt" action_background_icon_state = "bg_demon" phase_allowed = TRUE - + clothes_req = FALSE + human_req = FALSE /obj/effect/proc_holder/spell/infernal_jaunt/create_new_targeting() return new /datum/spell_targeting/self diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm index 91785fc2005..7c9c2b756a3 100644 --- a/code/datums/spells/horsemask.dm +++ b/code/datums/spells/horsemask.dm @@ -5,6 +5,7 @@ base_cooldown = 15 SECONDS cooldown_min = 3 SECONDS //30 deciseconds reduction per rank clothes_req = FALSE + human_req = FALSE stat_allowed = CONSCIOUS invocation = "KN'A FTAGHU, PUCK 'BTHNK!" invocation_type = "shout" diff --git a/code/datums/spells/knock.dm b/code/datums/spells/knock.dm index b14fa542344..7b1276db852 100644 --- a/code/datums/spells/knock.dm +++ b/code/datums/spells/knock.dm @@ -6,6 +6,7 @@ base_cooldown = 10 SECONDS cooldown_min = 2 SECONDS //20 deciseconds reduction per rank clothes_req = FALSE + human_req = FALSE invocation = "AULIE OXIN FIERA" invocation_type = "whisper" @@ -49,6 +50,7 @@ name = "Greater Knock" desc = "On first cast, will remove access restrictions on all airlocks on the station, and announce this spell's use to the station. On any further cast, will open all doors in sight. Cannot be refunded once bought!" + action_icon_state = "greater_knock" base_cooldown = 20 SECONDS cooldown_min = 20 SECONDS invocation = "MAIOR OXIN FIERA" diff --git a/code/datums/spells/lichdom.dm b/code/datums/spells/lichdom.dm index 65b8c30a13c..36fa8c88852 100644 --- a/code/datums/spells/lichdom.dm +++ b/code/datums/spells/lichdom.dm @@ -5,6 +5,7 @@ base_cooldown = 1 SECONDS cooldown_min = 1 SECONDS clothes_req = FALSE + human_req = FALSE centcom_cancast = FALSE invocation = "NECREM IMORTIUM!" invocation_type = "shout" diff --git a/code/datums/spells/mimic.dm b/code/datums/spells/mimic.dm index 2a6ba9263c1..cd6fb7e5c29 100644 --- a/code/datums/spells/mimic.dm +++ b/code/datums/spells/mimic.dm @@ -196,18 +196,29 @@ /datum/mimic_form + /// What the visible species of the form is (Only for human forms)? + var/examine_species = "Unknown" + /// What the visible gender of the form is (Only for human forms)? + var/examine_gender + /// What is the examine text paired with this form? + var/examine_text + /// What is the examine time paired with this form? + var/examine_time /// How does the form look like? var/appearance - /// What is the examine text paired with this form - var/examine_text - /// What the name of the form is + /// What the name of the form is? var/name /datum/mimic_form/New(atom/movable/form, mob/user) - appearance = form.appearance + examine_gender = form.get_visible_gender() examine_text = form.examine(user) + examine_time = form.get_examine_time() + appearance = form.appearance name = form.name + if(isliving(form)) + var/mob/living/form_living = form + examine_species = form_living.get_visible_species() /obj/effect/proc_holder/spell/mimic/morph diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm index fdac268af34..c25a946973a 100644 --- a/code/datums/spells/mind_transfer.dm +++ b/code/datums/spells/mind_transfer.dm @@ -5,6 +5,7 @@ school = "transmutation" base_cooldown = 60 SECONDS clothes_req = FALSE + human_req = FALSE invocation = "GIN'YU CAPAN" invocation_type = "whisper" selection_activated_message = "You prepare to transfer your mind. Click on a target to cast the spell." diff --git a/code/datums/spells/summonitem.dm b/code/datums/spells/summonitem.dm index d58073d0040..c2941aaed98 100644 --- a/code/datums/spells/summonitem.dm +++ b/code/datums/spells/summonitem.dm @@ -5,6 +5,7 @@ base_cooldown = 10 SECONDS cooldown_min = 10 SECONDS clothes_req = FALSE + human_req = FALSE invocation = "GAR YOK" invocation_type = "whisper" level_max = 0 //cannot be improved diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index 1be7917d14d..c543fb49786 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -129,7 +129,7 @@ base_cooldown = 12 SECONDS cooldown_min = 2 SECONDS //25 deciseconds reduction per rank clothes_req = FALSE - + human_req = FALSE smoke_type = SMOKE_COUGHING smoke_amt = 10 @@ -208,6 +208,7 @@ base_cooldown = 10 SECONDS cooldown_min = 5 SECONDS //12 deciseconds reduction per rank clothes_req = FALSE + human_req = FALSE invocation = "TARCOL MINTI ZHERI" invocation_type = "whisper" sound = 'sound/magic/forcewall.ogg' @@ -237,6 +238,7 @@ clothes_req = TRUE invocation = "TARCOL GRANDI ZHERI" invocation_type = "shout" + action_icon_state = "shield_greater" large = TRUE @@ -311,6 +313,7 @@ school = "transmutation" action_icon_state = "blind" clothes_req = FALSE + human_req = FALSE invocation = "STI KALY" invocation_type = "whisper" message = "Your eyes cry out in pain!" @@ -357,6 +360,7 @@ base_cooldown = 6 SECONDS cooldown_min = 2 SECONDS //10 deciseconds reduction per rank clothes_req = FALSE + human_req = FALSE invocation = "ONI SOMA" invocation_type = "shout" @@ -374,7 +378,7 @@ return T -/obj/effect/proc_holder/spell/fireball/update_icon() +/obj/effect/proc_holder/spell/fireball/update_icon_state() if(!action) return action.button_icon_state = "fireball[active]" @@ -458,6 +462,7 @@ desc = "Makes everyone around you more flammable, and lights yourself on fire." base_cooldown = 6 SECONDS clothes_req = FALSE + human_req = FALSE invocation = "FI'RAN DADISKO" invocation_type = "shout" action_icon_state = "sacredflame" diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index d210c8d92fa..03d3861fae6 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -764,12 +764,11 @@ /datum/status_effect/transient/eye_blurry/calc_decay() if(ishuman(owner)) var/mob/living/carbon/human/H = owner + var/obj/item/organ/vision = H.dna?.species?.get_vision_organ(H) - if(isnull(H.dna.species.vision_organ)) //species has no eyes + if(vision && vision == NO_VISION_ORGAN) //species has no eyes return ..() - var/obj/item/organ/vision = H.get_int_organ(H.dna.species.vision_organ) - if(!vision || vision.is_bruised() || vision.is_traumatized()) // doesn't decay if you have damaged eyesight. return 0 @@ -794,10 +793,10 @@ if((BLINDNESS in H.mutations)) return 0 - if(isnull(H.dna.species.vision_organ)) // species that have no eyes - return ..() + var/obj/item/organ/vision = H.dna?.species?.get_vision_organ(H) - var/obj/item/organ/vision = H.get_int_organ(H.dna.species.vision_organ) + if(vision && vision == NO_VISION_ORGAN) // species that have no eyes + return ..() if(!vision || vision.is_traumatized() || vision.is_bruised()) //got no eyes or broken eyes return 0 diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm index 247b06abb0e..dffbc4157c6 100644 --- a/code/datums/status_effects/neutral.dm +++ b/code/datums/status_effects/neutral.dm @@ -43,6 +43,36 @@ get_kill() . = ..() +/datum/status_effect/staring + id = "staring" + alert_type = null + status_type = STATUS_EFFECT_UNIQUE + var/mob/living/target + var/target_gender + var/target_species + +/datum/status_effect/staring/on_creation(mob/living/new_owner, new_duration, new_target, new_target_gender, new_target_species) + if(!new_duration) + qdel(src) + return + duration = new_duration + . = ..() + target = new_target + target_gender = new_target_gender + target_species = new_target_species + +/datum/status_effect/staring/proc/catch_look(mob/living/opponent) + if(target == opponent) + to_chat(owner, span_notice("[opponent.name] catch your look!")) + to_chat(opponent, span_notice("[owner.name] catch your look!")) + var/list/loved_ones = list(MALE, FEMALE) + if(!ishuman(owner) || !(target_gender in loved_ones) || !(owner.gender in loved_ones)) + return + var/mob/living/carbon/human/human_owner = owner + if(target_gender != human_owner.gender && target_species == human_owner.dna.species.name && prob(5)) + owner.emote("blush") + to_chat(owner, span_danger("You feel something burning in your chest...")) + /datum/status_effect/high_five id = "high_five" diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 9ebd298b067..300212a7d87 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -47,12 +47,13 @@ linked_alert = null return ..() -/datum/status_effect/process() - if(!owner) +/datum/status_effect/process(seconds_per_tick) + SHOULD_NOT_OVERRIDE(TRUE) + if(QDELETED(owner)) qdel(src) return if(tick_interval <= world.time) - tick() + tick(seconds_per_tick) tick_interval = world.time + initial(tick_interval) if(duration != -1 && duration < world.time) on_timeout() @@ -60,7 +61,7 @@ /datum/status_effect/proc/on_apply() //Called whenever the buff is applied; returning FALSE will cause it to autoremove itself. return TRUE -/datum/status_effect/proc/tick() //Called every tick. +/datum/status_effect/proc/tick(seconds_per_tick) //Called every tick. /datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed; do note that at the point this is called, it is out of the owner's status_effects but owner is not yet null /datum/status_effect/proc/on_timeout() // Called specifically whenever the status effect expires. /datum/status_effect/proc/be_replaced() //Called instead of on_remove when a status effect is replaced by itself or when a status effect with on_remove_on_mob_delete = FALSE has its mob deleted diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index cd67612f393..21428cc26f9 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -46,6 +46,7 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY var/manifest = "" var/amount = null var/cost = null + var/credits_cost = 0 var/containertype = /obj/structure/closet/crate var/containername = null var/access = null @@ -62,7 +63,7 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY /// List of names for being done in TGUI var/list/ui_manifest = list() - var/list/required_tech = list() + var/list/required_tech /datum/supply_packs/New() @@ -79,6 +80,11 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY if(SSshuttle.points <= cost) to_chat(user, span_warning("There are insufficient supply points for this request.")) return FALSE + if(credits_cost && SSshuttle.cargo_money_account.money <= credits_cost) + to_chat(user, span_warning("There are not enough money on cargo account for this request.")) + return FALSE + if(!length(required_tech)) + return TRUE for(var/tech_id in required_tech) if(!SSshuttle.techLevels[tech_id] || required_tech[tech_id] > SSshuttle.techLevels[tech_id]) to_chat(user, span_warning("You have not sent the necessary technological disks to Centcomm.")) @@ -240,12 +246,70 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY /datum/supply_packs/emergency/syndicate name = "ERROR_NULL_ENTRY" - contains = list(/obj/item/storage/box/syndicate) - cost = 560 - containertype = /obj/structure/closet/crate + contains = list() + cost = 0 + credits_cost = 2500 + containertype = /obj/structure/closet/crate/syndicate containername = "crate" hidden = 1 - order_limit = 5 + +/datum/supply_packs/emergency/syndicate/New() + var/list/items = GLOB.uplink_items.Copy() + while(contains.len < 3) + var/datum/uplink_item/item = pick_n_take(items) + if(istype(item, /datum/uplink_item/racial) || item.hijack_only || item.cost > 20) + continue + contains.Add(item.item) + +/datum/supply_packs/emergency/highrisk + name = "HEADER" + cost = 450 + containertype = /obj/structure/closet/crate/secure + containername = "high-risk crate" + access = ACCESS_CAPTAIN + +/datum/supply_packs/emergency/highrisk/rd_handtp + name = "Hand Teleporter Crate" + access = ACCESS_RD + contains = list(/obj/item/hand_tele) + required_tech = list("programming" = 7, "bluespace" = 8) + +/datum/supply_packs/emergency/highrisk/rd_tp_armor + name = "Reactive Armor Crate" + access = ACCESS_RD + contains = list(/obj/item/clothing/suit/armor/reactive/teleport) + required_tech = list("combat" = 8, "bluespace" = 5) + +/datum/supply_packs/emergency/highrisk/capt_jet + name = "Deluxe Jetpack Crate" + access = ACCESS_CAPTAIN + contains = list(/obj/item/tank/jetpack/oxygen/captain) + required_tech = list("toxins" = 8, "materials" = 7) + +/datum/supply_packs/emergency/highrisk/ce_combatrcd + name = "Combat R.C.D. Crate" + access = ACCESS_CE + contains = list(/obj/item/rcd/combat) + required_tech = list("materials" = 6, "engineering" = 8) + +/datum/supply_packs/emergency/highrisk/ce_advmagboots + name = "Advanced Magboots Crate" + access = ACCESS_CE + contains = list(/obj/item/clothing/shoes/magboots/advance) + required_tech = list("engineering" = 8, "magnets" = 6) + +/datum/supply_packs/emergency/highrisk/cmo_defib + name = "Advanced Defibrillator Crate" + access = ACCESS_CMO + contains = list(/obj/item/defibrillator/compact/advanced) + required_tech = list("biotech" = 7, "powerstorage" = 8) + +/datum/supply_packs/emergency/highrisk/cmo_hypospray + name = "Advanced Hypospray Crate" + access = ACCESS_CMO + contains = list(/obj/item/reagent_containers/hypospray/CMO/empty) + required_tech = list("materials" = 7, "biotech" = 8) + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Security //////////////////////////////////////// @@ -641,6 +705,42 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY containername = "exile implant crate" required_tech = list("materials" = 2, "biotech" = 4, "programming" = 6) +/datum/supply_packs/security/armory/ion_carbine + name = "Ion Carbine Crate" + containername = "ion carbine crate" + cost = 120 + contains = list( + /obj/item/gun/energy/ionrifle/carbine, + /obj/item/gun/energy/ionrifle/carbine, + /obj/item/gun/energy/ionrifle/carbine + ) + required_tech = list("combat" = 5, "magnets" = 4) + +/datum/supply_packs/security/armory/tele_shield + name = "Telescopic Riot Shield Crate" + containername = "telescopic riot shield crate" + cost = 80 + contains = list( + /obj/item/shield/riot/tele, + /obj/item/shield/riot/tele, + /obj/item/shield/riot/tele + ) + required_tech = list("combat" = 4, "engineering" = 4, "materials" = 3) + +/datum/supply_packs/security/armory/shotgun_shells + name = "Various Shotgun Shells Crate" + containername = "various shotgun shells crate" + cost = 250 + contains = list( + /obj/item/ammo_casing/shotgun/stunslug, + /obj/item/ammo_casing/shotgun/pulseslug, + /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath, + /obj/item/ammo_casing/shotgun/frag12, + /obj/item/ammo_casing/shotgun/ion, + /obj/item/ammo_casing/shotgun/laserslug, + ) + required_tech = list("powerstorage" = 4, "combat" = 4, "magnets" = 4, "materials" = 4) + /datum/supply_packs/security/securitybarriers name = "Security Barriers Crate" contains = list(/obj/item/grenade/barrier, @@ -854,7 +954,7 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY required_tech = list("powerstorage" = 4, "magnets" = 4, "materials" = 3) /datum/supply_packs/engineering/inflatable - name = "Inflatable barriers Crate" + name = "Inflatable Barriers Crate" contains = list(/obj/item/storage/briefcase/inflatable, /obj/item/storage/briefcase/inflatable, /obj/item/storage/briefcase/inflatable) @@ -1299,6 +1399,17 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY containername = "surgery crate" access = ACCESS_MEDICAL +/datum/supply_packs/medical/incision + name = "Incision System Crate" + containername = "incision system crate" + cost = 180 + contains = list( + /obj/item/scalpel/laser/manager, + /obj/item/scalpel/laser/manager, + /obj/item/scalpel/laser/manager, + ) + required_tech = list("biotech" = 4, "materials" = 7, "magnets" = 5, "programming" = 4) + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Science ///////////////////////////////////////// @@ -1431,6 +1542,183 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY containername = "radiation suit crate" required_tech = list("biotech" = 3, "materials" = 2) +/datum/supply_packs/science/sohs + name = "Satchel of Holding Crate" + contains = list( + /obj/item/storage/backpack/holding/satchel, + /obj/item/storage/backpack/holding/satchel, + /obj/item/storage/backpack/holding/satchel, + ) + cost = 400 + containername = "satchel of holding crate" + required_tech = list("plasmatech" = 6, "engineering" = 5, "bluespace" = 6, "materials" = 5) + +/datum/supply_packs/science/belt_of_hold + name = "Belt of Holding Crate" + containername = "belt of holding crate" + cost = 220 + contains = list( + /obj/item/storage/belt/bluespace, + /obj/item/storage/belt/bluespace, + /obj/item/storage/belt/bluespace, + ) + required_tech = list("plasmatech" = 6, "engineering" = 5, "bluespace" = 6, "materials" = 5) + +/datum/supply_packs/science/mining_sohs + name = "Mining Satchel of Holding Crate" + containername = "mining satchel of holding of holding crate" + cost = 200 + contains = list( + /obj/item/storage/bag/ore/holding, + /obj/item/storage/bag/ore/holding, + /obj/item/storage/bag/ore/holding, + ) + required_tech = list("engineering" = 4, "bluespace" = 4, "materials" = 3) + +/datum/supply_packs/science/cutters + name = "Advanced Plasma Cutter Crate" + containername = "advanced plasma cutter crate" + cost = 220 + contains = list( + /obj/item/gun/energy/plasmacutter/adv, + /obj/item/gun/energy/plasmacutter/adv, + /obj/item/gun/energy/plasmacutter/adv + ) + required_tech = list("engineering" = 6, "combat" = 3, "plasmatech" = 6, "materials" = 5, "magnets" = 3) + +/datum/supply_packs/science/cutters_shotgun + name = "Industrial Fan Cutter Crate" + containername = "industrial fan cutter crate" + cost = 320 + contains = list( + /obj/item/gun/energy/plasmacutter/shotgun, + /obj/item/gun/energy/plasmacutter/shotgun, + /obj/item/gun/energy/plasmacutter/shotgun + ) + required_tech = list("powerstorage" = 5, "engineering" = 6, "combat" = 7, "plasmatech" = 7, "materials" = 7, "magnets" = 6) + +/datum/supply_packs/science/eka + name = "E.K.A. Crate" + containername = "E.K.A. crate" + cost = 270 + contains = list( + /obj/item/gun/energy/kinetic_accelerator/experimental, + /obj/item/gun/energy/kinetic_accelerator/experimental, + /obj/item/gun/energy/kinetic_accelerator/experimental + ) + required_tech = list("powerstorage" = 4, "engineering" = 6, "combat" = 6, "materials" = 4) + +/datum/supply_packs/science/fireproof_rods + name = "Fireproof Rods Crate" + containername = "fireproof rods crate" + cost = 150 + contains = list(/obj/item/stack/fireproof_rods/twentyfive) + required_tech = list("plasmatech" = 4, "engineering" = 3, "materials" = 6) + +/datum/supply_packs/science/super_cell + name = "Super Power Cell Crate" + containername = "super power cell crate" + cost = 100 + contains = list( + /obj/item/stock_parts/cell/super/empty, + /obj/item/stock_parts/cell/super/empty, + /obj/item/stock_parts/cell/super/empty, + /obj/item/stock_parts/cell/super, + /obj/item/stock_parts/cell/super, + /obj/item/stock_parts/cell/super + ) + required_tech = list("powerstorage" = 3, "materials" = 3) + +/datum/supply_packs/science/bluespace_cell + name = "Bluespace Power Cell Crate" + containername = "bluespace power cell crate" + cost = 200 + contains = list( + /obj/item/stock_parts/cell/bluespace/empty, + /obj/item/stock_parts/cell/bluespace/empty, + /obj/item/stock_parts/cell/bluespace/empty, + /obj/item/stock_parts/cell/bluespace, + /obj/item/stock_parts/cell/bluespace, + /obj/item/stock_parts/cell/bluespace + ) + required_tech = list("powerstorage" = 6, "materials" = 6, "engineering" = 5, "bluespace" = 5,) + +/datum/supply_packs/science/adv_tools + name = "Advanced Tools Crate" + containername = "advanced tools crate" + cost = 200 + contains = list( + /obj/item/weldingtool/experimental, + /obj/item/weldingtool/experimental, + /obj/item/screwdriver/power, + /obj/item/screwdriver/power, + /obj/item/crowbar/power, + /obj/item/crowbar/power, + /obj/item/clothing/mask/gas/welding, + /obj/item/clothing/mask/gas/welding, + ) + required_tech = list("powerstorage" = 7, "engineering" = 4, "magnets" = 6, "bluespace" = 5, "biotech" = 3, "materials" = 2) + +/datum/supply_packs/science/rcd_crate + name = "R.C.D. Crate" + containername = "R.C.D. crate" + cost = 200 + contains = list( + /obj/item/rcd, + /obj/item/rcd, + /obj/item/rcd + ) + required_tech = list("engineering" = 3, "programming" = 2) + +/datum/supply_packs/science/bluespace_beakers + name = "Bluespace Beakers Crate" + containername = "bluespace beakers crate" + cost = 150 + contains = list( + /obj/item/storage/box/beakers/bluespace, + /obj/item/storage/box/beakers/bluespace + ) + required_tech = list("plasmatech" = 4, "bluespace" = 6, "materials" = 5) + +/datum/supply_packs/science/deluxe_parts + name = "Deluxe Parts Crate" + containername = "deluxe parts crate" + cost = 180 + contains = list( + /obj/item/storage/box/stockparts/deluxe, + /obj/item/storage/box/stockparts/deluxe + ) + required_tech = list("powerstorage" = 7, "engineering" = 5, "magnets" = 6, "bluespace" = 6, "programming" = 6, "materials" = 7) + +/datum/supply_packs/science/cyborg_upgrades + name = "Cyborg Upgrades Crate" + containername = "cyborg upgrades crate" + cost = 250 + contains = list( + /obj/item/borg/upgrade/vtec, + /obj/item/borg/upgrade/vtec, + /obj/item/borg/upgrade/vtec, + /obj/item/borg/upgrade/thrusters, + /obj/item/borg/upgrade/thrusters, + /obj/item/borg/upgrade/thrusters, + ) + required_tech = list("powerstorage" = 5, "engineering" = 5, "magnets" = 6, "materials" = 6) + +/datum/supply_packs/science/civ_implants + name = "Civillian Implants Crate" + containername = "civillian implants crate" + cost = 160 + contains = list( + /obj/item/organ/internal/cyberimp/eyes/shield, + /obj/item/organ/internal/cyberimp/eyes/shield, + /obj/item/organ/internal/cyberimp/mouth/breathing_tube, + /obj/item/organ/internal/cyberimp/mouth/breathing_tube, + /obj/item/organ/internal/cyberimp/eyes/meson, + /obj/item/organ/internal/cyberimp/eyes/meson, + ) + required_tech = list("materials" = 4, "biotech" = 4, "engineering" = 5, "plasmatech" = 4) + + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Organic ///////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -1455,7 +1743,7 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY /obj/item/mixing_bowl, /obj/item/reagent_containers/food/condiment/enzyme, /obj/item/reagent_containers/food/condiment/sugar, - /obj/item/reagent_containers/food/snacks/meat/monkey, + /obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /obj/item/reagent_containers/food/snacks/grown/banana, /obj/item/reagent_containers/food/snacks/grown/banana, /obj/item/reagent_containers/food/snacks/grown/banana) @@ -1723,6 +2011,41 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY containertype = /obj/structure/closet/critter/slime containername = "slime crate" +/datum/supply_packs/organic/barthender_rare + name = "Bartender Rare Reagents Crate" + containername = "bartender rare crate" + cost = 60 + contains = list( + /obj/item/storage/box/bartender_rare_ingredients_kit + ) + +/datum/supply_packs/organic/chef_rare + name = "Chef Rare Reagents Crate" + containername = "chef rare crate" + cost = 40 + contains = list( + /obj/item/storage/box/chef_rare_ingredients_kit, + /obj/item/storage/box/chef_rare_ingredients_kit + ) + +/datum/supply_packs/science/strange_seeds + name = "Strange Seeds Crate" + containername = "strange seeds crate" + cost = 300 + contains = list( + /obj/item/seeds/random, + /obj/item/seeds/random, + /obj/item/seeds/random, + /obj/item/seeds/random, + /obj/item/seeds/random, + /obj/item/seeds/random, + /obj/item/seeds/random, + /obj/item/seeds/random, + /obj/item/seeds/random, + /obj/item/seeds/random + ) + required_tech = list("biotech" = 6) + ////// hippy gear /datum/supply_packs/organic/hydroponics // -- Skie @@ -2364,7 +2687,7 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY /obj/item/tank/jetpack/suit, /obj/item/tank/jetpack/suit ) - cost = 500 + cost = 180 containername = "Jetpack upgrade crate" /datum/supply_packs/misc/crematorium diff --git a/code/datums/syndiesupplypacks.dm b/code/datums/syndiesupplypacks.dm index 10c0e1608f9..ac9334d67c2 100644 --- a/code/datums/syndiesupplypacks.dm +++ b/code/datums/syndiesupplypacks.dm @@ -1066,7 +1066,7 @@ GLOBAL_LIST_INIT(all_syndie_supply_groups, list(SYNDIE_SUPPLY_EMERGENCY,SYNDIE_S /obj/item/mixing_bowl, /obj/item/reagent_containers/food/condiment/enzyme, /obj/item/reagent_containers/food/condiment/sugar, - /obj/item/reagent_containers/food/snacks/meat/monkey, + /obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, /obj/item/reagent_containers/food/snacks/grown/banana, /obj/item/reagent_containers/food/snacks/grown/banana, /obj/item/reagent_containers/food/snacks/grown/banana) @@ -2258,4 +2258,26 @@ GLOBAL_LIST_INIT(all_syndie_supply_groups, list(SYNDIE_SUPPLY_EMERGENCY,SYNDIE_S containername = "crate" - +/datum/syndie_supply_packs/syndicate_special/secoff + name = "Syndicate 'Security Officer' Bundle" + contains = list(/obj/item/encryptionkey/syndicate, // 2 TC + /obj/item/card/id/syndicate, // 2 TC + /obj/item/clothing/glasses/hud/security/chameleon, // 2 TC + /obj/item/clothing/mask/chameleon, // In 2 TC bundle (chameleon) + /obj/item/clothing/accessory/holster, // 0 TC + /obj/item/storage/belt/military/traitor/sec, // 0 TC + /obj/item/pinpointer/advpinpointer, // 4 TC + /obj/item/gun/projectile/automatic/pistol, // 4 TC + /obj/item/ammo_box/magazine/m10mm, // 1 TC + /obj/item/ammo_box/magazine/m10mm/ap, // 1 TC + /obj/item/ammo_box/magazine/m10mm/fire, // 1 TC + /obj/item/ammo_box/magazine/m10mm/hp, // 1 TC + /obj/item/storage/box/sec, // 0 TC + /obj/item/restraints/handcuffs, // 0 TC + /obj/item/flash, // 0 TC + /obj/item/implanter/mindshield, //0 TC + /obj/item/clothing/suit/armor/vest/security + ) + cost = 30000 + containertype = /obj/structure/closet/crate/secure/syndicate + containername = "crate" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 255223859e6..f6ecff491ae 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -587,7 +587,7 @@ name = "Anomaly extract" desc = "The result of the work of scientists on mixing an experimental stable mutagen with the core of a pyroclastic anomaly. Gives the user the opportunity to become a slime and heat himself up." item = /obj/item/anomaly_extract - cost = 50 + cost = 40 race = list("Slime People") //Plasmaman @@ -600,6 +600,15 @@ cost = 20 race = list("Plasmaman") +//Nucleation + +/datum/uplink_item/racial/second_chance + name = "Second Chance Implant" + desc = "An implant injected into the body, and later activated at the user's will. It will simulate the death of the operator and transport him to an exact safe place." + item = /obj/item/implanter/second_chance + cost = 40 + race = list("Nucleation") + // DANGEROUS WEAPONS /datum/uplink_item/dangerous @@ -1563,6 +1572,12 @@ item = /obj/item/clothing/accessory/storage/brown_vest cost = 5 +/datum/uplink_item/device_tools/blackops_kit + name = "Black ops kit" + desc = "A package of clothing for dangerous covert operations" + item = /obj/item/storage/box/syndie_kit/blackops_kit + cost = 10 + /datum/uplink_item/device_tools/surgerybag name = "Syndicate Surgery Duffelbag" desc = "The Syndicate Surgical Bag comes with a complete set of everything you need for quality surgery, including a straitjacket and muzzle. The bag itself is unprecedentedly light, doesn't slow you down, and is completely silent." @@ -2073,15 +2088,15 @@ item = /obj/item/stack/telecrystal/twenty_five cost = 25 -/datum/uplink_item/bundles_TC/telecrystal/hundread +/datum/uplink_item/bundles_TC/telecrystal/hundred name = "100 Raw Telecrystals" - desc = "Hundread telecrystals in their rawest and purest form; can be utilized on active uplinks to increase their telecrystal count." - item = /obj/item/stack/telecrystal/hundread + desc = "Hundred telecrystals in their rawest and purest form; can be utilized on active uplinks to increase their telecrystal count." + item = /obj/item/stack/telecrystal/hundred cost = 100 -/datum/uplink_item/bundles_TC/telecrystal/twohundread_fifty +/datum/uplink_item/bundles_TC/telecrystal/twohundred_fifty name = "250 Raw Telecrystals" - desc = "Two hundread fifty telecrystals in their rawest and purest form. You know you want that Mauler." - item = /obj/item/stack/telecrystal/twohundread_fifty + desc = "Two hundred fifty telecrystals in their rawest and purest form. You know you want that Mauler." + item = /obj/item/stack/telecrystal/twohundred_fifty cost = 250 uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 74a98095883..d745ab1d319 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -174,7 +174,9 @@ switch(action) // Toggles the cut/mend status. if("cut") - if(!istype(I, /obj/item/wirecutters) && !user.can_admin_interact()) + if(!I) + return + if(I.tool_behaviour != TOOL_WIRECUTTER && !user.can_admin_interact()) to_chat(user, "You need wirecutters!") return @@ -185,7 +187,9 @@ // Pulse a wire. if("pulse") - if(!istype(I, /obj/item/multitool) && !user.can_admin_interact()) + if(!I) + return + if(I.tool_behaviour != TOOL_MULTITOOL && !user.can_admin_interact()) to_chat(user, "You need a multitool!") return diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index d7d0828ce56..45f27e5481a 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -81,22 +81,23 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event var/list/garbled_receivers = list() if(admin_announcement) - for(var/mob/M in GLOB.player_list) + for(var/mob/M as anything in GLOB.player_list) if(!isnewplayer(M) && M.client) - receivers |= M + receivers[M] = TRUE else - for(var/obj/item/radio/R in GLOB.global_radios) - receivers |= R.send_announcement() + for(var/obj/item/radio/R as anything in GLOB.global_radios) + for(var/mob/M as anything in R.send_announcement()) + receivers[M] = TRUE for(var/mob/M in receivers) if(!istype(M) || !M.client || M.stat || !M.can_hear()) receivers -= M continue if(!M.say_understands(null, message_language)) receivers -= M - garbled_receivers |= M - for(var/mob/M in GLOB.dead_mob_list) + garbled_receivers[M] = TRUE + for(var/mob/M as anything in GLOB.dead_mob_list) if(M.client && M.stat == DEAD && !isnewplayer(M)) - receivers |= M + receivers[M] = TRUE return list(receivers, garbled_receivers) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 06b48a8511a..b5b61639aa5 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -178,7 +178,7 @@ alternate_appearances = null QDEL_NULL(reagents) - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_ABSTRACT LAZYCLEARLIST(overlays) LAZYCLEARLIST(priority_overlays) @@ -1295,3 +1295,11 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) return TRUE . = !density + +/atom/proc/get_examine_time() // Used only in /mob/living/carbon/human and /mob/living/simple_animal/hostile/morph + return 0 SECONDS + + +/atom/proc/get_visible_gender() // Used only in /mob/living/carbon/human and /mob/living/simple_animal/hostile/morph + return gender + diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 3882d87d04b..6c5a4a9bf14 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -61,6 +61,9 @@ /datum/atom_hud/thoughts hud_icons = list(THOUGHT_HUD) +/datum/atom_hud/kidan_pheromones + hud_icons = list(KIDAN_PHEROMONES_HUD) + /* MED/SEC/DIAG HUD HOOKS */ /* diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 8c68685956e..86c0f37a9c7 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -168,7 +168,7 @@ add_fingerprint(usr) SStgui.update_uis(src) -/obj/machinery/dna_scannernew/MouseDrop_T(atom/movable/O, mob/user) +/obj/machinery/dna_scannernew/MouseDrop_T(atom/movable/O, mob/user, params) if(!istype(O)) return if(O.loc == user) //no you can't pull things out of your ass @@ -189,23 +189,23 @@ return if(occupant) to_chat(user, "The [src] is already occupied!") - return + return TRUE var/mob/living/L = O if(!istype(L) || L.buckled) return if(L.abiotic()) to_chat(user, "Subject cannot have abiotic items on.") - return + return TRUE if(L.has_buckled_mobs()) //mob attached to us to_chat(user, "[L] will not fit into [src] because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.") - return + return TRUE if(L == user) visible_message("[user] climbs into the [src].") else visible_message("[user] puts [L.name] into the [src].") put_in(L) - if(user.pulling == L) - user.stop_pulling() + L.pulledby?.stop_pulling() + return TRUE /obj/machinery/dna_scannernew/attackby(obj/item/I, mob/user, params) if(exchange_parts(user, I)) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 37691e30755..dd22c72f752 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -228,7 +228,7 @@ /mob/living/simple_animal/hostile/blob/blobbernaut/proc/blob_talk() var/message = input(src, "Announce to the overmind", "Blob Telepathy") - var/rendered = "Blob Telepathy, [name]([overmind]) states, \"[message]\"" + var/rendered = "Blob Telepathy, [name]([overmind]) states, \"[message]\"" if(message) for(var/mob/M in GLOB.mob_list) if(isovermind(M) || isobserver(M) || istype((M), /mob/living/simple_animal/hostile/blob/blobbernaut)) diff --git a/code/game/gamemodes/blob/blobs/captured_nuke.dm b/code/game/gamemodes/blob/blobs/captured_nuke.dm index 1841cbbb4fb..d9312ba261b 100644 --- a/code/game/gamemodes/blob/blobs/captured_nuke.dm +++ b/code/game/gamemodes/blob/blobs/captured_nuke.dm @@ -10,12 +10,11 @@ START_PROCESSING(SSobj, src) N?.forceMove(src) -/obj/structure/blob/captured_nuke/update_icon() - ..() - cut_overlays() - var/image/nuke_overlay = image('icons/mob/blob.dmi', "blob_nuke_overlay") - nuke_overlay.appearance_flags = RESET_COLOR - add_overlay(nuke_overlay) + +/obj/structure/blob/captured_nuke/update_overlays() + . = ..() + . += mutable_appearance('icons/mob/blob.dmi', "blob_nuke_overlay", appearance_flags = RESET_COLOR) + /obj/structure/blob/captured_nuke/Destroy() for(var/obj/machinery/nuclearbomb/O in contents) diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index 96f3e0a2382..6f227fd858e 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -12,23 +12,53 @@ /obj/structure/blob/shield/core point_return = 0 -/obj/structure/blob/shield/update_icon() - ..() + +/obj/structure/blob/shield/check_integrity() + var/old_compromised_integrity = compromised_integrity if(obj_integrity < max_integrity * 0.5) - icon_state = "[initial(icon_state)]_damaged" - name = "weakened [initial(name)]" - desc = "A wall of twitching tendrils." + compromised_integrity = TRUE + else + compromised_integrity = FALSE + if(old_compromised_integrity != compromised_integrity) + update_state() + update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) + + +/obj/structure/blob/shield/update_state() + if(compromised_integrity) atmosblock = FALSE else - icon_state = initial(icon_state) - name = initial(name) - desc = initial(desc) atmosblock = TRUE air_update_turf(1) + +/obj/structure/blob/shield/update_name(updates = ALL) + . = ..() + if(compromised_integrity) + name = "weakened [initial(name)]" + else + name = initial(name) + + +/obj/structure/blob/shield/update_desc(updates = ALL) + . = ..() + if(compromised_integrity) + desc = "A wall of twitching tendrils." + else + desc = initial(desc) + + +/obj/structure/blob/shield/update_icon_state() + if(compromised_integrity) + icon_state = "[initial(icon_state)]_damaged" + else + icon_state = initial(icon_state) + + /obj/structure/blob/shield/CanPass(atom/movable/mover, turf/target, height=0) - if(istype(mover) && mover.checkpass(PASSBLOB)) return 1 - return 0 + if(istype(mover) && mover.checkpass(PASSBLOB)) + return TRUE + return FALSE /obj/structure/blob/shield/reflective name = "reflective blob" diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index cd35d1ead0f..87c5f619e28 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -89,8 +89,7 @@ if(!message) return - var/verb = "states," - var/rendered = "Blob Telepathy, [name]([blob_reagent_datum.name]) [verb] \"[message]\"" + var/rendered = "Blob Telepathy, [name]([blob_reagent_datum.name]) states, \"[message]\"" for(var/mob/M in GLOB.mob_list) if(isovermind(M) || isobserver(M) || istype((M), /mob/living/simple_animal/hostile/blob/blobbernaut)) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 801e65227bc..062518cafdf 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -14,6 +14,8 @@ var/brute_resist = 0.5 //multiplies brute damage by this var/fire_resist = 1 //multiplies burn damage by this var/atmosblock = FALSE //if the blob blocks atmos and heat spread + /// If a threshold is reached, resulting in shifting variables + var/compromised_integrity = FALSE var/mob/camera/blob/overmind creates_cover = TRUE @@ -21,7 +23,7 @@ ..() GLOB.blobs += src setDir(pick(GLOB.cardinal)) - update_icon() + check_integrity() if(atmosblock) air_update_turf(1) ConsumeTile() @@ -41,6 +43,12 @@ /obj/structure/blob/BlockSuperconductivity() return atmosblock +/obj/structure/blob/proc/check_integrity() + return + +/obj/structure/blob/proc/update_state() + return + /obj/structure/blob/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) return 1 @@ -75,7 +83,7 @@ return 0 if(obj_integrity < max_integrity) obj_integrity = min(max_integrity, obj_integrity + 1) - update_icon() + check_integrity() health_timestamp = world.time + 10 // 1 seconds @@ -193,7 +201,7 @@ /obj/structure/blob/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() if(. && obj_integrity > 0) - update_icon() + check_integrity() /obj/structure/blob/proc/change_to(var/type) if(!ispath(type)) @@ -240,20 +248,45 @@ max_integrity = 25 brute_resist = 0.25 -/obj/structure/blob/normal/update_icon() - ..() + +/obj/structure/blob/normal/check_integrity() + var/old_compromised_integrity = compromised_integrity if(obj_integrity <= 15) - icon_state = "blob_damaged" - name = "fragile blob" - desc = "A thin lattice of slightly twitching tendrils." + compromised_integrity = TRUE + else + compromised_integrity = FALSE + if(old_compromised_integrity != compromised_integrity) + update_state() + update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) + + +/obj/structure/blob/normal/update_state() + if(compromised_integrity) brute_resist = 0.5 - else if(overmind) - icon_state = "blob" - name = "blob" - desc = "A thick wall of writhing tendrils." + else brute_resist = 0.25 + + +/obj/structure/blob/normal/update_name(updates = ALL) + . = ..() + if(compromised_integrity) + name = "fragile blob" + else + name = "[overmind ? "blob" : "dead blob"]" + + +/obj/structure/blob/normal/update_desc(updates = ALL) + . = ..() + if(compromised_integrity) + desc = "A thin lattice of slightly twitching tendrils." + else + desc = "A thick wall of [overmind ? "writhing" : "lifeless"] tendrils." + + +/obj/structure/blob/normal/update_icon_state() + if(compromised_integrity) + icon_state = "blob_damaged" else icon_state = "blob" - name = "dead blob" - desc = "A thick wall of lifeless tendrils." - brute_resist = 0.25 + + diff --git a/code/game/gamemodes/clockwork/clockwork_gateway.dm b/code/game/gamemodes/clockwork/clockwork_gateway.dm index 1695cd823b0..3a8d3135878 100644 --- a/code/game/gamemodes/clockwork/clockwork_gateway.dm +++ b/code/game/gamemodes/clockwork/clockwork_gateway.dm @@ -51,13 +51,27 @@ countdown.stop() visible_message("[src] begins to pulse uncontrollably... you might want to run!") sound_to_playing_players(volume = 50, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/magic/clockwork/clockcult_gateway_disrupted.ogg')) - icon_state = "clockwork_gateway_disrupted" + update_icon(UPDATE_ICON_STATE) resistance_flags |= INDESTRUCTIBLE sleep(2.7 SECONDS) explosion(src, 1, 3, 8, 8) sound_to_playing_players('sound/effects/explosionfar.ogg', volume = 50) qdel(src) + +/obj/structure/clockwork/functional/celestial_gateway/update_icon_state() + if(!countdown || !countdown.started) + icon_state = "clockwork_gateway_disrupted" + return + switch(seconds_until_activation) + if(-INFINITY to GATEWAY_REEBE_FOUND) + icon_state = "clockwork_gateway_charging" + if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING) + icon_state = "clockwork_gateway_active" + if(GATEWAY_RATVAR_COMING to INFINITY) + icon_state = "clockwork_gateway_closing" + + /obj/structure/clockwork/functional/celestial_gateway/ex_act(severity) var/damage = max((obj_integrity * 0.7) / severity, 100) take_damage(damage, BRUTE, "bomb", 0) @@ -105,17 +119,17 @@ sound_to_playing_players('sound/magic/clockwork/invoke_general.ogg', 30, FALSE) sound_to_playing_players(volume = 20, channel = CHANNEL_JUSTICAR_ARK, pressure_affected = FALSE, S = sound('sound/magic/clockwork/clockcult_gateway_charging.ogg', TRUE)) first_sound_played = TRUE - icon_state = "clockwork_gateway_charging" + update_icon(UPDATE_ICON_STATE) if(GATEWAY_REEBE_FOUND to GATEWAY_RATVAR_COMING) if(!second_sound_played) sound_to_playing_players(volume = 30, channel = CHANNEL_JUSTICAR_ARK, pressure_affected = FALSE, S = sound('sound/magic/clockwork/clockcult_gateway_active.ogg', TRUE)) second_sound_played = TRUE - icon_state = "clockwork_gateway_active" + update_icon(UPDATE_ICON_STATE) if(GATEWAY_RATVAR_COMING to GATEWAY_RATVAR_ARRIVAL) if(!third_sound_played) sound_to_playing_players(volume = 40, channel = CHANNEL_JUSTICAR_ARK, pressure_affected = FALSE, S = sound('sound/magic/clockwork/clockcult_gateway_closing.ogg', TRUE)) third_sound_played = TRUE - icon_state = "clockwork_gateway_closing" + update_icon(UPDATE_ICON_STATE) if(GATEWAY_RATVAR_ARRIVAL to INFINITY) if(!purpose_fulfilled) countdown.stop() diff --git a/code/game/gamemodes/clockwork/clockwork_items.dm b/code/game/gamemodes/clockwork/clockwork_items.dm index 14741815479..dfa391fe412 100644 --- a/code/game/gamemodes/clockwork/clockwork_items.dm +++ b/code/game/gamemodes/clockwork/clockwork_items.dm @@ -10,13 +10,29 @@ var/list/plush_colors = list("red fox plushie" = "redfox", "black fox plushie" = "blackfox", "blue fox plushie" = "bluefox", "orange fox plushie" = "orangefox", "corgi plushie" = "corgi", "black cat plushie" = "blackcat", "deer plushie" = "deer", "octopus plushie" = "loveable", "facehugger plushie" = "huggable") - var/plushy = FALSE + var/plushy + /obj/item/clockwork/clockslab/Initialize(mapload) . = ..() enchants = GLOB.clockslab_spells +/obj/item/clockwork/clockslab/update_name(updates = ALL) + . = ..() + name = plushy ? plushy : initial(name) + + +/obj/item/clockwork/clockslab/update_desc(updates = ALL) + . = ..() + desc = plushy ? "An adorable, soft, and cuddly plushie." : initial(desc) + + +/obj/item/clockwork/clockslab/update_icon_state() + icon = plushy ? 'icons/obj/toy.dmi' : 'icons/obj/clockwork.dmi' + icon_state = plushy ? plush_colors[plushy] : initial(icon_state) + + /obj/item/clockwork/clockslab/update_overlays() . = ..() if(enchant_type) @@ -37,13 +53,11 @@ return if(alert(user, "Do you want to reveal clockwork slab?","Revealing!","Yes","No") != "Yes") return - name = "clockwork slab" - desc = "A strange metal tablet. A clock in the center turns around and around." - icon = 'icons/obj/clockwork.dmi' - icon_state = "clock_slab" attack_verb = null deplete_spell() - plushy = FALSE + plushy = null + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + if(!isclocker(user)) to_chat(user, "\"Now now, this is for my servants, not you.\"") if(iscarbon(user)) @@ -51,17 +65,15 @@ carbon.Weaken(10 SECONDS) carbon.Stuttering(20 SECONDS) return + if(enchant_type == HIDE_SPELL) to_chat(user, "You disguise your tool as some little toy.") playsound(user, 'sound/magic/cult_spell.ogg', 15, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - var/chosen_plush = pick(plush_colors) - name = chosen_plush - desc = "An adorable, soft, and cuddly plushie." - icon = 'icons/obj/toy.dmi' - icon_state = plush_colors[chosen_plush] + plushy = pick(plush_colors) attack_verb = list("poofed", "bopped", "whapped","cuddled","fluffed") enchant_type = CASTING_SPELL - plushy = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + if(enchant_type == TELEPORT_SPELL) var/list/possible_altars = list() var/list/altars = list() @@ -225,8 +237,7 @@ enchants = GLOB.spear_spells /obj/item/twohanded/ratvarian_spear/update_icon_state() - icon_state = "ratvarian_spear[wielded]" - + icon_state = "ratvarian_spear[HAS_TRAIT(src, TRAIT_WIELDED)]" /obj/item/twohanded/ratvarian_spear/update_overlays() . = ..() @@ -313,7 +324,6 @@ . = ..() enchants = GLOB.spear_spells - /obj/item/clock_borg_spear/update_overlays() . = ..() if(enchant_type) @@ -370,13 +380,12 @@ enchants = GLOB.hammer_spells /obj/item/twohanded/clock_hammer/update_icon_state() - icon_state = "clock_hammer[wielded]" - + icon_state = "clock_hammer[HAS_TRAIT(src, TRAIT_WIELDED)]" /obj/item/twohanded/clock_hammer/update_overlays() . = ..() if(enchant_type) - . +="clock_hammer0_overlay_[enchant_type]" + . += "clock_hammer0_overlay_[enchant_type]" /obj/item/twohanded/clock_hammer/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(!isliving(hit_atom)) @@ -576,14 +585,10 @@ . = ..() enchants = GLOB.shield_spells -/obj/item/shield/clock_buckler/update_icon() - update_overlays() - return ..() - /obj/item/shield/clock_buckler/update_overlays() - cut_overlays() + . = ..() if(enchant_type) - overlays += "brass_buckler_overlay_[enchant_type]" + . += "brass_buckler_overlay_[enchant_type]" /obj/item/shield/clock_buckler/attack_self(mob/user) . = ..() @@ -1294,7 +1299,7 @@ /obj/item/clockwork/shard/update_overlays() . = ..() if(enchant_type) - . +="shard_overlay_[enchant_type]" + . += "shard_overlay_[enchant_type]" /obj/item/clockwork/shard/attack_self(mob/user) if(!isclocker(user) && isliving(user)) diff --git a/code/game/gamemodes/clockwork/clockwork_misc.dm b/code/game/gamemodes/clockwork/clockwork_misc.dm index fe03c247b1b..eae4ebfb3a5 100644 --- a/code/game/gamemodes/clockwork/clockwork_misc.dm +++ b/code/game/gamemodes/clockwork/clockwork_misc.dm @@ -91,8 +91,11 @@ /obj/effect/decal/cleanable/blood/gibs/clock/can_bloodcrawl_in() return FALSE -/obj/effect/decal/cleanable/blood/gibs/clock/update_icon() + +/obj/effect/decal/cleanable/blood/gibs/clock/update_icon(updates = ALL) color = "#FFFFFF" + . = ..(NONE) + /obj/effect/decal/cleanable/blood/gibs/clock/dry() return diff --git a/code/game/gamemodes/clockwork/clockwork_mob.dm b/code/game/gamemodes/clockwork/clockwork_mob.dm index 7ecdbb32c51..1fce1d4ba54 100644 --- a/code/game/gamemodes/clockwork/clockwork_mob.dm +++ b/code/game/gamemodes/clockwork/clockwork_mob.dm @@ -155,7 +155,7 @@ investigate_log("was chewed through by a clock mouse in [get_area(F)]([F.x], [F.y], [F.z] - [ADMIN_JMP(F)])","wires") C.deconstruct() -/mob/living/simple_animal/mouse/clockwork/splat(var/obj/item/item = null, var/mob/living/user = null) +/mob/living/simple_animal/mouse/clockwork/splat(obj/item/item = null, mob/living/user = null) return /mob/living/simple_animal/mouse/clockwork/toast() diff --git a/code/game/gamemodes/clockwork/clockwork_soulvessel.dm b/code/game/gamemodes/clockwork/clockwork_soulvessel.dm index b2d5637adec..142935afda6 100644 --- a/code/game/gamemodes/clockwork/clockwork_soulvessel.dm +++ b/code/game/gamemodes/clockwork/clockwork_soulvessel.dm @@ -21,15 +21,14 @@ chosen_ghost = ghost break if(!chosen_ghost) - icon_state = searching_icon searching = TRUE + update_icon(UPDATE_ICON_STATE) to_chat(user, "Capture failed! The soul has already fled its mortal frame. You attempt to bring it back...") var/list/candidates = SSghost_spawns.poll_candidates("Would you like to play as a Servant of Ratvar?", ROLE_CLOCKER, FALSE, poll_time = 10 SECONDS, source = /obj/item/mmi/robotic_brain/clockwork) if(length(candidates)) chosen_ghost = pick(candidates) searching = FALSE - if(!brainmob?.key) - icon_state = blank_icon + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) if(!M) return FALSE if(!chosen_ghost) @@ -61,10 +60,9 @@ brainmob.key = candidate.key brainmob.name = "[pick(list("Nycun", "Oenib", "Havsbez", "Ubgry", "Fvreen"))]-[rand(10, 99)]" brainmob.real_name = brainmob.name - name = "[src] ([brainmob.name])" brainmob.mind.assigned_role = "Soul Vessel Cube" visible_message("[src] chimes quietly.") - become_occupied(occupied_icon) + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) if(SSticker.mode.add_clocker(brainmob.mind)) brainmob.create_log(CONVERSION_LOG, "[brainmob.mind] been converted by [src.name]") diff --git a/code/game/gamemodes/clockwork/clockwork_structures.dm b/code/game/gamemodes/clockwork/clockwork_structures.dm index b8ab532148f..c3995892d8e 100644 --- a/code/game/gamemodes/clockwork/clockwork_structures.dm +++ b/code/game/gamemodes/clockwork/clockwork_structures.dm @@ -22,6 +22,7 @@ var/death_sound = 'sound/effects/forge_destroy.ogg' var/canbehidden = FALSE var/hidden = FALSE + var/hidden_type var/list/choosable_items = list( "rack" = /obj/structure/rack, "table" = /obj/structure/table, @@ -31,6 +32,72 @@ "bookcase" = /obj/structure/bookcase ) +/obj/structure/clockwork/functional/update_name(updates = ALL) + . = ..() + if(!hidden) + name = initial(name) + return + switch(hidden_type) + if("rack") + name = "rack" + if("table") + name = "table" + if("wooden table") + name = "wooden table" + if("personal closet") + name = "personal closet" + if("girder") + name = "girder" + if("bookcase") + name = "bookcase" + + +/obj/structure/clockwork/functional/update_desc(updates = ALL) + . = ..() + if(!hidden) + desc = initial(desc) + return + switch(hidden_type) + if("rack") + desc = "Different from the Middle Ages version.
It's held together by a couple of bolts." + if("table") + desc = "A square piece of metal standing on four metal legs. It can not move.
The top is screwed on, but the main bolts are also visible." + if("wooden table") + desc = "Do not apply fire to this. Rumour says it burns easily.
The top is screwed on, but the main bolts are also visible." + if("personal closet") + desc = "It's a secure locker for personnel. The first card swiped gains control." + if("girder") + desc = "The bolts are lodged in place." + if("bookcase") + desc = null + + +/obj/structure/clockwork/functional/update_icon_state() + if(!hidden) + icon = initial(icon) + icon_state = anchored ? "[initial(icon_state)]-off" : initial(icon_state) + return + switch(hidden_type) + if("rack") + icon = 'icons/obj/objects.dmi' + icon_state = "rack" + if("table") + icon = 'icons/obj/smooth_structures/table.dmi' + icon_state = "table" + if("wooden table") + icon = 'icons/obj/smooth_structures/wood_table.dmi' + icon_state = "wood_table" + if("personal closet") + icon = 'icons/obj/closet.dmi' + icon_state = "secureoff" + if("girder") + icon = 'icons/obj/structures.dmi' + icon_state = "girder" + if("bookcase") + icon = 'icons/obj/library.dmi' + icon_state = "book-0" + + /obj/structure/clockwork/functional/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/clockwork/clockslab) && isclocker(user)) if(I.enchant_type == HIDE_SPELL && canbehidden) @@ -59,11 +126,7 @@ add_fingerprint(user) anchored = !anchored to_chat(user, "You [anchored ? "":"un"]secure [src] [anchored ? "to":"from"] the floor.") - if(!anchored) - icon_state = "[initial(icon_state)]-off" - else - icon_state = "[initial(icon_state)]" - update_icon() + update_icon(UPDATE_ICON_STATE) return TRUE return ..() @@ -81,45 +144,12 @@ /obj/structure/clockwork/functional/proc/toggle_hide(chosen_type) hidden = !hidden if(!hidden) - name = initial(name) - desc = initial(desc) - icon = initial(icon) - if(!anchored) - icon_state = "[initial(icon_state)]-off" - else - icon_state = "[initial(icon_state)]" + hidden_type = null + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) return FALSE - switch(chosen_type) - if("rack") - name = "rack" - desc = "Different from the Middle Ages version.
It's held together by a couple of bolts." - icon = 'icons/obj/objects.dmi' - icon_state = "rack" - if("table") - name = "table" - desc = "A square piece of metal standing on four metal legs. It can not move.
The top is screwed on, but the main bolts are also visible." - icon = 'icons/obj/smooth_structures/table.dmi' - icon_state = "table" - if("wooden table") - name = "wooden table" - desc = "Do not apply fire to this. Rumour says it burns easily.
The top is screwed on, but the main bolts are also visible." - icon = 'icons/obj/smooth_structures/wood_table.dmi' - icon_state = "wood_table" - if("personal closet") - name = "personal closet" - desc = "It's a secure locker for personnel. The first card swiped gains control." - icon = 'icons/obj/closet.dmi' - icon_state = "secureoff" - if("girder") - name = "girder" - desc = "The bolts are lodged in place." - icon = 'icons/obj/structures.dmi' - icon_state = "girder" - if("bookcase") - name = "bookcase" - desc = null - icon = 'icons/obj/library.dmi' - icon_state = "book-0" + + hidden_type = chosen_type + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) return TRUE /obj/structure/clockwork/functional/beacon @@ -231,6 +261,62 @@ STOP_PROCESSING(SSprocessing, src) return ..() + +/obj/structure/clockwork/functional/altar/update_name(updates = ALL) + . = ..() + if(!hidden) + name = initial(name) + return + switch(hidden_type) + if("potted plant") + name = "potted plant" + if("chair") + name = "chair" + if("stool") + name = "stool" + if("broken grille") + name = "grille" + + +/obj/structure/clockwork/functional/altar/update_desc(updates = ALL) + . = ..() + if(!hidden) + desc = initial(desc) + return + switch(hidden_type) + if("potted plant") + desc = null + if("chair") + desc = "You sit in this. Either by will or force." + if("stool") + desc = "Apply butt." + if("broken grille") + desc = "A flimsy framework of metal rods." + + +/obj/structure/clockwork/functional/altar/update_icon_state() + if(!hidden) + icon = initial(icon) + if(!anchored) + icon_state = "[initial(icon_state)]-off" + return + icon_state = first_stage ? "[initial(icon_state)]-fast" : initial(icon_state) + return + switch(hidden_type) + if("potted plant") + icon = 'icons/obj/flora/plants.dmi' + icon_state = "plant-[rand(1,36)]" + if("chair") + icon = 'icons/obj/chairs.dmi' + icon_state = "chair" + if("stool") + icon = 'icons/obj/chairs.dmi' + icon_state = "stool" + if("broken grille") + icon = 'icons/obj/structures.dmi' + icon_state = "brokengrille" + + /obj/structure/clockwork/functional/altar/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/clockwork/clockslab) && isclocker(user)) if(hidden) @@ -269,50 +355,16 @@ to_chat(usr, "There is a structure here!") return TRUE anchored = !anchored + update_icon(UPDATE_ICON_STATE) to_chat(user, "You [anchored ? "":"un"]secure [src] [anchored ? "to":"from"] the floor.") if(!anchored) stop_convert(TRUE) STOP_PROCESSING(SSprocessing, src) else - icon_state = "[initial(icon_state)]" START_PROCESSING(SSprocessing, src) - update_icon() return TRUE return ..() -/obj/structure/clockwork/functional/altar/toggle_hide(chosen_type) - hidden = !hidden - if(!hidden) - name = initial(name) - desc = initial(desc) - icon = initial(icon) - if(!anchored) - icon_state = "[initial(icon_state)]-off" - else - icon_state = "[initial(icon_state)]" - return FALSE - switch(chosen_type) - if("potted plant") - name = "potted plant" - desc = null - icon = 'icons/obj/flora/plants.dmi' - icon_state = "plant-[rand(1,36)]" - if("chair") - name = "chair" - desc = "You sit in this. Either by will or force." - icon = 'icons/obj/chairs.dmi' - icon_state = "chair" - if("stool") - name = "stool" - desc = "Apply butt." - icon = 'icons/obj/chairs.dmi' - icon_state = "stool" - if("broken grille") - name = "grille" - desc = "A flimsy framework of metal rods." - icon = 'icons/obj/structures.dmi' - icon_state = "brokengrille" - return TRUE /obj/structure/clockwork/functional/altar/process() for(var/mob/living/M in range(1, src)) @@ -356,7 +408,7 @@ target.visible_message("[src] begins to glow a piercing amber!", "You feel something start to invade your mind...") glow = new (get_turf(src)) animate(glow, alpha = 255, time = 8 SECONDS) - icon_state = "[initial(icon_state)]-fast" + update_icon(UPDATE_ICON_STATE) /obj/structure/clockwork/functional/altar/proc/second_stage_check(var/mob/living/carbon/human/target) second_stage = TRUE @@ -381,10 +433,7 @@ second_stage = FALSE convert_timer = 0 converting = null - if(anchored) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]-off" + update_icon(UPDATE_ICON_STATE) if(!silent) visible_message("[src] slowly stops glowing!") @@ -452,6 +501,11 @@ if(!hidden && (isclocker(user) || isobserver(user))) . += "There's [cog_slots - cogscarab_list.len] cogscarab ready. [timer_fabrictor ? "And it's creating another one now" : "It stopped creating."]." + +/obj/structure/clockwork/functional/cogscarab_fabricator/update_icon_state() + icon_state = anchored ? "[initial(icon_state)]-off" : initial(icon_state) + + /obj/structure/clockwork/functional/cogscarab_fabricator/Initialize(mapload) . = ..() GLOB.clockwork_fabricators += src @@ -490,17 +544,15 @@ return TRUE add_fingerprint(user) anchored = !anchored + update_icon(UPDATE_ICON_STATE) to_chat(user, "You [anchored ? "":"un"]secure [src] [anchored ? "to":"from"] the floor.") if(!anchored) - icon_state = "[initial(icon_state)]-off" if(timer_fabrictor) deltimer(timer_fabrictor) timer_fabrictor = null else - icon_state = "[initial(icon_state)]" if(cog_slots < MAX_COGSCRAB_PER_FABRICATOR) timer_fabrictor = addtimer(CALLBACK(src, PROC_REF(open_slot)), TIME_NEW_COGSCRAB SECONDS) - update_icon() return TRUE /obj/structure/clockwork/functional/cogscarab_fabricator/toggle_hide(chosen_type) diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm index 6746aada31f..54ec37a807d 100644 --- a/code/game/gamemodes/cult/blood_magic.dm +++ b/code/game/gamemodes/cult/blood_magic.dm @@ -682,7 +682,7 @@ to_chat(user, "You empower [target] with blood, recharging its ability to shift!") playsound(user, 'sound/magic/cult_spell.ogg', 25, TRUE) S.uses = 4 - S.icon_state = "shifter" + S.update_icon(UPDATE_ICON_STATE) else to_chat(user, "[target] is already at full charge!") return @@ -827,7 +827,7 @@ var/turf/T = get_turf(target) if(T) for(var/obj/effect/decal/cleanable/blood/B in view(T, 2)) - if(B.blood_state == BLOOD_STATE_HUMAN && (B.can_bloodcrawl_in() || istype(B, /obj/effect/decal/cleanable/blood/slime))) + if(B.blood_state == BLOOD_STATE_HUMAN && (B.can_bloodcrawl_in() || istype(B, /obj/effect/decal/cleanable/blood/slime) || istype(B, /obj/effect/decal/cleanable/blood/drask))) if(B.bloodiness == 100) //Bonus for "pristine" bloodpools, also to prevent cheese with footprint spam temp += 30 else diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 966cf5d63ca..930b97455d0 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -6,10 +6,18 @@ throw_range = 5 w_class = WEIGHT_CLASS_SMALL -/obj/item/tome/New() - if(SSticker.mode) + +/obj/item/tome/Initialize(mapload) + . = ..() + update_icon(UPDATE_ICON_STATE) + + +/obj/item/tome/update_icon_state() + if(SSticker?.cultdat) icon_state = SSticker.cultdat.tome_icon - ..() + else + icon_state = initial(icon_state) + /obj/item/melee/cultblade name = "cult blade" @@ -25,11 +33,20 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sprite_sheets_inhand = list("Skrell" = 'icons/mob/clothing/species/skrell/held.dmi') // To stop skrell stabbing themselves in the head -/obj/item/melee/cultblade/New() - if(SSticker.mode) + +/obj/item/melee/cultblade/Initialize(mapload) + . = ..() + update_icon(UPDATE_ICON_STATE) + + +/obj/item/melee/cultblade/update_icon_state() + if(SSticker?.cultdat) icon_state = SSticker.cultdat.sword_icon item_state = SSticker.cultdat.sword_icon - ..() + else + icon_state = initial(icon_state) + item_state = initial(item_state) + /obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user) if(!iscultist(user)) @@ -265,7 +282,7 @@ prefix = "darkened" claw_damage_increase = 4 -/obj/item/whetstone/cult/update_icon() +/obj/item/whetstone/cult/update_icon_state() icon_state = "cult_sharpener[used ? "_used" : ""]" /obj/item/whetstone/cult/attackby(obj/item/I, mob/user, params) @@ -348,6 +365,11 @@ else . += "It seems drained." + +/obj/item/cult_shift/update_icon_state() + icon_state = "shifter[uses > 0 ? "" : "_drained"]" + + /obj/item/cult_shift/proc/handle_teleport_grab(turf/T, mob/user) var/mob/living/carbon/C = user if(C.pulling) @@ -389,8 +411,7 @@ if(turfs) uses-- var/turf/destination = pick(turfs) - if(uses <= 0) - icon_state ="shifter_drained" + update_icon(UPDATE_ICON_STATE) playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, C.dir) @@ -591,8 +612,8 @@ qdel(spear_act) ..() -/obj/item/twohanded/cult_spear/update_icon() - icon_state = "bloodspear[wielded]" +/obj/item/twohanded/cult_spear/update_icon_state() + icon_state = "bloodspear[HAS_TRAIT(src, TRAIT_WIELDED)]" /obj/item/twohanded/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) var/turf/T = get_turf(hit_atom) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index e6fff3140b9..242a7999d9e 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -46,6 +46,13 @@ var/list/choosable_items = list("A coder forgot to set this" = /obj/item/grown/bananapeel) var/creation_message = "A dank smoke comes out, and you pass out. When you come to, you notice a %ITEM%!" + +/obj/structure/cult/functional/Initialize(mapload) + . = ..() + if(cult_icon_changing) + update_icon(UPDATE_ICON_STATE) + + /obj/structure/cult/functional/obj_destruction() visible_message(death_message) playsound(src, death_sound, 50, TRUE) @@ -57,15 +64,21 @@ . += "The magic in [src] is weak, it will be ready to use again in [get_ETA()]." . += "[src] is [anchored ? "":"not "]secured to the floor." + +/obj/structure/cult/functional/update_icon_state() + var/init_icon = initial(icon_state) + if(!SSticker || !SSticker.cultdat || !cult_icon_changing) + icon_state = init_icon + return + icon_state = anchored ? SSticker.cultdat.get_icon("[init_icon]") : SSticker.cultdat.get_icon("[init_icon]_off") + + /obj/structure/cult/functional/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) add_fingerprint(user) anchored = !anchored + update_icon(UPDATE_ICON_STATE) to_chat(user, "You [anchored ? "":"un"]secure [src] [anchored ? "to":"from"] the floor.") - if(!anchored) - icon_state = SSticker.cultdat?.get_icon("[initial(icon_state)]_off") - else - icon_state = SSticker.cultdat?.get_icon("[initial(icon_state)]") return return ..() @@ -143,10 +156,6 @@ choosable_items = list("Eldritch Whetstone" = /obj/item/whetstone/cult, "Flask of Unholy Water" = /obj/item/reagent_containers/food/drinks/bottle/unholywater, "Construct Shell" = /obj/structure/constructshell) -/obj/structure/cult/functional/altar/Initialize(mapload) - . = ..() - if(cult_icon_changing) - icon_state = SSticker.cultdat?.altar_icon_state /obj/structure/cult/functional/forge name = "daemon forge" @@ -164,10 +173,6 @@ choosable_items = list("Shielded Robe" = /obj/item/clothing/suit/hooded/cultrobes/cult_shield, "Flagellant's Robe" = /obj/item/clothing/suit/hooded/cultrobes/flagellant_robe, "Mirror Shield" = /obj/item/shield/mirror) -/obj/structure/cult/functional/forge/Initialize(mapload) - . = ..() - if(cult_icon_changing) - icon_state = SSticker.cultdat?.forge_icon_state /obj/structure/cult/functional/forge/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/grab)) @@ -253,8 +258,7 @@ GLOBAL_LIST_INIT(blacklisted_pylon_turfs, typecacheof(list( ) START_PROCESSING(SSobj, src) - if(cult_icon_changing) - icon_state = SSticker.cultdat?.pylon_icon_state + /obj/structure/cult/functional/pylon/attack_hand(mob/living/user)//override as it should not create anything return @@ -329,10 +333,6 @@ GLOBAL_LIST_INIT(blacklisted_pylon_turfs, typecacheof(list( choosable_items = list("Shuttle Curse" = /obj/item/shuttle_curse, "Zealot's Blindfold" = /obj/item/clothing/glasses/hud/health/night/cultblind, "Veil Shifter" = /obj/item/cult_shift) //Add void torch to veil shifter spawn -/obj/structure/cult/functional/archives/Initialize(mapload) - . = ..() - if(cult_icon_changing) - icon_state = SSticker.cultdat?.archives_icon_state /obj/effect/gateway name = "gateway" diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 4dcc53f700b..40c0dfbc0e8 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -20,11 +20,20 @@ force = 16 scribe_multiplier = 0.1 -/obj/item/melee/cultblade/dagger/New() - ..() - if(SSticker.mode) + +/obj/item/melee/cultblade/dagger/Initialize(mapload) + . = ..() + update_icon(UPDATE_ICON_STATE) + + +/obj/item/melee/cultblade/dagger/update_icon_state() + if(SSticker?.cultdat) icon_state = SSticker.cultdat.dagger_icon item_state = SSticker.cultdat.dagger_icon + else + icon_state = initial(icon_state) + item_state = initial(item_state) + /obj/item/melee/cultblade/dagger/examine(mob/user) . = ..() diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 54d0e6c2bdc..fe0dd160f1c 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -513,7 +513,7 @@ structure_check() searches for nearby cultist structures required for the invoca desc += "The void feels like it's trying to pull you to the [dir2text(get_dir(T, origin))], in the direction of space sector [origin.z]!" else - inner_portal.icon_state = "lava" + inner_portal.update_icon(UPDATE_ICON_STATE) light_color = LIGHT_COLOR_FIRE desc += "
A tear in reality reveals a coursing river of lava... something recently teleported here from the Lavaland Mines!" @@ -967,6 +967,11 @@ structure_check() searches for nearby cultist structures required for the invoca cultist_name = "Summon [SSticker.cultdat ? SSticker.cultdat.entity_name : "your god"]" cultist_desc = "tears apart dimensional barriers, calling forth [SSticker.cultdat ? SSticker.cultdat.entity_title3 : "your god"]." + +/obj/effect/rune/narsie/update_icon_state() + icon_state = used ? "rune_large_distorted" : initial(icon_state) + + /obj/effect/rune/narsie/check_icon() return @@ -993,7 +998,7 @@ structure_check() searches for nearby cultist structures required for the invoca ..() SEND_SOUND(world, 'sound/effects/narsie_summon.ogg') to_chat(world, "The veil... is... TORN!!!--") - icon_state = "rune_large_distorted" + update_icon(UPDATE_ICON_STATE) var/turf/T = get_turf(src) sleep(40) new /obj/singularity/narsie/large(T) //Causes Nar'Sie to spawn even if the rune has been removed diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 4343f905f43..6309e81654e 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -91,6 +91,7 @@ INVOKE_ASYNC(src, PROC_REF(set_mode_in_db)) // Async query, dont bother slowing roundstart + SScargo_quests.roll_start_quests() generate_station_goals() GLOB.start_state = new /datum/station_state() GLOB.start_state.count() diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 4951975a8d6..96e07f42e11 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -35,17 +35,25 @@ if(ismob(loc)) to_chat(loc, "Your vest is now [flags & NODROP ? "locked" : "unlocked"].") + +/obj/item/clothing/suit/armor/abductor/vest/update_icon_state() + switch(mode) + if(VEST_STEALTH) + icon_state = "vest_stealth" + if(VEST_COMBAT) + icon_state = "vest_combat" + + /obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode() switch(mode) if(VEST_STEALTH) mode = VEST_COMBAT DeactivateStealth() armor = combat_armor - icon_state = "vest_combat" if(VEST_COMBAT)// TO STEALTH mode = VEST_STEALTH armor = stealth_armor - icon_state = "vest_stealth" + update_icon(UPDATE_ICON_STATE) if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.update_inv_wear_suit() @@ -158,6 +166,15 @@ var/mob/living/marked = null var/obj/machinery/abductor/console/console + +/obj/item/abductor/gizmo/update_icon_state() + switch(mode) + if(GIZMO_SCAN) + icon_state = "gizmo_scan" + if(GIZMO_MARK) + icon_state = "gizmo_mark" + + /obj/item/abductor/gizmo/attack_self(mob/user) if(!ScientistCheck(user)) return @@ -167,10 +184,9 @@ if(mode == GIZMO_SCAN) mode = GIZMO_MARK - icon_state = "gizmo_mark" else mode = GIZMO_SCAN - icon_state = "gizmo_scan" + update_icon(UPDATE_ICON_STATE) to_chat(user, "You switch the device to [mode==GIZMO_SCAN? "SCAN": "MARK"] MODE") /obj/item/abductor/gizmo/attack(mob/living/M, mob/user) @@ -283,16 +299,24 @@ item_state = "silencer" var/mode = MIND_DEVICE_MESSAGE + +/obj/item/abductor/mind_device/update_icon_state() + switch(mode) + if(MIND_DEVICE_MESSAGE) + icon_state = "mind_device_message" + if(MIND_DEVICE_CONTROL) + icon_state = "mind_device_control" + + /obj/item/abductor/mind_device/attack_self(mob/user) if(!ScientistCheck(user)) return if(mode == MIND_DEVICE_MESSAGE) mode = MIND_DEVICE_CONTROL - icon_state = "mind_device_control" else mode = MIND_DEVICE_MESSAGE - icon_state = "mind_device_message" + update_icon(UPDATE_ICON_STATE) to_chat(user, "You switch the device to [mode == MIND_DEVICE_MESSAGE ? "TRANSMISSION" : "COMMAND"] MODE") /obj/item/abductor/mind_device/afterattack(atom/target, mob/living/user, flag, params) @@ -385,7 +409,7 @@
Congratulations! You are now trained for invasive xenobiology research!"} -/obj/item/paper/abductor/update_icon() +/obj/item/paper/abductor/update_icon_state() return /obj/item/paper/abductor/AltClick() @@ -424,12 +448,12 @@ Congratulations! You are now trained for invasive xenobiology research!"} txt = "probing" to_chat(usr, "You switch the baton to [txt] mode.") - update_icon() + update_icon(UPDATE_ICON_STATE) for(var/X in actions) var/datum/action/A = X A.UpdateButtonIcon() -/obj/item/abductor_baton/update_icon() +/obj/item/abductor_baton/update_icon_state() switch(mode) if(BATON_STUN) icon_state = "wonderprodStun" @@ -727,6 +751,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} buildstackamount = 1 framestackamount = 1 canSmoothWith = null + can_be_flipped = FALSE frame = /obj/structure/table_frame/abductor /obj/machinery/optable/abductor @@ -764,9 +789,8 @@ Congratulations! You are now trained for invasive xenobiology research!"} ignore_flags = TRUE var/base_icon = "alien_mender_brute" -/obj/item/reagent_containers/applicator/abductor/update_icon() +/obj/item/reagent_containers/applicator/abductor/update_icon_state() var/reag_pct = round((reagents.total_volume / volume) * 100) - switch(reag_pct) if(51 to 100) icon_state = "[base_icon]_full[applying ? "_active" : ""]" diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 008b584ef96..5d558132598 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -19,7 +19,7 @@ var/mind_control_duration = 1800 var/active_mind_control = FALSE -/obj/item/organ/internal/heart/gland/update_icon() +/obj/item/organ/internal/heart/gland/update_icon_state() return /obj/item/organ/internal/heart/gland/proc/ownerCheck() diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 5c666279e2a..4de7b12abf4 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -2,11 +2,12 @@ name = "host brain" real_name = "host brain" tts_seed = "Gman" + var/host_resisting = FALSE /mob/living/captive_brain/say(message) if(client) if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot speak in IC (muted).") + to_chat(src, span_warning("Вы не можете говорить в IC (muted).")) return if(client.handle_spam_prevention(message,MUTE_IC)) return @@ -19,8 +20,8 @@ if(stat == DEAD) return say_dead(message) var/mob/living/simple_animal/borer/B = loc - to_chat(src, "You whisper silently, \"[message]\"") - to_chat(B.host, "The captive mind of [src] whispers, \"[message]\"") + to_chat(src, "Вы тихо шепчете, \"[message]\"") + to_chat(B.host, "Пленённый разум [src] шепчет, \"[message]\"") for(var/mob/M in GLOB.mob_list) if(M.mind && isobserver(M)) @@ -37,20 +38,25 @@ /mob/living/captive_brain/resist() var/mob/living/simple_animal/borer/B = loc - to_chat(src, "You begin doggedly resisting the parasite's control (this will take approximately sixty seconds).") - to_chat(B.host, "You feel the captive mind of [src] begin to resist your control.") + if(host_resisting) + to_chat(src, span_notice("Вы уже пытаетесь вернуть своё тело!")) + return + host_resisting = TRUE + to_chat(src, span_userdanger("Вы начинаете упорно сопротивляться контролю паразита (это займёт примерно минуту).")) + to_chat(B.host, span_userdanger("Вы чувствуете, как пленённый разум [src] начинает сопротивляться.")) var/delay = (rand(350,450) + B.host.getBrainLoss()) - addtimer(CALLBACK(src, PROC_REF(return_control), B), delay) - + do_mob(src, B.host, delay, only_use_extra_checks = TRUE) + return_control(B) + host_resisting = FALSE /mob/living/captive_brain/proc/return_control(mob/living/simple_animal/borer/B) if(!B || !B.controlling) return B.host.adjustBrainLoss(rand(5,10)) - to_chat(src, "With an immense exertion of will, you regain control of your body!") - to_chat(B.host, "You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you.") + to_chat(src, span_userdanger("Огромным усилием воли вы вновь обретаете контроль над своим телом!")) + to_chat(B.host, span_userdanger("Вы чувствуете, как мозг носителя уходит из под вашего контроля. Вы успеваете разорвать связь прежде, чем сильные нейронные импульсы смогут навредить вам.")) B.detach() @@ -61,9 +67,9 @@ speak_emote = list("chirrups") emote_hear = list("chirrups") tts_seed = "Gman_e2" - response_help = "pokes" + response_help = "pokes" response_disarm = "prods the" - response_harm = "stomps on the" + response_harm = "stomps on the" icon_state = "brainslug" icon_living = "brainslug" icon_dead = "brainslug_dead" @@ -89,8 +95,6 @@ "Septenary", "Octonary", "Novenary", "Decenary", "Undenary", "Duodenary", ) var/talk_inside_host = FALSE // So that borers don't accidentally give themselves away on a botched message - var/used_dominate - var/attempting_to_dominate = FALSE // To prevent people from spam opening the Dominate Victim input var/chemicals = 10 // Chemicals used for reproduction and chemical injection. var/max_chems = 250 var/mob/living/carbon/human/host // Human host for the brain worm. @@ -102,7 +106,6 @@ var/leaving = FALSE var/hiding = FALSE var/datum/action/innate/borer/talk_to_host/talk_to_host_action = new - var/datum/action/innate/borer/infest_host/infest_host_action = new var/datum/action/innate/borer/toggle_hide/toggle_hide_action = new var/datum/action/innate/borer/talk_to_borer/talk_to_borer_action = new var/datum/action/innate/borer/talk_to_brain/talk_to_brain_action = new @@ -111,7 +114,6 @@ var/datum/action/innate/borer/leave_body/leave_body_action = new var/datum/action/innate/borer/make_chems/make_chems_action = new var/datum/action/innate/borer/make_larvae/make_larvae_action = new - 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) @@ -119,17 +121,17 @@ 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("Мозговой червь появился в [get_area(src)]!", enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK) real_name = "Cortical Borer [rand(1000,9999)]" truename = "[borer_names[min(generation, borer_names.len)]] [rand(1000,9999)]" GrantBorerActions() /mob/living/simple_animal/borer/attack_ghost(mob/user) if(cannotPossess(user)) - to_chat(user, "Upon using the antagHUD you forfeited the ability to join the round.") + to_chat(user, span_boldnotice("Upon using the antagHUD you forfeited the ability to join the round.")) return if(jobban_isbanned(user, "Syndicate")) - to_chat(user, "You are banned from antagonists!") + to_chat(user, span_warning("You are banned from antagonists!")) return if(key) return @@ -156,41 +158,39 @@ 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) - to_chat(src, span_warning("You've disabled audible speech while inside a host! Re-enable it under the borer tab, or stick to borer communications.")) + Communicate(message) return return ..() -/mob/living/simple_animal/borer/verb/Communicate() - set category = "Borer" - set name = "Converse with Host" - set desc = "Send a silent message to your host." - +/mob/living/simple_animal/borer/proc/Communicate(var/sended_message) if(!host) - to_chat(src, "You do not have a host to communicate with!") + to_chat(src, "У вас нет носителя!") return if(stat) - to_chat(src, "You cannot do that in your current state.") + to_chat(src, "Сейчас вы не в состоянии этого сделать.") return if(host.stat == DEAD) - to_chat(src, "Мозг носителя не способен воспринимать вас сейчас!") + to_chat(src, span_warning("Мозг носителя не способен воспринимать вас сейчас!")) return - var/input = stripped_input(src, "Please enter a message to tell your host.", "Borer", "") - if(!input) + if(!sended_message) //If we use "say", it won't ask us to write the message twice. + sended_message = stripped_input(src, "Введите сообщение для носителя.", "Borer", "") + + if(!sended_message) return if(src && !QDELETED(src) && !QDELETED(host)) var/say_string = (docile) ? "slurs" :"states" if(host) - to_chat(host, "[truename] [say_string]: [input]") - add_say_logs(src, input, host, "BORER") + to_chat(host, "[truename] [say_string]: [sended_message]") + add_say_logs(src, sended_message, host, "BORER") for(var/M in GLOB.dead_mob_list) if(isobserver(M)) - to_chat(M, "Borer Communication from [truename] ([ghost_follow_link(src, ghost=M)]): [input]") - to_chat(src, "[truename] [say_string]: [input]") + to_chat(M, "Borer Communication from [truename] ([ghost_follow_link(src, ghost=M)]): [sended_message]") + to_chat(src, "[truename] [say_string]: [sended_message]") host.verbs += /mob/living/proc/borer_comm talk_to_borer_action.Grant(host) @@ -201,10 +201,10 @@ if(talk_inside_host) talk_inside_host = FALSE - to_chat(src, "You will no longer talk audibly while inside a host.") + to_chat(src, span_notice("Теперь вы будете говорить в сознание носителя.")) else talk_inside_host = TRUE - to_chat(src, "You will now be able to audibly speak from inside of a host.") + to_chat(src, span_notice("Теперь вы сможете говорить, находясь внутри носителя.")) /mob/living/proc/borer_comm() set name = "Converse with Borer" @@ -218,7 +218,7 @@ if(!B) return - var/input = stripped_input(src, "Please enter a message to tell the borer.", "Message", "") + var/input = stripped_input(src, "Введите сообщение для мозгового червя.", "Сообщение", "") if(!input) return @@ -236,14 +236,14 @@ set desc = "Communicate mentally with the trapped mind of your host." if(src.stat == DEAD) - to_chat(src, "Мозг жертвы не способен воспринимать вас в этом состоянии!") + to_chat(src, span_warning("Мозг жертвы не способен воспринимать вас в этом состоянии!")) return var/mob/living/simple_animal/borer/B = has_brain_worms() if(!B || !B.host_brain) return var/mob/living/captive_brain/CB = B.host_brain - var/input = stripped_input(src, "Please enter a message to tell the trapped mind.", "Message", "") + var/input = stripped_input(src, "Введите сообщение для пленённого разума.", "Сообщение", "") if(!input) return @@ -264,18 +264,20 @@ if(!stat && host.stat != DEAD) if(host.reagents.has_reagent("sugar")) + if(!docile) + if(controlling) - to_chat(host, "You feel the soporific flow of sugar in your host's blood, lulling you into docility.") + to_chat(host, span_notice("Вы чувствуете усыпляющий поток сахара в крови вашего носителя, убаюкивающий вас до бессилия..")) else - to_chat(src, "You feel the soporific flow of sugar in your host's blood, lulling you into docility.") + to_chat(src, span_notice("Вы чувствуете усыпляющий поток сахара в крови вашего носителя, убаюкивающий вас до бессилия..")) docile = TRUE else if(docile) if(controlling) - to_chat(host, "You shake off your lethargy as the sugar leaves your host's blood.") + to_chat(host, span_notice("Вы приходите в себя, когда сахар покидает кровь вашего носителя.")) else - to_chat(src, "You shake off your lethargy as the sugar leaves your host's blood.") + to_chat(src, span_notice("Вы приходите в себя, когда сахар покидает кровь вашего носителя.")) docile = FALSE if(chemicals < max_chems) @@ -283,7 +285,7 @@ if(controlling) if(docile) - to_chat(host, "You are feeling far too docile to continue controlling your host...") + to_chat(host, span_notice("Вы слишком обессилели для того, чтобы продолжать контролировать тело носителя...")) host.release_control() return @@ -301,96 +303,68 @@ /mob/living/simple_animal/borer/UnarmedAttack(mob/living/carbon/human/M) if(istype(M)) - to_chat(src, span_notice("You analyze [M]'s vitals.")) + to_chat(src, span_notice("Вы анализируете жизненные показатели [M].")) healthscan(src, M, 1, TRUE) +/obj/effect/proc_holder/spell/borer_infest + name = "Infest" + desc = "Infest a suitable humanoid host." + base_cooldown = 0 + clothes_req = FALSE + action_icon_state = "infest" + action_background_icon_state = "bg_alien" + selection_activated_message = span_notice("Вы приготовились заразить жертву. Left-click чтобы применить способность!") + selection_deactivated_message = span_notice("Вы прекратили свои попытки заразить жертву.") + need_active_overlay = TRUE + human_req = FALSE + var/infesting = FALSE + +/obj/effect/proc_holder/spell/borer_infest/create_new_targeting() + var/datum/spell_targeting/click/T = new() + T.range = 1 + T.click_radius = -1 + return T + +/obj/effect/proc_holder/spell/borer_infest/can_cast(mob/living/user, charge_check = TRUE, show_message = FALSE) + + if (is_ventcrawling(user) || !src || user.stat || infesting) + return FALSE + . = ..() -/mob/living/simple_animal/borer/verb/infest() - set category = "Borer" - set name = "Infest" - set desc = "Infest a suitable humanoid host." - - if(host) - to_chat(src, "You are already within a host.") - return - - if(stat) - to_chat(src, "You cannot infest a target in your current state.") - return - - var/list/choices = list() - for(var/mob/living/carbon/human/H in view(1,src)) - var/obj/item/organ/external/head/head = H.get_organ(BODY_ZONE_HEAD) - if(head.is_robotic()) - continue - if(H.stat != DEAD && Adjacent(H) && !H.has_brain_worms()) - choices += H - - var/mob/living/carbon/human/M = tgui_input_list(src,"Who do you wish to infest?", "Infest", choices) - - if(!M || !src) - return - - if(!Adjacent(M)) - return - - if(M.has_brain_worms()) - to_chat(src, "You cannot infest someone who is already infested!") - return - - if(incapacitated()) - return - - to_chat(src, "You slither up [M] and begin probing at [M.p_their()] ear canal...") - - if(!do_after(src, 50, target = M)) - to_chat(src, "As [M] moves away, you are dislodged and fall to the ground.") - return - - if(!M || !src) - return +/obj/effect/proc_holder/spell/borer_infest/valid_target(mob/living/carbon/human/target, user) + return istype(target) && target.stat != DEAD - if(stat) - to_chat(src, "You cannot infest a target in your current state.") - return +/obj/effect/proc_holder/spell/borer_infest/cast(list/targets, mob/living/simple_animal/borer/user) + var/mob/living/carbon/human/target = targets[1] - if(M.stat == DEAD) - to_chat(src, "That is not an appropriate target.") + if(!target) return - if(M in view(1, src)) - to_chat(src, "You wiggle into [M]'s ear.") - /* - if(!M.stat) - to_chat(M, "Something disgusting and slimy wiggles into your ear!") - */ // Let's see how stealthborers work out - - perform_infestation(M) + infesting = TRUE + to_chat(user, "Вы подползаете к [target] и начинаете искать [genderize_ru(target.gender,"его","её","его","их" )] слуховой проход...") - return - else - to_chat(src, "They are no longer in range!") - return - -/mob/living/simple_animal/borer/proc/perform_infestation(mob/living/carbon/M) - if(!M) + if(!do_mob(user, target, 5 SECONDS)) + to_chat(user, "Как только [target] отходит, вы срываетесь и падаете на пол.") + infesting = FALSE return - if(M.has_brain_worms()) - to_chat(src, "[M] is already infested!") + if(target.has_brain_worms()) + to_chat(user, span_warning("[target] уже заражён!")) + infesting = FALSE return - host = M - add_attack_logs(src, host, "Infested as borer") - M.borer = src - forceMove(M) - - host.status_flags |= PASSEMOTES + infesting = FALSE + user.host = target + add_attack_logs(user, user.host, "Infested as borer") + target.borer = user + user.forceMove(target) + user.host.status_flags |= PASSEMOTES - RemoveBorerActions() - GrantInfestActions() + user.RemoveBorerActions() + user.RemoveBorerSpells() + user.GrantInfestActions() - to_chat(src, span_boldnotice("You can analyze your host health by using Left-click.")) + to_chat(user, span_boldnotice("Вы можете анализировать здоровье носителя при помощи Left-click.")) /mob/living/simple_animal/borer/verb/secrete_chemicals() set category = "Borer" @@ -398,14 +372,15 @@ set desc = "Push some chemicals into your host's bloodstream." if(!host) - to_chat(src, "You are not inside a host body.") + to_chat(src, "Вы не находитесь в теле носителя.") return if(stat) - to_chat(src, "You cannot secrete chemicals in your current state.") + to_chat(src, "Вы не можете производить химикаты в вашем нынешнем состоянии.") + return if(docile) - to_chat(src, " You are feeling far too docile to do that.") + to_chat(src, "Вы слишком обессилели для этого.") return var/content = "" @@ -451,10 +426,10 @@ return var/datum/reagent/R = GLOB.chemical_reagents_list[C.chemname] if(chemicals < C.chemuse) - to_chat(src, "You need [C.chemuse] chemicals stored to secrete [R.name]!") + to_chat(src, span_boldnotice("Вам нужно [C.chemuse] химикатов для выделения [R.name]!")) return - to_chat(src, "You squirt a measure of [R.name] from your reservoirs into [host]'s bloodstream.") + to_chat(src, span_userdanger("Вы впрыскиваете [R.name] из своих резервуаров в кровь [host].")) host.reagents.add_reagent(C.chemname, C.quantity) chemicals -= C.chemuse add_attack_logs(src, host, "injected [R.name]") @@ -470,7 +445,7 @@ set desc = "Become invisible to the common eye." if(host) - to_chat(usr, "You cannot do this while you're inside a host.") + to_chat(usr, span_warning("Вы не можете сделать этого, находясь внутри носителя.")) return if(stat != CONSCIOUS) @@ -478,123 +453,100 @@ if(!hiding) layer = TURF_LAYER+0.2 - to_chat(src, "You are now hiding.") + to_chat(src, span_notice("Вы прячетесь.")) hiding = TRUE else layer = MOB_LAYER - to_chat(src, "You stop hiding.") + to_chat(src, span_notice("Вы перестали прятаться.")) hiding = FALSE -/mob/living/simple_animal/borer/verb/dominate_victim() - set category = "Borer" - set name = "Dominate Victim" - set desc = "Freeze the limbs of a potential host with supernatural fear." - - if(world.time - used_dominate < 150) - to_chat(src, "You cannot use that ability again so soon.") - return - - if(host) - to_chat(src, "You cannot do that from within a host body.") - return - - if(stat) - to_chat(src, "You cannot do that in your current state.") - return - - if(attempting_to_dominate) - to_chat(src, "You're already targeting someone!") - return - - var/list/choices = list() - for(var/mob/living/carbon/C in view(3,src)) - if(C.stat != DEAD) - choices += C - - if(world.time - used_dominate < 300) - to_chat(src, "You cannot use that ability again so soon.") - return - - attempting_to_dominate = TRUE - - var/mob/living/carbon/M = tgui_input_list(src,"Who do you wish to dominate?", "Dominate", choices) - - if(!M) - attempting_to_dominate = FALSE - return +/obj/effect/proc_holder/spell/borer_dominate + name = "Dominate Victim" + desc = "Freeze the limbs of a potential host with supernatural fear." + base_cooldown = 30 SECONDS + clothes_req = FALSE + action_icon_state = "genetic_cryo" + action_background_icon_state = "bg_alien" + selection_activated_message = span_notice("Вы приготовились поразить жертву. Left-click чтобы применить способность!") + selection_deactivated_message = span_notice("Вы решили дать своей жертве шанс. Пока что.") + need_active_overlay = TRUE + human_req = FALSE + +/obj/effect/proc_holder/spell/borer_dominate/create_new_targeting() + var/datum/spell_targeting/click/T = new() + T.range = 3 + T.click_radius = -1 + return T + +/obj/effect/proc_holder/spell/borer_dominate/can_cast(mob/living/user, charge_check = TRUE, show_message = FALSE) + + if (is_ventcrawling(user) || !src || user.stat) + return FALSE + . = ..() - if(!src) //different statement to avoid a runtime since if the source is deleted then attempting_to_dominate would also be deleted - return +/obj/effect/proc_holder/spell/borer_dominate/valid_target(mob/living/carbon/human/target, user) + return istype(target) && target.stat != DEAD - if(M.has_brain_worms()) - to_chat(src, "You cannot dominate someone who is already infested!") - attempting_to_dominate = FALSE - return +/obj/effect/proc_holder/spell/borer_dominate/cast(list/targets, mob/living/simple_animal/borer/user) + var/mob/living/carbon/human/target = targets[1] - if(incapacitated()) - attempting_to_dominate = FALSE + if(target.has_brain_worms()) + to_chat(user, span_warning("Вы не можете позволить себе сделать это с тем, кто уже заражён..")) return - if(get_dist(src, M) > 7) //to avoid people remotely doing from across the map etc, 7 is the default view range - to_chat(src, "You're too far away!") - attempting_to_dominate = FALSE - return - - to_chat(src, "You focus your psychic lance on [M] and freeze [M.p_their()] limbs with a wave of terrible dread.") - to_chat(M, "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing.") - M.Weaken(6 SECONDS) - - used_dominate = world.time - attempting_to_dominate = FALSE + to_chat(user, span_warning("Вы пронзили разум [target] пси-потоком, парализуя [genderize_ru(target.gender,"его","её","его","их" )] конечности волной первородного ужаса!")) + to_chat(target, span_warning("Вы чувствуете, как на вас наваливается жуткое чувство страха, леденящее конечности и заставляющее сердце бешено колотиться.")) + target.Weaken(6 SECONDS) /mob/living/simple_animal/borer/verb/release_host() set category = "Borer" set name = "Release Host" set desc = "Slither out of your host." + if(!host) - to_chat(src, "You are not inside a host body.") + to_chat(src, "Вы не находитесь в теле носителя.") return if(stat) - to_chat(src, "You cannot leave your host in your current state.") + to_chat(src, "Вы не можете покинуть носителя в вашем текущем состоянии.") return if(docile) - to_chat(src, "You are feeling far too docile to do that.") + to_chat(src, span_notice("Вы слишком обессилели для этого.")) return if(!host || !src) return - if(leaving) - leaving = FALSE - to_chat(src, "You decide against leaving your host.") - return - - to_chat(src, "You begin disconnecting from [host]'s synapses and prodding at [host.p_their()] internal ear canal.") - - leaving = TRUE - - addtimer(CALLBACK(src, PROC_REF(let_go)), 200) + leaving = !leaving + let_go() + leaving = FALSE /mob/living/simple_animal/borer/proc/let_go() - if(!host || !src || QDELETED(host) || QDELETED(src)) - return - if(!leaving) - return - if(controlling) + if(!host || !src || QDELETED(host) || QDELETED(src) || controlling) return if(stat) - to_chat(src, "You cannot release a target in your current state.") + to_chat(src, "Вы не можете освободить цель в вашем текущем состоянии.") return + if(leaving) + to_chat(src, "Вы начинаете отсоединяться от синапсов носителя и пробираться наружу через его слуховой проход.") + else + to_chat(src, span_danger("Вы решили остаться в носителе.")) - to_chat(src, "You wiggle out of [host]'s ear and plop to the ground.") + // If we cast the spell a second time, it will be canceled + if(!do_mob(src, host, 20 SECONDS, only_use_extra_checks = TRUE, extra_checks = list(CALLBACK(src, PROC_REF(borer_leaving), src)))) + return - leaving = FALSE + to_chat(src, "Вы выкручиваетесь из уха носителя и падаете на пол.") leave_host() +/mob/living/simple_animal/borer/proc/borer_leaving() //Returning "TRUE" breaks the loop, "FALSE" - continue + if(!leaving || docile || bonding) + return TRUE + return FALSE + /mob/living/simple_animal/borer/proc/leave_host() if(!host) @@ -602,6 +554,7 @@ if(controlling) detach() GrantBorerActions() + GrantBorerSpells() RemoveInfestActions() forceMove(get_turf(host)) machine = null @@ -623,47 +576,54 @@ set desc = "Fully connect to the brain of your host." if(!host) - to_chat(src, "You are not inside a host body.") + to_chat(src, "Вы не находитесь в теле носителя.") return if(host.stat == DEAD) - to_chat(src, "This host is in no condition to be controlled.") + to_chat(src, "Носитель не может быть взят под контроль в его текущем состоянии.") return if(stat) - to_chat(src, "You cannot do that in your current state.") + to_chat(src, "Вы не можете сделать этого в вашем нынешнем состоянии.") return if(docile) - to_chat(src, "You are feeling far too docile to do that.") + to_chat(src, span_notice("Вы слишком обессилели для этого.")) return - if(bonding) - bonding = FALSE - to_chat(src, "You stop attempting to take control of your host.") + if(QDELETED(src) || QDELETED(host)) return - to_chat(src, "You begin delicately adjusting your connection to the host brain...") + bonding = !bonding - if(QDELETED(src) || QDELETED(host)) + if(bonding) + to_chat(src, "Вы начинаете деликатно настраивать связь с мозгом носителя...") + else + to_chat(src, span_danger("Вы прекращаете свои попытки взять носителя под полный контроль.")) + + var/delay = 300+(host.getBrainLoss()*5) + + // If we cast the spell a second time, it will be canceled + if(!do_mob(src, host, delay, only_use_extra_checks = TRUE, extra_checks = list(CALLBACK(src, PROC_REF(borer_assuming), src)))) + bonding = FALSE return - bonding = TRUE + assume_control() + bonding = FALSE - var/delay = 300+(host.getBrainLoss()*5) - addtimer(CALLBACK(src, PROC_REF(assume_control)), delay) +/mob/living/simple_animal/borer/proc/borer_assuming() //Returning "TRUE" breaks the loop, "FALSE" - continue + if(!bonding || docile || leaving) + return TRUE + return FALSE /mob/living/simple_animal/borer/proc/assume_control() + if(!host || !src || controlling) return - if(!bonding) - return - if(docile) - to_chat(src,"You are feeling far too docile to do that.") - return + else - to_chat(src, "You plunge your probosci deep into the cortex of the host brain, interfacing directly with [host.p_their()] nervous system.") - to_chat(host, "You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours.") + to_chat(src, span_userdanger("Вы погружаете свои хоботки глубоко в кору головного мозга носителя, напрямую взаимодействуя с его нервной системой.")) + to_chat(host, span_userdanger("Вы чувствуете странное смещение за глазами, прежде чем постороннее сознание вытесняет ваше.")) var/borer_key = src.key add_attack_logs(src, host, "Assumed control of (borer)") // host -> brain @@ -699,7 +659,6 @@ if(!host.lastKnownIP) host.lastKnownIP = s2h_ip - bonding = FALSE controlling = TRUE host.verbs += /mob/living/carbon/proc/release_control @@ -727,8 +686,8 @@ return if(B.host_brain) - to_chat(src, "You send a punishing spike of psychic agony lancing into your host's brain.") - to_chat(B.host_brain, "Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!") + to_chat(src, span_danger("Вы посылаете карающий всплеск психической агонии в мозг своего носителя.")) + to_chat(B.host_brain, span_danger("Ужасная, жгучая агония пронзает вас насквозь, вырывая беззвучный крик из глубин вашего запертого разума!")) //Brain slug proc for voluntary removal of control. /mob/living/carbon/proc/release_control() @@ -740,7 +699,7 @@ var/mob/living/simple_animal/borer/B = has_brain_worms() if(B && B.host_brain) - to_chat(src, "You withdraw your probosci, releasing control of [B.host_brain]") + to_chat(src, span_danger("Вы убираете свои хоботки, освобождая [B.host_brain].")) B.detach() @@ -769,15 +728,15 @@ return if(B.chemicals >= 100) - to_chat(src, "Your host twitches and quivers as you rapidly excrete several larvae from your sluglike body.") - visible_message("[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!") + to_chat(src, span_danger("Ваш хозяин дёргается и вздрагивает, когда вы быстро выводите личинку из своего слизнеподобного тела.")) + visible_message(span_danger("[src] яростно блюёт, изрыгая рвотные массы вместе с извивающимся, похожим на слизня существом!")) B.chemicals -= 100 var/turf/T = get_turf(src) T.add_vomit_floor() new /mob/living/simple_animal/borer(T, B.generation + 1) else - to_chat(src, "You need 100 chemicals to reproduce!") + to_chat(src, "Вам требуется 100 химикатов для размножения!") return /mob/living/simple_animal/borer/proc/detach() @@ -786,7 +745,6 @@ return controlling = FALSE - reset_perspective(null) machine = null @@ -848,11 +806,13 @@ candidate.mob = src ckey = candidate.ckey var/list/messages = list() - messages.Add("You are a cortical borer!") - messages.Add("You are a brain slug that worms its way into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, your host and your eventual spawn safe and warm.") - messages.Add("Sugar nullifies your abilities, avoid it at all costs!") - messages.Add("You can speak to your fellow borers by prefixing your messages with ':bo'. Check out your Borer tab to see your abilities.") + messages.Add(span_notice("Вы - Мозговой Червь!")) + messages.Add("Забирайтесь в голову своей жертвы, используйте скрытность, убеждение и свои способности к управлению разумом, чтобы сохранить себя, своё потомство и своего носителя в безопасности и тепле.") + messages.Add("Сахар сводит на нет ваши способности, избегайте его любой ценой!") + messages.Add("Вы можете разговаривать со своими коллегами-борерами, используя ':bo'.") to_chat(src, chat_box_purple(messages.Join("
"))) + GrantBorerSpells() + hide_borer() /proc/create_borer_mind(key) var/datum/mind/M = new /datum/mind(key) @@ -861,14 +821,19 @@ return M /mob/living/simple_animal/borer/proc/GrantBorerActions() - infest_host_action.Grant(src) toggle_hide_action.Grant(src) - freeze_victim_action.Grant(src) + /mob/living/simple_animal/borer/proc/RemoveBorerActions() - infest_host_action.Remove(src) toggle_hide_action.Remove(src) - freeze_victim_action.Remove(src) + +/mob/living/simple_animal/borer/proc/GrantBorerSpells() + mind?.AddSpell(new /obj/effect/proc_holder/spell/borer_infest) + mind?.AddSpell(new /obj/effect/proc_holder/spell/borer_dominate) + +/mob/living/simple_animal/borer/proc/RemoveBorerSpells() + mind?.RemoveSpell(/obj/effect/proc_holder/spell/borer_infest) + mind?.RemoveSpell(/obj/effect/proc_holder/spell/borer_dominate) /mob/living/simple_animal/borer/proc/GrantInfestActions() talk_to_host_action.Grant(src) @@ -906,15 +871,6 @@ var/mob/living/simple_animal/borer/B = owner B.Communicate() -/datum/action/innate/borer/infest_host - name = "Infest" - desc = "Infest a suitable humanoid host." - button_icon_state = "infest" - -/datum/action/innate/borer/infest_host/Activate() - var/mob/living/simple_animal/borer/B = owner - B.infest() - /datum/action/innate/borer/toggle_hide name = "Toggle Hide" desc = "Become invisible to the common eye. Toggled on or off." @@ -977,8 +933,7 @@ /datum/action/innate/borer/make_chems name = "Secrete Chemicals" desc = "Push some chemicals into your host's bloodstream." - icon_icon = 'icons/obj/chemical.dmi' - button_icon_state = "minidispenser" + button_icon_state = "fleshmend" /datum/action/innate/borer/make_chems/Activate() var/mob/living/simple_animal/borer/B = owner @@ -994,15 +949,6 @@ B.host = owner B.host.spawn_larvae() -/datum/action/innate/borer/freeze_victim - name = "Dominate Victim" - desc = "Freeze the limbs of a potential host with supernatural fear." - button_icon_state = "genetic_cryo" - -/datum/action/innate/borer/freeze_victim/Activate() - var/mob/living/simple_animal/borer/B = owner - B.dominate_victim() - /datum/action/innate/borer/torment name = "Torment Host" desc = "Punish your host with agony." diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 45196f0632e..8b0e46464f2 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -646,7 +646,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/demons/demon.dm b/code/game/gamemodes/miniantags/demons/demon.dm index 180f31325a5..17d191847db 100644 --- a/code/game/gamemodes/miniantags/demons/demon.dm +++ b/code/game/gamemodes/miniantags/demons/demon.dm @@ -96,7 +96,7 @@ origin_tech = "combat=5;biotech=7" -/obj/item/organ/internal/heart/demon/update_icon() +/obj/item/organ/internal/heart/demon/update_icon_state() return //always beating visually diff --git a/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm b/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm index 62590d81389..5742dd6768f 100644 --- a/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm +++ b/code/game/gamemodes/miniantags/demons/shadow_demon/shadow_demon.dm @@ -27,6 +27,7 @@ crawl.phased = TRUE RegisterSignal(loc, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/living/simple_animal/demon/shadow, check_darkness)) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(check_darkness)) + add_overlay(emissive_appearance(icon, "shadow_demon_eye_glow_overlay")) /mob/living/simple_animal/demon/shadow/Life(seconds, times_fired) @@ -183,7 +184,7 @@ fireball_type = /obj/item/projectile/magic/shadow_hand -/obj/effect/proc_holder/spell/fireball/shadow_grapple/update_icon() +/obj/effect/proc_holder/spell/fireball/shadow_grapple/update_icon_state() return diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 019162d024e..d24b032b99a 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -430,7 +430,7 @@ /obj/item/paper/guardian name = "Справочник по голопаразитам" - icon_state = "paper" + icon_state = "paper_words" info = {"Cписок видов голопаразитов

@@ -453,7 +453,7 @@ Защитник: При нарушении дальности связи хозяин призывается к нему, а не наоборот. Имеет два режима: низкая атака с высокой защитой, и режим ультра-защиты, практически полностью нивелирующий входящий и исходящий урон. В режиме ультра-защиты способен пережить даже взрыв бомбы, лишь слегка ранив хозяина. Может ставить силовые барьеры, через которые могут пройти только вы и ваш подопечный.
"} -/obj/item/paper/guardian/update_icon() +/obj/item/paper/guardian/update_icon_state() return diff --git a/code/game/gamemodes/miniantags/guardian/types/bomb_components/guardian_mine.dm b/code/game/gamemodes/miniantags/guardian/types/bomb_components/guardian_mine.dm index 0abfe850e58..26dea446d90 100644 --- a/code/game/gamemodes/miniantags/guardian/types/bomb_components/guardian_mine.dm +++ b/code/game/gamemodes/miniantags/guardian/types/bomb_components/guardian_mine.dm @@ -1,7 +1,7 @@ /** * Guardian's mines. Can be attached to anything to do explosive stuff on a victim. */ -#define MINE_LIFE_TIME 60 SECONDS +#define MINE_LIFE_TIME (60 SECONDS) ///Datum specialized for guardian(holoparasite)-bomber. /datum/component/guardian_mine diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 51e98f457a1..ef9d680af3a 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -393,6 +393,19 @@ to_chat(src, chat_box_red(messages.Join("
"))) + +/mob/living/simple_animal/hostile/morph/get_examine_time() + return morphed ? mimic_spell.selected_form.examine_time : ..() + + +/mob/living/simple_animal/hostile/morph/get_visible_gender() + return morphed ? mimic_spell.selected_form.examine_gender : ..() + + +/mob/living/simple_animal/hostile/morph/get_visible_species() + return morphed ? mimic_spell.selected_form.examine_species : ..() + + #undef MORPHED_SPEED #undef ITEM_EAT_COST #undef MORPHS_ANNOUNCE_THRESHOLD diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 45604bd52e9..2eda2e1f448 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -74,7 +74,7 @@ unstun_time = 0 notransform = 0 to_chat(src, "You can move again!") - update_spooky_icon() + update_icon(UPDATE_ICON_STATE) /mob/living/simple_animal/revenant/ex_act(severity) return 1 //Immune to the effects of explosions. @@ -217,7 +217,7 @@ invisibility = 0 playsound(src, 'sound/effects/screech.ogg', 100, 1) visible_message("[src] lets out a waning screech as violet mist swirls around its dissolving body!") - icon_state = "revenant_draining" + update_icon(UPDATE_ICON_STATE) for(var/i = alpha, i > 0, i -= 10) sleep(0.1) alpha = i @@ -285,7 +285,7 @@ else to_chat(src, "You have been revealed!") unreveal_time = unreveal_time + time - update_spooky_icon() + update_icon(UPDATE_ICON_STATE) /mob/living/simple_animal/revenant/proc/stun(time) if(!src) @@ -299,9 +299,9 @@ else to_chat(src, "You cannot move!") unstun_time = unstun_time + time - update_spooky_icon() + update_icon(UPDATE_ICON_STATE) -/mob/living/simple_animal/revenant/proc/update_spooky_icon() +/mob/living/simple_animal/revenant/update_icon_state() if(revealed) if(notransform) if(draining) diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index e4cbb83c190..1b601449067 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -74,7 +74,6 @@ to_chat(src, "You begin siphoning essence from [target]'s soul.") if(target.stat != DEAD) to_chat(target, "You feel a horribly unpleasant draining sensation as your grip on life weakens...") - icon_state = "revenant_draining" reveal(27) stun(27) target.visible_message("[target] suddenly rises slightly into the air, [target.p_their()] skin turning an ashy gray.") diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index bb69b9dfbe3..52f177e536c 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -27,6 +27,10 @@ var/obj/item/disk/nuclear/the_disk = null var/obj/machinery/nuclearbomb/the_bomb = null var/obj/machinery/nuclearbomb/syndicate/the_s_bomb = null // used by syndicate pinpointers. + var/atom/target = null + var/turf/target_turf = null + var/turf/source_turf = null + var/prev_dist var/cur_index = 1 // Which index the current mode is var/mode = MODE_OFF // On which mode the pointer is at var/modes = list(MODE_DISK, MODE_NUKE) // Which modes are there @@ -39,39 +43,55 @@ var/icon_medium = "pinonmedium" var/icon_far = "pinonfar" -/obj/item/pinpointer/New() - ..() + +/obj/item/pinpointer/Initialize(mapload) + . = ..() GLOB.pinpointer_list += src + /obj/item/pinpointer/Destroy() STOP_PROCESSING(SSfastprocess, src) GLOB.pinpointer_list -= src mode = MODE_OFF the_disk = null + the_bomb = null + the_s_bomb = null + target = null + target_turf = null + source_turf = null return ..() + /obj/item/pinpointer/process() - if(mode == MODE_DISK) - workdisk() - else if(mode == MODE_NUKE) - workbomb() + switch(mode) + if(MODE_DISK) + workdisk() + if(MODE_NUKE) + workbomb() + /obj/item/pinpointer/attack_self(mob/user) cycle(user) -/obj/item/pinpointer/proc/cycle(mob/user) + +/obj/item/pinpointer/proc/cycle(mob/user, silent = FALSE) if(cur_index > length(modes)) mode = MODE_OFF - to_chat(user, "Вы отключили [src.name].") + prev_dist = null + update_icon(UPDATE_ICON_STATE) STOP_PROCESSING(SSfastprocess, src) - icon_state = icon_off cur_index = 1 + if(!silent) + to_chat(user, span_notice("You turn off [name].")) return if(cur_index == 1) START_PROCESSING(SSfastprocess, src) mode = modes[cur_index++] - activate_mode(mode, user) - to_chat(user, "[get_mode_text(mode)]") + if(!target) + update_icon(UPDATE_ICON_STATE) // we need to update icon only without target, since processing will do it for us + if(!silent) + to_chat(user, span_notice("[get_mode_text(mode)]")) + /obj/item/pinpointer/proc/get_mode_text(mode) switch(mode) @@ -93,166 +113,204 @@ return "High energy scanner active." -/obj/item/pinpointer/proc/activate_mode(mode, mob/user) //for crew pinpointer - return - /obj/item/pinpointer/proc/scandisk() if(!the_disk) - the_disk = locate() + the_disk = locate() in GLOB.poi_list + /obj/item/pinpointer/proc/scanbomb() - if(!syndicate) - if(!the_bomb) - the_bomb = locate() - else - if(!the_s_bomb) - the_s_bomb = locate() + if(syndicate && !the_s_bomb) + the_s_bomb = locate() in GLOB.poi_list + return + if(!syndicate && !the_bomb) + the_bomb = locate() in GLOB.poi_list + + +/obj/item/pinpointer/update_icon_state() + if(mode == MODE_OFF) + icon_state = icon_off + return -/obj/item/pinpointer/proc/pinpoint_at(atom/target) if(!target) icon_state = icon_null return - var/turf/T = get_turf(target) - var/turf/L = get_turf(src) + switch(prev_dist) + if(-1) + icon_state = icon_direct + if(1 to 8) + icon_state = icon_close + if(9 to 16) + icon_state = icon_medium + if(16 to INFINITY) + icon_state = icon_far + + +/obj/item/pinpointer/proc/pinpoint_at(atom/pin_target) + if(!pin_target) + nullify_targets() + return + + target = pin_target + if(!target_turf) + target_turf = get_turf(pin_target) + if(!source_turf) + source_turf = get_turf(src) + + if(!(target_turf && source_turf) || (target_turf.z != source_turf.z)) + nullify_targets() + return + + dir = get_dir(source_turf, target_turf) + var/new_dist = get_dist(source_turf, target_turf) + if(new_dist != prev_dist) + prev_dist = new_dist + update_icon(UPDATE_ICON_STATE) + + target_turf = null + source_turf = null + + +/obj/item/pinpointer/proc/nullify_targets(stop_icon_update = FALSE) + var/should_update = target + target = null + target_turf = null + source_turf = null + prev_dist = null + if(!stop_icon_update && should_update) + update_icon(UPDATE_ICON_STATE) - if(!(T && L) || (T.z != L.z)) - icon_state = icon_null - else - dir = get_dir(L, T) - switch(get_dist(L, T)) - if(-1) - icon_state = icon_direct - if(1 to 8) - icon_state = icon_close - if(9 to 16) - icon_state = icon_medium - if(16 to INFINITY) - icon_state = icon_far /obj/item/pinpointer/proc/workdisk() scandisk() pinpoint_at(the_disk) + /obj/item/pinpointer/proc/workbomb() - if(!syndicate) - scanbomb() - pinpoint_at(the_bomb) - else - scanbomb() - pinpoint_at(the_s_bomb) + scanbomb() + pinpoint_at(syndicate ? the_s_bomb : the_bomb) + /obj/item/pinpointer/examine(mob/user) . = ..() if(shows_nuke_timer) - for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) + for(var/obj/machinery/nuclearbomb/bomb in GLOB.poi_list) if(bomb.timing) - . += "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" + . += span_warning("Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]") /obj/item/pinpointer/advpinpointer name = "advanced pinpointer" desc = "A larger version of the normal pinpointer, this unit features a helpful quantum entanglement detection system to locate various objects that do not broadcast a locator signal." modes = list(MODE_ADV) var/modelocked = FALSE // If true, user cannot change mode. - var/turf/location = null - var/obj/target = null - var/setting = 0 + var/setting = NONE + + +/obj/item/pinpointer/advpinpointer/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += span_info("You can Alt-Click to choose tracking target.") + /obj/item/pinpointer/advpinpointer/process() switch(setting) if(SETTING_DISK) workdisk() - if(SETTING_LOCATION) - pinpoint_at(location) - if(SETTING_OBJECT) + if(SETTING_LOCATION, SETTING_OBJECT) pinpoint_at(target) -/obj/item/pinpointer/advpinpointer/workdisk() //since mode works diffrently for advpinpointer - scandisk() - pinpoint_at(the_disk) /obj/item/pinpointer/advpinpointer/AltClick(mob/user) - . = ..() - toggle_mode(user) + if(Adjacent(user)) + toggle_mode(user) + return + ..() + -/obj/item/pinpointer/advpinpointer/verb/toggle_mode(mob/user) +/obj/item/pinpointer/advpinpointer/verb/toggle_mode_verb() set category = "Object" set name = "Toggle Pinpointer Mode" set src in usr - if(user.stat || user.restrained()) + toggle_mode(usr) + + +/obj/item/pinpointer/advpinpointer/proc/toggle_mode(mob/user) + if(!iscarbon(user) || user.incapacitated()) return if(modelocked) - to_chat(user, "[src] is locked. It can only track one specific target.") + to_chat(user, span_warning("[src] is locked. It can only track one specific target.")) return - mode = MODE_OFF - icon_state = icon_off - target = null - location = null - switch(alert("Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", "Location", "Disk Recovery", "Other Signature")) if("Location") setting = SETTING_LOCATION - var/locationx = input(user, "Введите X координату для поиска.", "Локация?" , "") as num - if(!locationx || !(user in view(1,src))) + var/locationx = input(user, "Enter X coordinate to search.", "Location X Define" , "") as null|num + if(isnull(locationx) || !(user in view(1,src))) return - var/locationy = input(user, "Введите Y координату для поиска.", "Локация?" , "") as num - if(!locationy || !(user in view(1,src))) + var/locationy = input(user, "Enter Y coordinate to search.", "Location Y Define" , "") as null|num + if(isnull(locationy) || !(user in view(1,src))) return - var/turf/Z = get_turf(src) - - location = locate(locationx,locationy,Z.z) - - to_chat(user, "Вы переключили пинпоинтер для обнаружения [locationx],[locationy]") - - - return attack_self(user) + source_turf = get_turf(src) + locationx = clamp(locationx, 1, 255) + locationy = clamp(locationy, 1, 255) + target = locate(locationx, locationy, source_turf.z) + to_chat(user, span_notice("You point the pinpointer to coordinates: [locationx], [locationy].")) if("Disk Recovery") setting = SETTING_DISK - return attack_self(user) + to_chat(user, span_notice("You point the pinpointer to Nuclear Authentication Disk.")) if("Other Signature") setting = SETTING_OBJECT switch(alert("Search for item signature or DNA fragment?" , "Signature Mode Select" , "Item" , "DNA")) if("Item") - var/list/item_names[0] - var/list/item_paths[0] - for(var/objective in GLOB.potential_theft_objectives) - var/datum/theft_objective/T = objective - var/name = initial(T.name) + var/list/item_names = list() + var/list/item_paths = list() + for(var/datum/theft_objective/objective as anything in GLOB.potential_theft_objectives) + var/name = initial(objective.name) item_names += name - item_paths[name] = initial(T.typepath) - var/targetitem = tgui_input_list(user, "Select item to search for.", "Select Item", item_names) + item_paths[name] = initial(objective.typepath) + var/targetitem = tgui_input_list(user, "Select item to serach for.", "Item Mode Select", item_names) if(!targetitem) return + target = null var/list/target_candidates = get_all_of_type(item_paths[targetitem], subtypes = TRUE) for(var/obj/item/candidate in target_candidates) if(!is_admin_level((get_turf(candidate)).z)) target = candidate + to_chat(user, span_notice("You point the pinpointer to [target].")) break if(!target) - to_chat(user, "Failed to locate [targetitem]!") - return - to_chat(user, "Вы переключили пинпоинтер для обнаружения [targetitem].") + nullify_targets(stop_icon_update = TRUE) + to_chat(user, span_warning("Could not find [targetitem] signature!")) + if("DNA") - var/DNAstring = input("Input DNA string to search for." , "Please Enter String." , "") + var/DNAstring = input("Input DNA string to search for." , "Please Enter String" , "") if(!DNAstring) return - for(var/mob/living/carbon/C in GLOB.mob_list) - if(!C.dna) + + target = null + for(var/mob/living/carbon/human/check as anything in GLOB.human_list) + if(!check.dna) continue - if(C.dna.unique_enzymes == DNAstring) - target = C + if(check.dna.unique_enzymes == DNAstring) + target = check + to_chat(user, span_notice("You point the pinpointer to [check.real_name].")) break - return attack_self(user) + if(!target) + nullify_targets(stop_icon_update = TRUE) + to_chat(user, span_warning("Failed to detect humanoid with DNA: [DNAstring]!")) + + if(mode == MODE_OFF) + cycle(user, silent = TRUE) + /////////////////////// //nuke op pinpointers// @@ -263,6 +321,7 @@ syndicate = TRUE modes = list(MODE_DISK, MODE_NUKE) + /obj/item/pinpointer/nukeop/process() switch(mode) if(MODE_DISK) @@ -272,42 +331,40 @@ if(MODE_SHIP) worklocation() + /obj/item/pinpointer/nukeop/workdisk() if(GLOB.bomb_set) //If the bomb is set, lead to the shuttle mode = MODE_SHIP //Ensures worklocation() continues to work modes = list(MODE_SHIP) - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) //Plays a beep - visible_message("Shuttle Locator mode actived.") //Lets the mob holding it know that the mode has changed + playsound(loc, 'sound/machines/twobeep.ogg', 50, TRUE) //Plays a beep + visible_message(span_notice("Shuttle Locator mode actived.")) //Lets the mob holding it know that the mode has changed return //Get outta here scandisk() pinpoint_at(the_disk) + /obj/item/pinpointer/nukeop/workbomb() if(GLOB.bomb_set) //If the bomb is set, lead to the shuttle mode = MODE_SHIP //Ensures worklocation() continues to work modes = list(MODE_SHIP) - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) //Plays a beep - visible_message("Shuttle Locator mode actived.") //Lets the mob holding it know that the mode has changed + playsound(loc, 'sound/machines/twobeep.ogg', 50, TRUE) //Plays a beep + visible_message(span_notice("Shuttle Locator mode actived.")) //Lets the mob holding it know that the mode has changed return //Get outta here scanbomb() pinpoint_at(the_s_bomb) + /obj/item/pinpointer/nukeop/proc/worklocation() if(!GLOB.bomb_set) mode = MODE_DISK modes = list(MODE_DISK, MODE_NUKE) - playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) - visible_message("Authentication Disk Locator mode actived.") + playsound(loc, 'sound/machines/twobeep.ogg', 50, TRUE) + visible_message(span_notice("Authentication Disk Locator mode actived.")) return if(!home) home = SSshuttle.getShuttle("syndicate") - if(!home) - icon_state = icon_null - return - if(loc.z != home.z) //If you are on a different z-level from the shuttle - icon_state = icon_null - else - pinpoint_at(home) + pinpoint_at(home) + /obj/item/pinpointer/operative name = "operative pinpointer" @@ -319,71 +376,80 @@ icon_close = "pinonclose_contractor" icon_medium = "pinonmedium_contractor" icon_far = "pinonfar_contractor" - var/mob/living/carbon/nearest_op = null modes = list(MODE_OPERATIVE) + /obj/item/pinpointer/operative/process() if(mode == MODE_OPERATIVE) - workop() - else - icon_state = icon_off + scan_for_ops() + pinpoint_at(target) + /obj/item/pinpointer/operative/proc/scan_for_ops() - if(mode == MODE_OPERATIVE) - nearest_op = null //Resets nearest_op every time it scans - var/closest_distance = 1000 - for(var/mob/living/carbon/M in GLOB.mob_list) - if(M.mind && (M.mind in SSticker.mode.syndicates)) - if(get_dist(M, get_turf(src)) < closest_distance) //Actually points toward the nearest op, instead of a random one like it used to - nearest_op = M - -/obj/item/pinpointer/operative/proc/workop() - if(mode == MODE_OPERATIVE) - scan_for_ops() - pinpoint_at(nearest_op, FALSE) - else - return FALSE + target = null // Resets nearest_op every time it scans + var/closest_distance = 1000 + source_turf = get_turf(src) + if(!source_turf) + return + var/mob/living/carbon/human/holder = get(loc, /mob/living/carbon/human) + for(var/mob/living/carbon/human/operative as anything in (GLOB.human_list - holder)) + if(operative.mind && (operative.mind in SSticker.mode.syndicates)) + target_turf = get_turf(operative) + if(!target_turf) + continue + var/new_dist = get_dist(source_turf, target_turf) + if(source_turf.z == target_turf.z && new_dist < closest_distance) //Actually points toward the nearest op, instead of a random one like it used to + target = operative + closest_distance = new_dist + /obj/item/pinpointer/operative/examine(mob/user) . = ..() - if(mode == MODE_OPERATIVE) - if(nearest_op) - . += "Nearest operative detected is [nearest_op.real_name]." - else - . += "No operatives detected within scanning range." + if(target) + var/mob/living/carbon/human/operative = target + . += span_notice("Nearest operative detected is [operative.real_name].") + else + . += span_notice("No operatives detected within scanning range.") + /obj/item/pinpointer/ninja name = "spider clan pinpointer" desc = "A pinpointer that leads to the first Spider Clan assassin detected." - var/mob/living/carbon/nearest_ninja = null modes = list(MODE_NINJA) + /obj/item/pinpointer/ninja/process() if(mode == MODE_NINJA) - workninja() - else - icon_state = icon_off + scan_for_ninja() + pinpoint_at(target) + /obj/item/pinpointer/ninja/proc/scan_for_ninja() - if(mode == MODE_NINJA) - nearest_ninja = null //Resets nearest_ninja every time it scans - var/closest_distance = 1000 - for(var/mob/living/carbon/potential_ninja in GLOB.mob_list) - if(isninja(potential_ninja)) - if(get_dist(potential_ninja, get_turf(src)) < closest_distance) - nearest_ninja = potential_ninja + target = null //Resets nearest_ninja every time it scans + var/closest_distance = 1000 + source_turf = get_turf(src) + if(!source_turf) + return + var/mob/living/carbon/human/holder = get(loc, /mob/living/carbon/human) + for(var/mob/living/carbon/human/potential_ninja as anything in (GLOB.human_list - holder)) + if(isninja(potential_ninja)) + target_turf = get_turf(potential_ninja) + if(!target_turf) + continue + var/new_dist = get_dist(source_turf, target_turf) + if(source_turf.z == target_turf.z && new_dist < closest_distance) + target = potential_ninja + closest_distance = new_dist -/obj/item/pinpointer/ninja/proc/workninja() - scan_for_ninja() - pinpoint_at(nearest_ninja, FALSE) /obj/item/pinpointer/ninja/examine(mob/user) . = ..() - if(mode == MODE_NINJA) - if(nearest_ninja) - . += "Nearest ninja detected is [nearest_ninja.real_name]." - else - . += "No ninjas detected within scanning range." + if(target) + var/mob/living/carbon/human/ninja = target + . += span_notice("Nearest ninja detected is [ninja.real_name].") + else + . += span_notice("No ninjas detected within scanning range.") + /obj/item/pinpointer/crew name = "crew pinpointer" @@ -397,72 +463,108 @@ icon_medium = "pinonmedium_crew" icon_far = "pinonfar_crew" modes = list(MODE_CREW) - var/target = null //for targeting in processing - var/target_set = FALSE //have we set a target at any point? -/obj/item/pinpointer/crew/proc/trackable(mob/living/carbon/human/H) - if(H && istype(H.w_uniform, /obj/item/clothing/under)) - var/turf/here = get_turf(src) - var/obj/item/clothing/under/U = H.w_uniform + +/obj/item/pinpointer/crew/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += span_info("You can Alt-Click to choose whom to track.") + + +/obj/item/pinpointer/crew/proc/is_trackable(mob/living/carbon/human/pin_target) + if(pin_target && istype(pin_target.w_uniform, /obj/item/clothing/under)) + source_turf = get_turf(src) + if(!source_turf) + return FALSE + var/obj/item/clothing/under/uniform = pin_target.w_uniform // Suit sensors must be on maximum. - if(!U.has_sensor || U.sensor_mode < 3) + if(!uniform.has_sensor || uniform.sensor_mode < 3) return FALSE - var/turf/there = get_turf(U) - return istype(there) && there.z == here.z + target_turf = get_turf(pin_target) + return target_turf && source_turf.z == target_turf.z return FALSE + /obj/item/pinpointer/crew/process() - if(mode == MODE_CREW && target_set) + if(mode == MODE_CREW) pinpoint_at(target) -/obj/item/pinpointer/crew/pinpoint_at(atom/target) - if(!target || !trackable(target)) - icon_state = icon_null + +/obj/item/pinpointer/crew/pinpoint_at(atom/pin_target) + if(!is_trackable(pin_target)) + nullify_targets() return + ..() + + +/obj/item/pinpointer/crew/AltClick(mob/user) + if(Adjacent(user)) + choose_signal(user) + return + ..() + + +/obj/item/pinpointer/crew/verb/choose_signal_verb() + set category = "Object" + set name = "Track Signals" + set src in usr + + choose_signal(usr) - ..(target) -/obj/item/pinpointer/crew/activate_mode(mode, mob/user) +/obj/item/pinpointer/crew/proc/choose_signal(mob/living/carbon/user) + if(!iscarbon(user) || user.incapacitated()) + return + var/list/name_counts = list() var/list/names = list() - for(var/thing in GLOB.human_list) - var/mob/living/carbon/human/H = thing - if(!trackable(H)) + for(var/mob/living/carbon/human/human as anything in GLOB.human_list) + if(!is_trackable(human)) continue - var/name = "Unknown" - if(H.wear_id) - var/obj/item/card/id/I = H.wear_id.GetID() - if(I) - name = I.registered_name - - while(name in name_counts) - name_counts[name]++ - name = text("[] ([])", name, name_counts[name]) - names[name] = H - name_counts[name] = 1 - - if(!names.len) - user.visible_message("[user]'s pinpointer fails to detect a signal.", "Your pinpointer fails to detect a signal.") + var/human_name = "Unknown" + if(human.wear_id) + var/obj/item/card/id/card = human.wear_id.GetID() + if(card) + human_name = card.registered_name + + while(human_name in name_counts) + name_counts[human_name]++ + human_name = "[human_name] ([name_counts[human_name]])" + names[human_name] = human + name_counts[human_name] = 1 + + if(!length(names)) + user.visible_message( + span_notice("[user]'s pinpointer fails to detect any signals."), + span_notice("Your pinpointer fails to detect any signals."), + ) return - var/A = tgui_input_list(user, "Person to track", "Pinpoint", names) - if(!src || !user || (user.get_active_hand() != src) || user.incapacitated() || !A) + var/choice = tgui_input_list(user, "Person to track", "Pinpoint", names) + if(!choice || !src || !user || (user.get_active_hand() != src) || user.incapacitated()) return - target = names[A] - target_set = TRUE - user.visible_message("[user] activates [user.p_their()] pinpointer.", "You activate your pinpointer.") + target = names[choice] + user.visible_message( + span_notice("[user] activates [user.p_their()] pinpointer."), + span_notice("You start tracking [choice]."), + ) + + if(mode == MODE_OFF) + cycle(user, silent = TRUE) + /obj/item/pinpointer/crew/centcom name = "centcom pinpointer" desc = "A handheld tracking device that tracks crew based on remote centcom sensors." -/obj/item/pinpointer/crew/centcom/trackable(mob/living/carbon/human/H) - var/turf/here = get_turf(src) - var/turf/there = get_turf(H) - return istype(there) && istype(here) && there.z == here.z + +/obj/item/pinpointer/crew/centcom/is_trackable(mob/living/carbon/human/pin_target) + source_turf = get_turf(src) + target_turf = get_turf(pin_target) + return source_turf && target_turf && source_turf.z == target_turf.z /////////////////////// @@ -480,73 +582,76 @@ icon_close = "pinonclose_crew" icon_medium = "pinonmedium_crew" icon_far = "pinonfar_crew" - var/turf/location = null - var/obj/target = null var/setting = NONE var/list/current_targets var/targets_index = 1 +/obj/item/pinpointer/thief/examine(mob/user) + . = ..() + if(Adjacent(user)) + . += span_info("Нажмите Alt-Click для выбора режима отслеживания.") + + /obj/item/pinpointer/thief/process() - switch(setting) - if(SETTING_LOCATION) - pinpoint_at(location) - if(SETTING_OBJECT) - pinpoint_at(target) + if(setting == SETTING_LOCATION || setting == SETTING_OBJECT) + pinpoint_at(target) -/obj/item/pinpointer/thief/cycle(mob/user) +/obj/item/pinpointer/thief/cycle(mob/user, silent = TRUE) . = ..() switch(setting) if(SETTING_LOCATION) - if(!location) - to_chat(user, "Определите координаты локации у пинпоинтера.") + if(!target) + to_chat(user, span_notice("Определите координаты локации у пинпоинтера.")) if(SETTING_OBJECT) if(!target) - to_chat(user, "Определите цель пинпоинтера.") + to_chat(user, span_notice("Определите цель пинпоинтера.")) else - to_chat(user, "Режим пинпоинтера не определен.") + to_chat(user, span_notice("Режим пинпоинтера не определен.")) /obj/item/pinpointer/thief/AltClick(mob/user) - . = ..() - toggle_mode(user) + if(Adjacent(user)) + toggle_mode(user) + return + ..() -/obj/item/pinpointer/thief/verb/toggle_mode(mob/user) +/obj/item/pinpointer/thief/verb/toggle_mode_verb() set category = "Object" set name = "Переключить Режим Пинпоинтера" set src in usr - if(user.stat || user.restrained()) - return + toggle_mode(usr) - mode = MODE_OFF - icon_state = icon_off - target = null - location = null + +/obj/item/pinpointer/thief/proc/toggle_mode(mob/user) + if(!iscarbon(user) || user.incapacitated()) + return switch(alert("Выберите режим пинпоинтера.", "Выбор режима пинпоинтера", "Локация", "Сигнатура Объекта", "Цели")) if("Локация") setting = SETTING_LOCATION - var/locationx = input(user, "Введите X координату для поиска.", "Локация?" , "") as num - if(!locationx || !(user in view(1,src))) + var/locationx = input(user, "Введите X координату для поиска.", "Локация?" , "") as null|num + if(isnull(locationx) || !(user in view(1,src))) return - var/locationy = input(user, "Введите Y координату для поиска.", "Локация?" , "") as num - if(!locationy || !(user in view(1,src))) + var/locationy = input(user, "Введите Y координату для поиска.", "Локация?" , "") as null|num + if(isnull(locationy) || !(user in view(1,src))) return - var/turf/Z = get_turf(src) - location = locate(locationx,locationy,Z.z) - to_chat(user, span_notice("Вы переключили пинпоинтер для обнаружения [locationx],[locationy]")) - return attack_self(user) + source_turf = get_turf(src) + locationx = clamp(locationx, 1, 255) + locationy = clamp(locationy, 1, 255) + target = locate(locationx, locationy, source_turf.z) + to_chat(user, span_notice("Вы переключили пинпоинтер на координаты: [locationx], [locationy].")) if("Сигнатура Объекта") setting = SETTING_OBJECT var/list/targets_list = list() - var/list/target_names[0] - var/list/target_paths[0] + var/list/target_names = list() + var/list/target_paths = list() var/input_ask = "Выберите сигнатуру" var/input_tittle = "Режим выбора" @@ -561,25 +666,22 @@ input_subtype = alert("Какой тип доступности предмета?" , "Определение Доступности Предмета" , "Сложнодоступен" , "Доступен" , "Коллекционный") switch(input_subtype) if("Сложнодоступен") - for(var/element in (GLOB.potential_theft_objectives_hard | GLOB.potential_theft_objectives)) - var/datum/theft_objective/theft = element - targets_list |= initial(theft.typepath) + for(var/datum/theft_objective/theft as anything in (GLOB.potential_theft_objectives_hard|GLOB.potential_theft_objectives)) + targets_list += initial(theft.typepath) if("Доступен") - for(var/element in GLOB.potential_theft_objectives_medium) - var/datum/theft_objective/theft = element - targets_list |= initial(theft.typepath) + for(var/datum/theft_objective/theft as anything in GLOB.potential_theft_objectives_medium) + targets_list += initial(theft.typepath) if("Коллекционный") - for(var/element in GLOB.potential_theft_objectives_collect) - var/datum/theft_objective/collect/theft = element + for(var/datum/theft_objective/collect/theft as anything in GLOB.potential_theft_objectives_collect) var/typepath_datum = initial(theft.typepath) if(typepath_datum) - targets_list |= typepath_datum + targets_list += typepath_datum continue var/subtype_datum = initial(theft.subtype) var/list/type_list = subtype_datum ? subtypesof(subtype_datum) : initial(theft.type_list) - targets_list |= type_list + targets_list += type_list if(!input_subtype) return @@ -589,20 +691,17 @@ return if("Структура") - for(var/element in GLOB.potential_theft_objectives_structure) - var/datum/theft_objective/structure/theft = element - targets_list |= initial(theft.typepath) + for(var/datum/theft_objective/structure/theft as anything in GLOB.potential_theft_objectives_structure) + targets_list += initial(theft.typepath) if("Питомец") - for(var/element in GLOB.potential_theft_objectives_animal) - var/datum/theft_objective/animal/theft = element - targets_list |= initial(theft.typepath) + for(var/datum/theft_objective/animal/theft as anything in GLOB.potential_theft_objectives_animal) + targets_list += initial(theft.typepath) - for(var/typepath in targets_list) - var/atom/temp_target = typepath - var/thief_name = initial(temp_target.name) - target_names |= thief_name - target_paths[thief_name] = temp_target + for(var/atom/theft_typepath as anything in targets_list) + var/theft_name = initial(theft_typepath.name) + target_names += theft_name + target_paths[theft_name] = theft_typepath var/choosen_target = tgui_input_list(user, "[input_ask], типа \"[input_type][input_subtype]\"", "[input_tittle]: [input_type][input_subtype]", target_names) if(!choosen_target) @@ -616,7 +715,6 @@ targets_index = 1 target = current_targets[targets_index] to_chat(user, span_notice("Вы переключили пинпоинтер для обнаружения [choosen_target]. Найдено целей: [length(current_targets)].")) - return attack_self(user) if("Цели") var/input_type = alert("Какую операцию стоит произвести?", "Выбор Операции", "Показать Цели", "Следующая Цель") @@ -626,8 +724,8 @@ var/list/all_objectives = user.mind.get_all_objectives() if(length(all_objectives) && user.mind.has_antag_datum(/datum/antagonist/thief)) var/list/targets_list = list() - var/list/target_names[0] - var/list/target_paths[0] + var/list/target_names = list() + var/list/target_paths = list() for(var/datum/objective/steal/objective in all_objectives) if(istype(objective, /datum/objective/steal/collect)) @@ -641,11 +739,10 @@ if(wanted_type) targets_list |= wanted_type - for(var/typepath in targets_list) - var/atom/temp_target = typepath - var/thief_name = initial(temp_target.name) - target_names |= thief_name - target_paths[thief_name] = temp_target + for(var/atom/theft_typepath as anything in targets_list) + var/theft_name = initial(theft_typepath.name) + target_names += theft_name + target_paths[theft_name] = theft_typepath var/choosen_target = tgui_input_list(user, "Выберите интересующую вас цель:", "Режим Выбора Цели", target_names) if(!choosen_target) @@ -662,8 +759,7 @@ else to_chat(user, span_warning("Не удалось обнаружить интересные цели для #REDACTED#! Если вы не член #REDACTED#, верните устройство владельцу или обратитесь по зашифрованному номеру на обратной стороне пинпоинтера.")) - - return attack_self(user) + return if("Следующая Цель") if(!length(current_targets)) @@ -682,6 +778,9 @@ target = current_targets[targets_index] + if(mode == MODE_OFF) + cycle(user, silent = TRUE) + /obj/item/pinpointer/tendril name = "ancient scanning unit" @@ -694,31 +793,29 @@ icon_medium = "pinonmedium_ancient" icon_far = "pinonfar_ancient" modes = list(MODE_TENDRIL) - var/obj/structure/spawner/lavaland/target -/obj/item/pinpointer/tendril/process() - if(mode == MODE_TENDRIL) - find_tendril() - pinpoint_at(target, FALSE) - else - icon_state = icon_off -/obj/item/pinpointer/tendril/proc/find_tendril() +/obj/item/pinpointer/tendril/process() if(mode == MODE_TENDRIL) scan_for_tendrils() pinpoint_at(target) - else - return FALSE + /obj/item/pinpointer/tendril/proc/scan_for_tendrils() - if(mode == MODE_TENDRIL) - target = null //Resets nearest_op every time it scans - var/closest_distance = 1000 - for(var/obj/structure/spawner/lavaland/T as anything in GLOB.tendrils) - var/temp_distance = get_dist(T, get_turf(src)) - if(temp_distance < closest_distance) - target = T - closest_distance = temp_distance + target = null //Resets nearest_op every time it scans + var/closest_distance = 1000 + source_turf = get_turf(src) + if(!source_turf) + return + for(var/obj/structure/spawner/lavaland/tendril as anything in GLOB.tendrils) + target_turf = get_turf(tendril) + if(!target_turf) + continue + var/new_dist = get_dist(source_turf, target_turf) + if(source_turf.z == target_turf.z && new_dist < closest_distance) + target = tendril + closest_distance = new_dist + /obj/item/pinpointer/tendril/examine(mob/user) . = ..() @@ -726,7 +823,6 @@ . += "Number of high energy signatures remaining: [length(GLOB.tendrils)]" - #undef MODE_OFF #undef MODE_DISK #undef MODE_NUKE @@ -740,3 +836,4 @@ #undef SETTING_DISK #undef SETTING_LOCATION #undef SETTING_OBJECT + diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 1067cedb557..0e6f72b8d96 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -484,6 +484,11 @@ GLOBAL_LIST_EMPTY(admin_objective_list) damage_explain = "токсинов" return damage_explain +/datum/objective/pain_hunter/check_completion() + if(start_of_completing && target && ishuman(target.current) && target.current.stat != DEAD) + return TRUE + else + return completed /datum/objective/protect //The opposite of killing a dude. name = "Protect" diff --git a/code/game/gamemodes/shadowling/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm index c903a5ed1a3..0c0149bb622 100644 --- a/code/game/gamemodes/shadowling/ascendant_shadowling.dm +++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm @@ -33,14 +33,14 @@ faction = list("faithless") -/mob/living/simple_animal/ascendant_shadowling/New() - ..() +/mob/living/simple_animal/ascendant_shadowling/Initialize(mapload) + . = ..() if(prob(35)) icon_state = "NurnKal" icon_living = "NurnKal" - update_icons() + update_icon(UPDATE_OVERLAYS) -/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) @@ -49,11 +49,13 @@ /mob/living/simple_animal/ascendant_shadowling/singularity_act() return 0 //Well hi, fellow god! How are you today? -/mob/living/simple_animal/ascendant_shadowling/update_icons() - overlays.Cut() - overlays += mutable_appearance(icon = 'icons/mob/mob.dmi', icon_state = "shadowling_ascended_ms") -/mob/living/simple_animal/ascendant_shadowling/proc/announce(var/text, var/size = 4, var/new_sound = null) +/mob/living/simple_animal/ascendant_shadowling/update_overlays() + . = ..() + . += "shadowling_ascended_ms" + + +/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_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 8acf0b2d8fe..20d0bc969fd 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -644,7 +644,7 @@ to_chat(user, "You sent the APC's power to the void while overloading all it's lights!") target_apc.cell?.charge = 0 //Sent to the shadow realm target_apc.chargemode = FALSE //Won't recharge either until an someone hits the button - target_apc.charging = FALSE + target_apc.charging = APC_NOT_CHARGING target_apc.null_charge() target_apc.update_icon() diff --git a/code/game/gamemodes/wizard/apprentice.dm b/code/game/gamemodes/wizard/apprentice.dm index b8b5867fade..8caada717e2 100644 --- a/code/game/gamemodes/wizard/apprentice.dm +++ b/code/game/gamemodes/wizard/apprentice.dm @@ -219,33 +219,8 @@ owner.mind.AddSpell(new /obj/effect/proc_holder/spell/forcewall(null)) owner.equip_or_collect(new /obj/item/gun/magic/staff/healing(owner), slot_r_hand) - //Нацепляем белый балахон - var/obj/item/clothing/suit/storage/mercy_hoodie/suit = new (owner) - suit.magical = TRUE - suit.name = "Роба целителя" - suit.desc = "Магическая роба прислужника-целителя, оберегающая от проказы." - suit.gas_transfer_coefficient = 0.01 - suit.permeability_coefficient = 0.01 - suit.body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - suit.armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - suit.allowed = list(/obj/item/teleportation_scroll) - suit.flags_inv = HIDEJUMPSUIT - suit.strip_delay = 50 - suit.put_on_delay = 50 - suit.resistance_flags = FIRE_PROOF | ACID_PROOF - owner.equip_or_collect(suit, slot_wear_suit) - var/obj/item/clothing/head/mercy_hood/head = new (owner) - head.magical = TRUE - head.name = "Капюшон целителя" - head.desc = "Магический капюшон робы прислужника-целителя, оберегающий от проказы." - head.gas_transfer_coefficient = 0.01 - head.permeability_coefficient = 0.01 - head.armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - head.resistance_flags = FIRE_PROOF | ACID_PROOF - head.strip_delay = 50 - head.put_on_delay = 50 - owner.equip_or_collect(head, slot_head) - + owner.equip_or_collect(new /obj/item/clothing/suit/wizrobe/healmage(owner), slot_wear_suit) + owner.equip_or_collect(new /obj/item/clothing/head/wizard/healmage(owner), slot_head) /datum/magick_school/motion name = "Школа Пространства" @@ -333,9 +308,8 @@ owner.mind.AddSpell(new /obj/effect/proc_holder/spell/sacred_flame(null)) ADD_TRAIT(owner, RESISTHOT, MAGIC_TRAIT) //sacred_flame из-за не совсем верной выдачи, без этого, не выдает защиту от огня. - //Стандартный костюм мага-воителя, который есть в башне волшебника и так. - owner.equip_or_collect(new /obj/item/clothing/suit/wizrobe/magusred(owner), slot_wear_suit) - owner.equip_or_collect(new /obj/item/clothing/head/wizard/magus(owner), slot_head) + owner.equip_or_collect(new /obj/item/clothing/suit/wizrobe/magusdefender(owner), slot_wear_suit) + owner.equip_or_collect(new /obj/item/clothing/head/wizard/magusdefender(owner), slot_head) /datum/magick_school/fire @@ -372,30 +346,8 @@ owner.mind.AddSpell(new /obj/effect/proc_holder/spell/touch/flesh_to_stone(null)) owner.equip_or_collect(new /obj/item/gun/magic/staff/animate(owner), slot_r_hand) - //Костюм настоящего художника-скульптора. - var/obj/item/clothing/suit/chef/classic/suit = new - suit.magical = TRUE - suit.name = "Фартук скульптора-волшебника" - suit.desc = "Классический фартук последователей школы ваяния, хорошо защищает от разлетающейся глины." - suit.gas_transfer_coefficient = 0.01 - suit.permeability_coefficient = 0.01 - suit.armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - suit.strip_delay = 50 - suit.put_on_delay = 50 - suit.resistance_flags = FIRE_PROOF | ACID_PROOF - owner.equip_or_collect(suit, slot_wear_suit) - var/obj/item/clothing/head/beret/ce/head = new - head.magical = TRUE - head.name = "Берет скульптора-волшебника" - head.desc = "Классический берет последователей школы ваяния, позволяет выглядеть как настоящий художник." - head.gas_transfer_coefficient = 0.01 - head.permeability_coefficient = 0.01 - head.armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - head.resistance_flags = FIRE_PROOF | ACID_PROOF - head.strip_delay = 50 - head.put_on_delay = 50 - owner.equip_or_collect(head, slot_head) - + owner.equip_or_collect(new /obj/item/clothing/suit/wizrobe/artmage(owner), slot_wear_suit) + owner.equip_or_collect(new /obj/item/clothing/head/wizard/artmage(owner), slot_head) /datum/magick_school/stand name = "Школа Хранителей" @@ -406,6 +358,8 @@ owner.mind.AddSpell(new /obj/effect/proc_holder/spell/forcewall/greater(null)) owner.equip_or_collect(new /obj/item/guardiancreator(owner), slot_r_hand) + owner.equip_or_collect(new /obj/item/clothing/suit/wizrobe/magusdefender(owner), slot_wear_suit) + owner.equip_or_collect(new /obj/item/clothing/head/wizard/magusdefender(owner), slot_head) /datum/magick_school/instability name = "Школа Неустойчивости" @@ -457,6 +411,9 @@ owner.equip_or_collect(new /obj/item/necromantic_stone(owner), slot_l_store) owner.equip_or_collect(new /obj/item/necromantic_stone(owner), slot_r_store) + owner.equip_or_collect(new /obj/item/clothing/suit/wizrobe/necromage(owner), slot_wear_suit) + owner.equip_or_collect(new /obj/item/clothing/head/wizard/necromage(owner), slot_head) + /datum/magick_school/vision name = "Школа Прозрения" @@ -474,9 +431,8 @@ owner.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE to_chat(owner, "The walls suddenly disappear.") - //Нацепляем простой фиолетовый балахон - owner.equip_or_collect(new /obj/item/clothing/suit/wizrobe/psypurple(owner), slot_wear_suit) - owner.equip_or_collect(new /obj/item/clothing/head/wizard/amp(owner), slot_head) + owner.equip_or_collect(new /obj/item/clothing/suit/wizrobe/visionmage(owner), slot_wear_suit) + owner.equip_or_collect(new /obj/item/clothing/head/wizard/visionmage(owner), slot_head) /datum/magick_school/singulo diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 9ee9635e241..924533f5170 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -66,6 +66,29 @@ A.death() return ..() + +/obj/item/soulstone/update_name(updates = ALL) + . = ..() + var/mob/living/simple_animal/shade/shade = locate() in src + if(shade) + name = "soulstone: [shade.name]" + else + name = initial(name) + + +/obj/item/soulstone/update_icon_state() + if(purified) + icon_state = "purified_soulstone" + icon_state_full = "purified_soulstone2" + else + icon_state = initial(icon_state) + icon_state_full = initial(icon_state_full) + + var/mob/living/simple_animal/shade/shade = locate() in src + if(shade) + icon_state = icon_state_full + + //////////////////////////////Capturing//////////////////////////////////////////////////////// /obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user) if(M == user) @@ -161,11 +184,9 @@ usability = TRUE purified = TRUE optional = TRUE - icon_state = "purified_soulstone" - icon_state_full = "purified_soulstone2" - for(var/mob/M in contents) + update_icon(UPDATE_ICON_STATE) + for(var/mob/M in src) if(M.mind) - icon_state = "purified_soulstone2" if(iscultist(M)) SSticker.mode.remove_cultist(M.mind, FALSE) to_chat(M, "An unfamiliar white light flashes through your mind, cleansing the taint of [SSticker.cultdat ? SSticker.cultdat.entity_title1 : "Nar'Sie"] \ @@ -173,10 +194,10 @@ to_chat(M, "Assist [user], your saviour, and get vengeance on those who enslaved you!") else to_chat(M, "Your soulstone has been exorcised, and you are now bound to obey [user]. ") - - for(var/mob/living/simple_animal/shade/EX in src) - EX.holy = TRUE - EX.icon_state = "shade_angelic" + if(istype(M, /mob/living/simple_animal/shade)) + var/mob/living/simple_animal/shade/shade = M + shade.holy = TRUE + shade.update_icon(UPDATE_ICON_STATE) user.visible_message("[user] purifies [src]!", "You purify [src]!") else if(istype(O, /obj/item/melee/cultblade/dagger) && iscultist(user)) @@ -187,16 +208,15 @@ usability = FALSE purified = FALSE optional = FALSE - icon_state = "soulstone" - icon_state_full = "soulstone2" - for(var/mob/M in contents) + update_icon(UPDATE_ICON_STATE) + for(var/mob/M in src) if(M.mind) - icon_state = "soulstone2" SSticker.mode.add_cultist(M.mind) to_chat(M, "Your shard has been cleansed of holy magic, and you are now bound to the cult's will. Obey them and assist in their goals.") - for(var/mob/living/simple_animal/shade/EX in src) - EX.holy = FALSE - EX.icon_state = SSticker.cultdat?.shade_icon_state + if(istype(M, /mob/living/simple_animal/shade)) + var/mob/living/simple_animal/shade/shade = M + shade.holy = FALSE + shade.update_icon(UPDATE_ICON_STATE) to_chat(user, "You have cleansed [src] of holy magic.") else ..() @@ -218,11 +238,7 @@ for(var/mob/living/simple_animal/shade/A in src) A.forceMove(get_turf(user)) A.cancel_camera() - if(purified) - icon_state = "purified_soulstone" - else - icon_state = "soulstone" - name = initial(name) + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) if(iscultist(A)) to_chat(A, "You have been released from your prison, but you are still bound to the cult's will. Help them succeed in their goals at all costs.") else @@ -264,14 +280,30 @@ desc = "A holy machine used by those who are pure in soul and mind. It is inactive." var/defiled = FALSE + +/obj/structure/constructshell/holy/update_icon_state() + icon_state = defiled ? "construct-cult" : initial(icon_state) + + +/obj/structure/constructshell/holy/update_name(updates = ALL) + . = ..() + name = defiled ? "empty shell" : initial(name) + + +/obj/structure/constructshell/holy/update_desc(updates = ALL) + . = ..() + if(!defiled) + desc = initial(desc) + return + desc = "A wicked machine used by those skilled in magical arts. It is inactive." + + /obj/structure/constructshell/holy/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/storage/bible) && !iscultist(user) && user.mind.isholy) if(!defiled) return - name = initial(name) - icon_state = initial(icon_state) - desc = initial(desc) defiled = FALSE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) if(defiled) return ..() if(istype(I, /obj/item/soulstone)) @@ -285,10 +317,7 @@ if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) if(do_after(user, 4 SECONDS, target = src)) user.visible_message("[user] defile [src] with dark magic!!", "You sanctified [src]. Yes-yes. I need more acolytes!") - name = "empty shell" - icon_state = "construct-cult" - desc = "A wicked machine used by those skilled in magical arts. It is inactive." - defiled = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) return return ..() @@ -339,8 +368,7 @@ T.forceMove(src) // Put the shade into the stone. T.canmove = 0 T.health = T.maxHealth - icon_state = icon_state_full - name = "soulstone : [T.name]" + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) to_chat(T, "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form") to_chat(user, "Capture successful! [T.name]'s has been recaptured and stored within the soul stone.") @@ -437,8 +465,7 @@ S.real_name = "Shade of [M.real_name]" S.key = M.key S.cancel_camera() - name = "soulstone: [S.name]" - icon_state = icon_state_full + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) log_game("[S.key] has become [S.name] with [purified ? "holy" : "corrupted"] essence.") if(user) S.faction |= "\ref[user]" //Add the master as a faction, allowing inter-mob cooperation diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index d012c9f2df9..af56c0128ec 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -7,7 +7,7 @@ total_positions = 5 spawn_positions = 5 supervisors = "the admins" - selection_color = "#ffdddd" + selection_color = "#6865B3" access = list() minimal_access = list() admin_only = 1 @@ -70,7 +70,7 @@ total_positions = 5 spawn_positions = 5 supervisors = "the admins" - selection_color = "#ffdddd" + selection_color = "#6865B3" access = list() minimal_access = list() admin_only = 1 diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 6bf500f0bed..2e549ba702d 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -6,7 +6,7 @@ spawn_positions = -1 supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#e6e6e6" access = list() //See /datum/job/assistant/get_access() minimal_access = list() //See /datum/job/assistant/get_access() alt_titles = list("Tourist","Businessman","Trader","Assistant") diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 20e760dbc3f..f677cdca309 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -7,7 +7,7 @@ is_engineering = 1 supervisors = "the captain" department_head = list("Captain") - selection_color = "#ffeeaa" + selection_color = "#ffba4c" req_admin_notify = 1 access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA, @@ -57,7 +57,7 @@ is_engineering = 1 supervisors = "the chief engineer" department_head = list("Chief Engineer") - selection_color = "#fff5cc" + selection_color = "#ffeaca" access = list(ACCESS_EVA, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_EVA, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM) alt_titles = list("Maintenance Technician","Engine Technician","Electrician") @@ -93,7 +93,7 @@ total_positions = 5 spawn_positions = 3 department_head = list("Chief Engineer", "Station Engineer") - selection_color = "#fff5cc" + selection_color = "#ffeaca" alt_titles = list("Engineer Assistant", "Technical Assistant", "Engineer Student", "Technical Student", "Technical Trainee") exp_requirements = 180 exp_type = EXP_TYPE_CREW @@ -142,7 +142,7 @@ is_engineering = 1 supervisors = "the chief engineer" department_head = list("Chief Engineer") - selection_color = "#fff5cc" + selection_color = "#ffeaca" access = list(ACCESS_EVA, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_CONSTRUCTION, ACCESS_ATMOSPHERICS, ACCESS_MINERAL_STOREROOM, ACCESS_EMERGENCY_STORAGE) minimal_access = list(ACCESS_EVA, ACCESS_ATMOSPHERICS, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_EMERGENCY_STORAGE, ACCESS_CONSTRUCTION, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE) alt_titles = list("Atmospheric Technician") @@ -178,7 +178,7 @@ is_engineering = 1 supervisors = "the chief engineer" department_head = list("Chief Engineer") - selection_color = "#fff5cc" + selection_color = "#ffeaca" access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_MECHANIC, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MINERAL_STOREROOM, ACCESS_EMERGENCY_STORAGE) minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_EMERGENCY_STORAGE, ACCESS_MECHANIC, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MINERAL_STOREROOM) exp_requirements = 900 diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 60cfa2f78b9..f0bbcfbf7c2 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -7,7 +7,7 @@ is_medical = 1 supervisors = "the captain" department_head = list("Captain") - selection_color = "#ffddf0" + selection_color = "#66c6ff" req_admin_notify = 1 access = list(ACCESS_EVA, ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_HEADS, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, @@ -53,7 +53,7 @@ is_medical = 1 supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") - selection_color = "#ffeef0" + selection_color = "#d1eeff" access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY) alt_titles = list("Surgeon","Nurse") @@ -87,7 +87,7 @@ total_positions = 5 spawn_positions = 3 department_head = list("Chief Medical Officer", "Medical Doctor") - selection_color = "#ffeef0" + selection_color = "#d1eeff" alt_titles = list("Student Medical Doctor", "Medical Assistant") exp_requirements = 180 exp_type = EXP_TYPE_CREW @@ -134,7 +134,7 @@ is_medical = 1 supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") - selection_color = "#ffeef0" + selection_color = "#d1eeff" access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE) minimal_player_age = 3 @@ -197,7 +197,7 @@ is_medical = 1 supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") - selection_color = "#ffeef0" + selection_color = "#d1eeff" access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_CHEMISTRY, ACCESS_MINERAL_STOREROOM) alt_titles = list("Pharmacist","Pharmacologist") @@ -233,7 +233,7 @@ is_medical = 1 supervisors = "the chief medical officer and the research director" department_head = list("Chief Medical Officer", "Research Director") - selection_color = "#ffeef0" + selection_color = "#d1eeff" access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_RESEARCH) minimal_player_age = 3 @@ -268,7 +268,7 @@ is_medical = 1 supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") - selection_color = "#ffeef0" + selection_color = "#d1eeff" access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM) alt_titles = list("Pathologist","Microbiologist") @@ -305,7 +305,7 @@ is_medical = 1 supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") - selection_color = "#ffeef0" + selection_color = "#d1eeff" access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_PSYCHIATRIST) minimal_access = list(ACCESS_MEDICAL, ACCESS_PSYCHIATRIST) alt_titles = list("Psychologist","Therapist") @@ -345,7 +345,7 @@ is_medical = 1 supervisors = "the chief medical officer" department_head = list("Chief Medical Officer") - selection_color = "#ffeef0" + selection_color = "#d1eeff" access = list(ACCESS_PARAMEDIC, ACCESS_MEDICAL, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MORGUE, ACCESS_SURGERY) minimal_access=list(ACCESS_PARAMEDIC, ACCESS_MEDICAL, ACCESS_MAINT_TUNNELS, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MORGUE, ACCESS_SURGERY) minimal_player_age = 3 diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 8918f067801..0eeeb918cc9 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -7,7 +7,7 @@ is_science = 1 supervisors = "the captain" department_head = list("Captain") - selection_color = "#ffddff" + selection_color = "#aa66cc" req_admin_notify = 1 access = list(ACCESS_EVA, ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS, @@ -59,7 +59,7 @@ is_science = 1 supervisors = "the research director" department_head = list("Research Director") - selection_color = "#ffeeff" + selection_color = "#e6d1f0" access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_XENOARCH, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_XENOARCH, ACCESS_MINERAL_STOREROOM) alt_titles = list("Anomalist", "Plasma Researcher", "Xenobiologist", "Chemical Researcher") @@ -96,7 +96,7 @@ total_positions = 5 spawn_positions = 3 department_head = list("Research Director", "Scientist") - selection_color = "#ffeeff" + selection_color = "#e6d1f0" alt_titles = list("Scientist Assistant", "Scientist Pregraduate", "Scientist Graduate", "Scientist Postgraduate", "Student Robotist") exp_requirements = 180 exp_type = EXP_TYPE_CREW @@ -139,7 +139,7 @@ is_science = 1 supervisors = "the research director" department_head = list("Research Director") - selection_color = "#ffeeff" + selection_color = "#e6d1f0" access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM) //As a job that handles so many corpses, it makes sense for them to have morgue access. minimal_access = list(ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM) //As a job that handles so many corpses, it makes sense for them to have morgue access. alt_titles = list("Biomechanical Engineer","Mechatronic Engineer") diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index ed9ea68d11b..6bd31a22500 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -7,7 +7,7 @@ is_security = 1 supervisors = "the captain" department_head = list("Captain") - selection_color = "#ffdddd" + selection_color = "#c25656" req_admin_notify = 1 access = list(ACCESS_EVA, ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_FORENSICS_LOCKERS, ACCESS_PILOT, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, @@ -65,7 +65,7 @@ is_security = 1 supervisors = "the head of security" department_head = list("Head of Security") - selection_color = "#ffeeee" + selection_color = "#edcdcd" access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS) alt_titles = list("Brig Sergeant") @@ -115,7 +115,7 @@ is_security = 1 supervisors = "the head of security" department_head = list("Head of Security") - selection_color = "#ffeeee" + selection_color = "#edcdcd" access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_WEAPONS) minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_WEAPONS) alt_titles = list("Forensic Technician") @@ -176,7 +176,7 @@ is_security = 1 supervisors = "the head of security" department_head = list("Head of Security") - selection_color = "#ffeeee" + selection_color = "#edcdcd" access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS) alt_titles = list("Security Trainer","Patrol Officer") @@ -241,7 +241,7 @@ is_security = 1 supervisors = "the head of security" department_head = list("Head of Security") - selection_color = "#ffeeee" + selection_color = "#edcdcd" access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS) minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS) alt_titles = list("Security Medic") @@ -278,7 +278,7 @@ is_security = 1 supervisors = "the head of security" department_head = list("Head of Security") - selection_color = "#ffeeee" + selection_color = "#edcdcd" access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_PILOT, ACCESS_EXTERNAL_AIRLOCKS) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS, ACCESS_PILOT, ACCESS_EXTERNAL_AIRLOCKS) minimal_player_age = 7 diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index d941ca23253..30d8178b925 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -4,7 +4,7 @@ department_flag = JOBCAT_ENGSEC total_positions = -1 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm spawn_positions = 1 - selection_color = "#ccffcc" + selection_color = "#4c82bf" supervisors = "your laws" department_head = list("Captain") req_admin_notify = 1 @@ -28,7 +28,7 @@ spawn_positions = 2 supervisors = "your laws and the AI" //Nodrak department_head = list("AI") - selection_color = "#ddffdd" + selection_color = "#cadaec" minimal_player_age = 21 exp_requirements = 300 exp_type = EXP_TYPE_CREW diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 17e95e05456..f8cbc4828ee 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -7,7 +7,7 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca spawn_positions = 1 supervisors = "Nanotrasen officials" department_head = list("Nanotrasen Navy Officer") - selection_color = "#ccccff" + selection_color = "#6691ff" req_admin_notify = 1 is_command = 1 access = list() //See get_access() @@ -66,7 +66,7 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca spawn_positions = 1 supervisors = "the captain" department_head = list("Captain") - selection_color = "#ddddff" + selection_color = "#d1deff" req_admin_notify = 1 is_command = 1 minimal_player_age = 21 @@ -117,7 +117,7 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca spawn_positions = 1 supervisors = "the command staff" department_head = list("Captain") - selection_color = "#ddddff" + selection_color = "#d1deff" req_admin_notify = 1 is_command = 1 transfer_allowed = FALSE @@ -167,7 +167,7 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca spawn_positions = 1 supervisors = "the Nanotrasen representative" department_head = list("Captain") - selection_color = "#ddddff" + selection_color = "#d1deff" req_admin_notify = 1 is_command = 1 transfer_allowed = FALSE @@ -221,7 +221,7 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca spawn_positions = 1 supervisors = "the Nanotrasen Supreme Court" department_head = list("Captain") - selection_color = "#ddddff" + selection_color = "#edccd7" req_admin_notify = 1 is_legal = 1 transfer_allowed = FALSE @@ -274,7 +274,7 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca is_legal = 1 supervisors = "the magistrate" department_head = list("Captain") - selection_color = "#ddddff" + selection_color = "#edccd7" access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_RESEARCH, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING) minimal_access = list(ACCESS_LAWYER, ACCESS_COURT, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS, ACCESS_RESEARCH, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING) alt_titles = list("Human Resources Agent","Lawyer","Attorney") diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 3dd1f2942d2..914f1f20e71 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -1,132 +1,3 @@ -//Food -/datum/job/bartender - title = "Bartender" - flag = JOB_BARTENDER - department_flag = JOBCAT_SUPPORT - total_positions = 1 - spawn_positions = 1 - is_service = 1 - supervisors = "the head of personnel" - department_head = list("Head of Personnel") - selection_color = "#dddddd" - access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_BAR, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) - alt_titles = list("Barman","Barkeeper","Drink Artist") - money_factor = 2 - outfit = /datum/outfit/job/bartender - -/datum/outfit/job/bartender - name = "Bartender" - jobtype = /datum/job/bartender - - uniform = /obj/item/clothing/under/rank/bartender - suit = /obj/item/clothing/suit/armor/vest - belt = /obj/item/storage/belt/bandolier/full - shoes = /obj/item/clothing/shoes/black - l_ear = /obj/item/radio/headset/headset_service - glasses = /obj/item/clothing/glasses/sunglasses/reagent - pda = /obj/item/pda/bar - backpack_contents = list( - /obj/item/toy/russian_revolver = 1 - ) - -/datum/outfit/job/bartender/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - if(visualsOnly) - return - - H.dna.SetSEState(GLOB.soberblock,1) - genemutcheck(H, GLOB.soberblock, null, MUTCHK_FORCED) - H.dna.default_blocks.Add(GLOB.soberblock) - H.check_mutations = 1 - - - -/datum/job/chef - title = "Chef" - flag = JOB_CHEF - department_flag = JOBCAT_SUPPORT - total_positions = 1 - spawn_positions = 1 - is_service = 1 - supervisors = "the head of personnel" - department_head = list("Head of Personnel") - selection_color = "#dddddd" - access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE) - minimal_access = list(ACCESS_KITCHEN) - alt_titles = list("Cook","Culinary Artist","Butcher") - money_factor = 2 - outfit = /datum/outfit/job/chef - -/datum/outfit/job/chef - name = "Chef" - jobtype = /datum/job/chef - - uniform = /obj/item/clothing/under/rank/chef - suit = /obj/item/clothing/suit/chef - belt = /obj/item/storage/belt/chef - shoes = /obj/item/clothing/shoes/black - head = /obj/item/clothing/head/chefhat - l_ear = /obj/item/radio/headset/headset_service - pda = /obj/item/pda/chef - backpack_contents = list( - /obj/item/paper/chef=1,\ - /obj/item/book/manual/chef_recipes=1) - -/datum/outfit/job/chef/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - if(visualsOnly) - return - var/datum/martial_art/cqc/under_siege/justacook = new - justacook.teach(H) - -/datum/outfit/job/chef/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - . = ..() - if(H.mind && H.mind.role_alt_title) - switch(H.mind.role_alt_title) - if("Culinary Artist") - uniform = /obj/item/clothing/under/artist - belt = /obj/item/storage/belt/chef/artistred - head = /obj/item/clothing/head/chefcap - suit = /obj/item/clothing/suit/storage/chefbluza - - -/datum/job/hydro - title = "Botanist" - flag = JOB_BOTANIST - department_flag = JOBCAT_SUPPORT - total_positions = 2 - spawn_positions = 2 - is_service = 1 - supervisors = "the head of personnel" - department_head = list("Head of Personnel") - selection_color = "#dddddd" - access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE) - minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE) - alt_titles = list("Hydroponicist", "Botanical Researcher") - exp_requirements = 300 - exp_type = EXP_TYPE_CREW - money_factor = 2 - outfit = /datum/outfit/job/hydro - -/datum/outfit/job/hydro - name = "Botanist" - jobtype = /datum/job/hydro - - uniform = /obj/item/clothing/under/rank/hydroponics - suit = /obj/item/clothing/suit/apron - gloves = /obj/item/clothing/gloves/botanic_leather - shoes = /obj/item/clothing/shoes/black - l_ear = /obj/item/radio/headset/headset_service - suit_store = /obj/item/plant_analyzer - pda = /obj/item/pda/botanist - - backpack = /obj/item/storage/backpack/botany - satchel = /obj/item/storage/backpack/satchel_hyd - dufflebag = /obj/item/storage/backpack/duffel/hydro - - - //Cargo /datum/job/qm title = "Quartermaster" @@ -137,7 +8,7 @@ is_supply = 1 supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#9f8545" access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_QM, ACCESS_MINT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) min_age_allowed = 30 @@ -174,7 +45,7 @@ is_supply = 1 supervisors = "the quartermaster" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#e2dbc8" access = list(ACCESS_MAINT_TUNNELS, ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_MINERAL_STOREROOM) money_factor = 2 @@ -201,7 +72,7 @@ is_supply = 1 supervisors = "the quartermaster" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#e2dbc8" access = list(ACCESS_MAILSORTING, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MINT, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MINING, ACCESS_MINT, ACCESS_MINING_STATION, ACCESS_MAILSORTING, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM) alt_titles = list("Spelunker") @@ -254,6 +125,133 @@ suit = /obj/item/clothing/suit/space/hardsuit/mining mask = /obj/item/clothing/mask/breath +//Food +/datum/job/bartender + title = "Bartender" + flag = JOB_BARTENDER + department_flag = JOBCAT_SUPPORT + total_positions = 1 + spawn_positions = 1 + is_service = 1 + supervisors = "the head of personnel" + department_head = list("Head of Personnel") + selection_color = "#d1e8d3" + access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + minimal_access = list(ACCESS_BAR, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + alt_titles = list("Barman","Barkeeper","Drink Artist") + money_factor = 2 + outfit = /datum/outfit/job/bartender + +/datum/outfit/job/bartender + name = "Bartender" + jobtype = /datum/job/bartender + + uniform = /obj/item/clothing/under/rank/bartender + suit = /obj/item/clothing/suit/armor/vest + belt = /obj/item/storage/belt/bandolier/full + shoes = /obj/item/clothing/shoes/black + l_ear = /obj/item/radio/headset/headset_service + glasses = /obj/item/clothing/glasses/sunglasses/reagent + pda = /obj/item/pda/bar + backpack_contents = list( + /obj/item/toy/russian_revolver = 1 + ) + +/datum/outfit/job/bartender/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(visualsOnly) + return + + H.dna.SetSEState(GLOB.soberblock,1) + genemutcheck(H, GLOB.soberblock, null, MUTCHK_FORCED) + H.dna.default_blocks.Add(GLOB.soberblock) + H.check_mutations = 1 + + + +/datum/job/chef + title = "Chef" + flag = JOB_CHEF + department_flag = JOBCAT_SUPPORT + total_positions = 1 + spawn_positions = 1 + is_service = 1 + supervisors = "the head of personnel" + department_head = list("Head of Personnel") + selection_color = "#d1e8d3" + access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE) + minimal_access = list(ACCESS_KITCHEN) + alt_titles = list("Cook","Culinary Artist","Butcher") + money_factor = 2 + outfit = /datum/outfit/job/chef + +/datum/outfit/job/chef + name = "Chef" + jobtype = /datum/job/chef + + uniform = /obj/item/clothing/under/rank/chef + suit = /obj/item/clothing/suit/chef + belt = /obj/item/storage/belt/chef + shoes = /obj/item/clothing/shoes/black + head = /obj/item/clothing/head/chefhat + l_ear = /obj/item/radio/headset/headset_service + pda = /obj/item/pda/chef + backpack_contents = list( + /obj/item/paper/chef=1,\ + /obj/item/book/manual/chef_recipes=1) + +/datum/outfit/job/chef/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + var/datum/martial_art/cqc/under_siege/justacook = new + justacook.teach(H) + +/datum/outfit/job/chef/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + if(H.mind && H.mind.role_alt_title) + switch(H.mind.role_alt_title) + if("Culinary Artist") + uniform = /obj/item/clothing/under/artist + belt = /obj/item/storage/belt/chef/artistred + head = /obj/item/clothing/head/chefcap + suit = /obj/item/clothing/suit/storage/chefbluza + + +/datum/job/hydro + title = "Botanist" + flag = JOB_BOTANIST + department_flag = JOBCAT_SUPPORT + total_positions = 2 + spawn_positions = 2 + is_service = 1 + supervisors = "the head of personnel" + department_head = list("Head of Personnel") + selection_color = "#d1e8d3" + access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE) + minimal_access = list(ACCESS_HYDROPONICS, ACCESS_MORGUE) + alt_titles = list("Hydroponicist", "Botanical Researcher") + exp_requirements = 300 + exp_type = EXP_TYPE_CREW + money_factor = 2 + outfit = /datum/outfit/job/hydro + +/datum/outfit/job/hydro + name = "Botanist" + jobtype = /datum/job/hydro + + uniform = /obj/item/clothing/under/rank/hydroponics + suit = /obj/item/clothing/suit/apron + gloves = /obj/item/clothing/gloves/botanic_leather + shoes = /obj/item/clothing/shoes/black + l_ear = /obj/item/radio/headset/headset_service + suit_store = /obj/item/plant_analyzer + pda = /obj/item/pda/botanist + + backpack = /obj/item/storage/backpack/botany + satchel = /obj/item/storage/backpack/satchel_hyd + dufflebag = /obj/item/storage/backpack/duffel/hydro + //Griff //BS12 EDIT /datum/job/clown @@ -265,7 +263,7 @@ is_service = 1 supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#d1e8d3" access = list(ACCESS_CLOWN, ACCESS_THEATRE) minimal_access = list(ACCESS_CLOWN, ACCESS_THEATRE) alt_titles = list("Performance Artist","Comedian","Jester") @@ -356,7 +354,7 @@ is_service = 1 supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#d1e8d3" access = list(ACCESS_MIME, ACCESS_THEATRE) minimal_access = list(ACCESS_MIME, ACCESS_THEATRE) alt_titles = list("Panthomimist") @@ -411,7 +409,7 @@ is_service = 1 supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#d1e8d3" access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS) minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS) alt_titles = list("Custodial Technician","Sanitation Technician") @@ -438,7 +436,7 @@ is_service = 1 supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#d1e8d3" access = list(ACCESS_LIBRARY) minimal_access = list(ACCESS_LIBRARY) alt_titles = list("Journalist") @@ -468,7 +466,7 @@ is_service = 1 supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#d1e8d3" alt_titles = list("Hair Stylist","Beautician") access = list() minimal_access = list() @@ -495,7 +493,7 @@ spawn_positions = 0 supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#d1e8d3" access = list(ACCESS_MAINT_TUNNELS, ACCESS_GATEWAY, ACCESS_EVA, ACCESS_EXTERNAL_AIRLOCKS) minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_GATEWAY, ACCESS_EVA, ACCESS_EXTERNAL_AIRLOCKS) outfit = /datum/outfit/job/explorer diff --git a/code/game/jobs/job/support_chaplain.dm b/code/game/jobs/job/support_chaplain.dm index 7a6b0295952..3a8b1128bb6 100644 --- a/code/game/jobs/job/support_chaplain.dm +++ b/code/game/jobs/job/support_chaplain.dm @@ -8,7 +8,7 @@ is_service = TRUE supervisors = "the head of personnel" department_head = list("Head of Personnel") - selection_color = "#dddddd" + selection_color = "#d1e8d3" access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_MAINT_TUNNELS) minimal_access = list(ACCESS_MORGUE, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_MAINT_TUNNELS) alt_titles = list("Priest","Monk","Preacher","Reverend","Oracle","Nun","Imam","Exorcist") diff --git a/code/game/jobs/job/syndicate.dm b/code/game/jobs/job/syndicate.dm index ca71db768e5..cd3ad1a1add 100644 --- a/code/game/jobs/job/syndicate.dm +++ b/code/game/jobs/job/syndicate.dm @@ -5,7 +5,7 @@ total_positions = 5 spawn_positions = 5 supervisors = "the admins" - selection_color = "#ff0000" + selection_color = "#4c1e1e" access = list() minimal_access = list() admin_only = 1 diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 0eb62a7aadd..ca7d3a811ad 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -42,8 +42,8 @@ destroy_beacon() return ..() -/obj/machinery/bluespace_beacon/hide(var/intact) - invisibility = intact ? INVISIBILITY_ABSTRACT : 0 +/obj/machinery/bluespace_beacon/hide(intact) + invisibility = intact ? INVISIBILITY_MAXIMUM : 0 update_icon() // update the icon_state diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 8799fae2189..a4350e61887 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -196,6 +196,7 @@ statusLabel = "Уберите карту и картридж" statusLabelCooldownTime = world.time + statusLabelCooldownTimeSecondsToAdd else + qdel(storedpda) storedpda = new /obj/item/pda(src) to_chat(usr, span_notice("Данные на PDA полностью стерты.")) statusLabel = "PDA очищен" diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 427eddc4cd2..98df7c97677 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -2,6 +2,7 @@ name = "security camera" desc = "It's used to monitor rooms." icon = 'icons/obj/machines/monitors.dmi' + blocks_emissive = EMISSIVE_BLOCK_GENERIC icon_state = "camera" use_power = ACTIVE_POWER_USE idle_power_usage = 5 @@ -34,16 +35,22 @@ var/in_use_lights = 0 // TO BE IMPLEMENTED var/toggle_sound = 'sound/items/wirecutter.ogg' -/obj/machinery/camera/Initialize(mapload) +/obj/machinery/camera/Initialize(mapload, list/networks) . = ..() wires = new(src) assembly = new(src) assembly.state = 4 assembly.anchored = 1 - assembly.update_icon() + assembly.update_icon(UPDATE_ICON_STATE) GLOB.cameranet.cameras += src - GLOB.cameranet.addCamera(src) + if(networks) + network = networks + var/list/tempnetwork = difflist(network, GLOB.restricted_camera_networks) + if(tempnetwork.len) + GLOB.cameranet.addCamera(src) + else + GLOB.cameranet.removeCamera(src) if(isturf(loc)) LAZYADD(myArea.cameras, UID()) if(is_station_level(z) && prob(3) && !start_active) @@ -76,15 +83,15 @@ return if(!isEmpProof()) if(prob(150/severity)) - update_icon() + update_icon(UPDATE_ICON_STATE) stat |= EMPED set_light(0) update_icon() GLOB.cameranet.removeCamera(src) - addtimer(CALLBACK(src, PROC_REF(triggerCameraAlarm)), 10 SECONDS, TIMER_UNIQUE | TIMER_DELETE_ME) - addtimer(CALLBACK(src, PROC_REF(restore_from_emp)), 90 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(triggerCameraAlarm)), 10 SECONDS, TIMER_UNIQUE|TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(restore_from_emp)), 90 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_DELETE_ME) for(var/mob/M in GLOB.player_list) if(M.client && M.client.eye == src) @@ -96,7 +103,7 @@ /obj/machinery/camera/proc/restore_from_emp() stat &= ~EMPED - update_icon() + update_icon(UPDATE_ICON_STATE) if(can_use()) GLOB.cameranet.addCamera(src) @@ -248,7 +255,7 @@ assembly.forceMove(drop_location()) assembly.state = 1 assembly.setDir(dir) - assembly.update_icon() + assembly.update_icon(UPDATE_ICON_STATE) assembly = null else var/obj/item/I = new /obj/item/camera_assembly(loc) @@ -256,7 +263,8 @@ new /obj/item/stack/cable_coil(loc, 2) qdel(src) -/obj/machinery/camera/update_icon() + +/obj/machinery/camera/update_icon_state() if(!status) icon_state = "[initial(icon_state)]1" else if(stat & EMPED) @@ -264,6 +272,7 @@ else icon_state = "[initial(icon_state)]" + /obj/machinery/camera/proc/toggle_cam(mob/user, displaymessage = TRUE) status = !status if(can_use()) @@ -293,7 +302,7 @@ visible_message(span_danger("\The [src] [change_msg]!")) playsound(loc, toggle_sound, 100, 1) - update_icon() + update_icon(UPDATE_ICON_STATE) // now disconnect anyone using the camera //Apparently, this will disconnect anyone even if the camera was re-activated. @@ -418,7 +427,7 @@ . = ..() assembly.state = 0 //These cameras are portable, and so shall be in the portable state if removed. assembly.anchored = 0 - assembly.update_icon() + assembly.update_icon(UPDATE_ICON_STATE) /obj/machinery/camera/portable/process() //Updates whenever the camera is moved. if(GLOB.cameranet && get_turf(src) != prev_turf) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 7482345ec30..9ef6ebd632c 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -81,17 +81,11 @@ var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])" input = strip_html(input(usr, "How would you like to name the camera?", "Set Camera Name", temptag)) state = ASSEMBLY_BUILT - var/obj/machinery/camera/C = new(loc) + var/obj/machinery/camera/C = new(loc, uniquelist(tempnetwork)) loc = C C.assembly = src C.auto_turn() - - C.network = uniquelist(tempnetwork) - tempnetwork = difflist(C.network,GLOB.restricted_camera_networks) - if(!tempnetwork.len) // Camera isn't on any open network - remove its chunk from AI visibility. - GLOB.cameranet.removeCamera(C) - C.c_tag = input for(var/i = 5; i >= 0; i -= 1) @@ -125,12 +119,12 @@ WRENCH_ANCHOR_TO_WALL_MESSAGE anchored = TRUE state = ASSEMBLY_WRENCHED - update_icon() + update_icon(UPDATE_ICON_STATE) auto_turn() else if(state == ASSEMBLY_WRENCHED) WRENCH_UNANCHOR_WALL_MESSAGE anchored = FALSE - update_icon() + update_icon(UPDATE_ICON_STATE) state = ASSEMBLY_UNBUILT else to_chat(user, span_warning("[src] can't fit here!")) @@ -153,7 +147,7 @@ to_chat(user, span_notice("You unweld [src] from its place.")) state = ASSEMBLY_WRENCHED -/obj/item/camera_assembly/update_icon() +/obj/item/camera_assembly/update_icon_state() if(anchored) icon_state = "camera1" else diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 1ce7b76d783..85f2e07fb81 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -21,20 +21,19 @@ QDEL_NULL(charging) return ..() -/obj/machinery/cell_charger/proc/updateicon() + +/obj/machinery/cell_charger/update_icon_state() icon_state = "ccharger[charging ? 1 : 0]" - if(charging && !(stat & (BROKEN|NOPOWER))) - var/newlevel = round(charging.percent() * 4 / 100) - if(chargelevel != newlevel) - chargelevel = newlevel +/obj/machinery/cell_charger/update_overlays() + . = ..() + if(!charging || (stat & (BROKEN|NOPOWER))) + return - overlays.Cut() - overlays += "ccharger-o[newlevel]" + var/newlevel = round(charging.percent() * 4 / 100) + . += "ccharger-o[newlevel]" - else - overlays.Cut() /obj/machinery/cell_charger/examine(mob/user) . = ..() @@ -67,8 +66,8 @@ charging = I user.visible_message("[user] inserts a cell into the charger.", span_notice("You insert a cell into the charger.")) - chargelevel = -1 - updateicon() + check_level() + update_icon() else return ..() @@ -90,7 +89,7 @@ charging.update_icon() charging = null chargelevel = -1 - updateicon() + update_icon() /obj/machinery/cell_charger/attack_hand(mob/user) if(!charging) @@ -137,4 +136,13 @@ use_power(200) //this used to use CELLRATE, but CELLRATE is fucking awful. feel free to fix this properly! charging.give(175) //inefficiency. - updateicon() + if(check_level()) + update_icon(UPDATE_OVERLAYS) + + +/obj/machinery/cell_charger/proc/check_level() + var/newlevel = round(charging.percent() * 4 / 100) + if(chargelevel != newlevel) + chargelevel = newlevel + return TRUE + diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 1324085660a..d1412461175 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -53,13 +53,15 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ light_color = LIGHT_COLOR_PURE_GREEN -/obj/machinery/clonepod/power_change() - ..() + +/obj/machinery/clonepod/power_change(forced = FALSE) + ..() //we don't check return here because we also care about the BROKEN flag if(!(stat & (BROKEN|NOPOWER))) set_light(2) else set_light(0) + /obj/machinery/clonepod/biomass biomass = CLONE_BIOMASS @@ -460,7 +462,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ . = TRUE // These icon states don't really matter since we need to call update_icon() to handle panel open/closed overlays anyway. default_deconstruction_screwdriver(user, null, null, I) - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/machinery/clonepod/wrench_act(mob/user, obj/item/I) . = TRUE @@ -596,13 +598,8 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ mess = TRUE update_icon() -/obj/machinery/clonepod/update_icon() - ..() - cut_overlays() - - if(panel_open) - add_overlay("panel_open") +/obj/machinery/clonepod/update_icon_state() if(occupant && !(stat & NOPOWER)) icon_state = "pod_cloning" else if(mess) @@ -610,6 +607,13 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ else icon_state = "pod_idle" + +/obj/machinery/clonepod/update_overlays() + . = ..() + if(panel_open) + . += "panel_open" + + /obj/machinery/clonepod/relaymove(mob/user) if(user.stat == CONSCIOUS) go_out() diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index b578fef4d6f..8083bef3223 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -332,13 +332,11 @@ icon_state = "grass1" floor_tile = /obj/item/stack/tile/grass -/turf/simulated/floor/holofloor/grass/New() - ..() - spawn(1) - update_icon() +/turf/simulated/floor/holofloor/grass/Initialize(mapload) + . = ..() + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon), UPDATE_ICON_STATE), 0.1 SECONDS) -/turf/simulated/floor/holofloor/grass/update_icon() - ..() +/turf/simulated/floor/holofloor/grass/update_icon_state() if(!(icon_state in list("grass1", "grass2", "grass3", "grass4", "sand"))) icon_state = "grass[pick("1","2","3","4")]" @@ -463,18 +461,22 @@ ..() item_color = pick("red","blue","green","purple") + +/obj/item/holo/esword/update_icon_state() + icon_state = active ? "sword[item_color]" : "sword0" + + /obj/item/holo/esword/attack_self(mob/living/user as mob) active = !active + update_icon(UPDATE_ICON_STATE) if(active) force = 30 - icon_state = "sword[item_color]" hitsound = "sound/weapons/blade1.ogg" w_class = WEIGHT_CLASS_BULKY playsound(user, 'sound/weapons/saberon.ogg', 20, 1) to_chat(user, span_notice("[src] is now active.")) else force = 3 - icon_state = "sword0" hitsound = "swing_hit" w_class = WEIGHT_CLASS_SMALL playsound(user, 'sound/weapons/saberoff.ogg', 20, 1) @@ -594,7 +596,7 @@ add_fingerprint(user) ready = !ready - update_icon() + update_icon(UPDATE_ICON_STATE) var/numbuttons = 0 var/numready = 0 @@ -606,11 +608,9 @@ if(numbuttons == numready) begin_event() -/obj/machinery/readybutton/update_icon() - if(ready) - icon_state = "auth_on" - else - icon_state = "auth_off" +/obj/machinery/readybutton/update_icon_state() + icon_state = ready ? "auth_on" : "auth_off" + /obj/machinery/readybutton/proc/begin_event() eventstarted = 1 diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index e49e7769edf..461383e8026 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -97,7 +97,7 @@ return var/datum/job/job_ai = SSjobs.name_occupations["AI"] - if(!job_ai.available_in_playtime(M.brainmob.client)) + if(job_ai.available_in_playtime(M.brainmob.client)) to_chat(user, span_warning("This [P] does not seem to fit.")) return @@ -170,6 +170,7 @@ else if(brain.brainmob.mind) SSticker.mode.remove_cultist(brain.brainmob.mind, 1) + SSticker.mode.remove_clocker(brain.brainmob.mind, 1) SSticker.mode.remove_revolutionary(brain.brainmob.mind, 1) var/mob/living/silicon/ai/A = new /mob/living/silicon/ai(loc, laws, brain) @@ -306,8 +307,8 @@ That prevents a few funky behaviors. return //Transferring a carded AI to a core. if(interaction == AI_TRANS_FROM_CARD) - AI.control_disabled = 0 - AI.aiRadio.disabledAi = 0 + AI.control_disabled = FALSE + AI.aiRadio.disabledAi = FALSE AI.forceMove(loc)//To replace the terminal. AI.on_the_card = FALSE to_chat(AI, "You have been uploaded to a stationary terminal. Remote device connection restored.") diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 28e44640f1e..9b5bbe4902d 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -120,8 +120,8 @@ return AI.forceMove(src) occupant = AI - AI.control_disabled = 1 - AI.aiRadio.disabledAi = 1 + AI.control_disabled = TRUE + AI.aiRadio.disabledAi = TRUE to_chat(AI, "You have been uploaded to a stationary terminal. Sadly, there is no remote access from here.") to_chat(user, span_boldnotice("Transfer successful: ") + "[AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") update_icon() diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index de9496dba94..7815eabbe51 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -312,7 +312,7 @@ var/obj/effect/landmark/L = thing if(L.name == "Marauder Exit") var/obj/effect/portal/P = new(L.loc, pick(spawn_marauder)) - P.invisibility = INVISIBILITY_ABSTRACT//So it is not seen by anyone. + P.invisibility = INVISIBILITY_ABSTRACT //So it is not seen by anyone. P.failchance = 0//So it has no fail chance when teleporting. P.can_mecha_pass = TRUE spawn_marauder.Remove(P.target) diff --git a/code/game/machinery/computer/syndie_cargo.dm b/code/game/machinery/computer/syndie_cargo.dm index 68a3dcc753d..99b8a1e3fe0 100644 --- a/code/game/machinery/computer/syndie_cargo.dm +++ b/code/game/machinery/computer/syndie_cargo.dm @@ -109,11 +109,11 @@ GLOBAL_LIST_INIT(data_storages, list()) //list of all cargo console data storage if(istype(crate, /obj/structure/closet/crate)) var/obj/structure/closet/crate/CR = crate CR.manifest = slip - CR.update_icon() + CR.update_icon(UPDATE_OVERLAYS) if(istype(crate, /obj/structure/largecrate)) var/obj/structure/largecrate/LC = crate LC.manifest = slip - LC.update_icon() + LC.update_icon(UPDATE_OVERLAYS) /*************************** diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 979a260eb59..c0d9b637c5d 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -1,20 +1,23 @@ +// Construction | Deconstruction +#define STATE_EMPTY 1 // Add wires | Wrench to destroy +#define STATE_WIRED 2 // Add cicuit / Wrench to unchor/unanchor | Remove wires with wirecutters +#define STATE_COMPONENTS 3 // Add components / Wrench to unchor/unanchor | Remove circuit/components with crowbar + /obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier. name = "machine frame" icon = 'icons/obj/stock_parts.dmi' icon_state = "box_0" - density = 1 + density = TRUE anchored = TRUE use_power = NO_POWER_USE max_integrity = 250 - var/obj/item/circuitboard/circuit = null - var/list/components = null - var/list/req_components = null - var/list/req_component_names = null // user-friendly names of components - var/state = 1 + var/obj/item/circuitboard/circuit + var/list/components + var/list/req_components + /// User-friendly names of components + var/list/req_component_names + var/state = STATE_EMPTY - // For pods - var/list/connected_parts = list() - var/pattern_idx=0 /obj/machinery/constructable_frame/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) @@ -26,21 +29,18 @@ circuit = null return ..() + /obj/machinery/constructable_frame/obj_break(damage_flag) deconstruct() -// unfortunately, we have to instance the objects really quickly to get the names -// fortunately, this is only called once when the board is added and the items are immediately GC'd -// and none of the parts do much in their constructors -/obj/machinery/constructable_frame/proc/update_namelist() - if(!req_components) - return - req_component_names = new() - for(var/tname in req_components) - var/path = tname - var/obj/O = new path() - req_component_names[tname] = O.name +/obj/machinery/constructable_frame/proc/update_lists(list/circuit_components) + req_components = circuit_components.Copy() + components = list() + req_component_names = list() + for(var/atom/path as anything in req_components) + req_component_names[path] = initial(path.name) + /obj/machinery/constructable_frame/proc/get_req_components_amt() var/amt = 0 @@ -48,145 +48,212 @@ amt += req_components[path] return amt -// update description of required components remaining -/obj/machinery/constructable_frame/proc/update_req_desc() + +/obj/machinery/constructable_frame/proc/get_req_desc() + . = "" + if(!req_components || !req_component_names) return - var/hasContent = 0 - desc = "Requires" - for(var/i = 1 to req_components.len) + var/hasContent = FALSE + var/components_len = length(req_components) + . = "Required components:" + for(var/i = 1 to components_len) var/tname = req_components[i] var/amt = req_components[tname] - if(amt == 0) + if(!amt) continue - var/use_and = i == req_components.len - desc += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" - hasContent = 1 + var/use_and = (i == components_len) + . += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" + hasContent = TRUE - if(!hasContent) - desc = "Does not require any more components." + if(hasContent) + . += "." else - desc += "." + . = span_notice("Does not require any more components.") -/obj/machinery/constructable_frame/machine_frame/attackby(obj/item/P, mob/user, params) + +/obj/machinery/constructable_frame/machine_frame/examine(mob/user) + . = ..() + . += span_notice("It is [anchored ? "bolted to the floor" : "unbolted"].") switch(state) - if(1) - if(istype(P, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = P - if(C.get_amount() >= 5) - playsound(src.loc, C.usesound, 50, 1) - to_chat(user, span_notice("You start to add cables to the frame.")) - if(do_after(user, 20 * C.toolspeed * gettoolspeedmod(user), target = src)) - if(state == 1 && C.use(5)) - add_fingerprint(user) - to_chat(user, span_notice("You add cables to the frame.")) - state = 2 - icon_state = "box_1" - else - to_chat(user, span_warning("At some point during construction you lost some cable. Make sure you have five lengths before trying again.")) - return - else - to_chat(user, span_warning("You need five lengths of cable to wire the frame.")) - return + if(STATE_EMPTY) + . += span_notice("The frame is constructed, but it is missing a wiring.") + if(STATE_WIRED) + . += span_notice("The frame is wired, but it is missing a circuit board") + if(STATE_COMPONENTS) + var/required = get_req_desc() + if(required) + . += required - if(istype(P, /obj/item/wrench)) - playsound(src.loc, P.usesound, 75, 1) - to_chat(user, span_notice("You dismantle the frame.")) - deconstruct(TRUE) - return - if(2) - if(istype(P, /obj/item/circuitboard)) - var/obj/item/circuitboard/B = P - if(B.board_type == "machine") - add_fingerprint(user) - playsound(src.loc, B.usesound, 50, 1) - to_chat(user, span_notice("You add the circuit board to the frame.")) - circuit = P - user.drop_transfer_item_to_loc(P, src) - name += " ([B.board_name])" - icon_state = "box_2" - state = 3 - components = list() - req_components = circuit.req_components.Copy() - update_namelist() - update_req_desc() - else - to_chat(user, span_danger("This frame does not accept circuit boards of this type!")) - return - if(istype(P, /obj/item/wirecutters)) - add_fingerprint(user) - playsound(src.loc, P.usesound, 50, 1) - to_chat(user, span_notice("You remove the cables.")) - state = 1 - icon_state = "box_0" - new /obj/item/stack/cable_coil(src.loc, 5) + +/obj/machinery/constructable_frame/machine_frame/update_icon_state() + switch(state) + if(STATE_EMPTY) + icon_state = "box_0" + if(STATE_WIRED) + icon_state = "box_1" + if(STATE_COMPONENTS) + icon_state = "box_2" + + +/obj/machinery/constructable_frame/machine_frame/wrench_act(mob/living/user, obj/item/I) + . = TRUE + add_fingerprint(user) + if(!I.use_tool(src, user, 3 SECONDS, volume = I.tool_volume)) + return . + + if(state == STATE_EMPTY) + deconstruct(TRUE) + to_chat(user, span_notice("You dismantle the frame.")) + return . + + if(anchored) + anchored = FALSE + WRENCH_UNANCHOR_MESSAGE + return . + + if(isinspace()) + to_chat(user, span_warning("You cannot tightens the bolts in space!")) + return . + + anchored = TRUE + WRENCH_ANCHOR_MESSAGE + + +/obj/machinery/constructable_frame/machine_frame/wirecutter_act(mob/living/user, obj/item/I) + . = TRUE + add_fingerprint(user) + if(state != STATE_WIRED) + return . + + if(!I.use_tool(src, user, 3 SECONDS, volume = I.tool_volume)) + return . + + state = STATE_EMPTY + WIRECUTTER_SNIP_MESSAGE + update_icon(UPDATE_ICON_STATE) + new /obj/item/stack/cable_coil(loc, 5) + + +/obj/machinery/constructable_frame/machine_frame/crowbar_act(mob/living/user, obj/item/I) + . = TRUE + add_fingerprint(user) + if(state != STATE_COMPONENTS) + return . + + if(!I.use_tool(src, user, 3 SECONDS, volume = I.tool_volume)) + return . + + state = STATE_WIRED + circuit.forceMove(loc) + circuit = null + + if(length(components)) + to_chat(user, span_notice("You remove the circuit board and other components.")) + for(var/obj/item/component in components) + component.forceMove(loc) + else + to_chat(user, span_notice("You remove the circuit board.")) + + name = initial(name) + desc = initial(desc) + req_components = null + components = null + update_icon(UPDATE_ICON_STATE) + + +/obj/machinery/constructable_frame/machine_frame/screwdriver_act(mob/living/user, obj/item/I) + . = TRUE + add_fingerprint(user) + if(state != STATE_COMPONENTS) + return . + + var/component_check = TRUE + for(var/component in req_components) + if(req_components[component] > 0) + component_check = FALSE + break + + if(!component_check) + to_chat(user, span_warning("Machine frame requires more components!")) + return . + + if(!I.use_tool(src, user, 5 SECONDS, volume = I.tool_volume)) + return . + + to_chat(user, span_notice("You finish the construction.")) + var/obj/machinery/new_machine = new circuit.build_path(loc) + new_machine.on_construction() + for(var/obj/component in new_machine.component_parts) + qdel(component) + new_machine.component_parts = list() + for(var/obj/component in src) + component.loc = null + new_machine.component_parts += component + circuit.loc = null + new_machine.RefreshParts() + transfer_fingerprints_to(new_machine) + qdel(src) + + +/obj/machinery/constructable_frame/machine_frame/attackby(obj/item/I, mob/user, params) + if(user.a_intent == INTENT_HARM) + return ..() + + add_fingerprint(user) + + switch(state) + if(STATE_EMPTY) + if(!iscoil(I)) + return ..() + + var/obj/item/stack/cable_coil/coil = I + if(coil.get_amount() < 5) + to_chat(user, span_warning("You need five lengths of cable to wire the frame.")) return - if(istype(P, /obj/item/wrench)) - add_fingerprint(user) - playsound(src.loc, P.usesound, 75, 1) - if(!anchored && !isinspace()) - anchored = TRUE - WRENCH_ANCHOR_MESSAGE - else if(anchored) - anchored = FALSE - WRENCH_UNANCHOR_MESSAGE + + playsound(loc, coil.usesound, 50, TRUE) + to_chat(user, span_notice("You start to add cables to the frame.")) + if(!do_after(user, 2 SECONDS * coil.toolspeed * gettoolspeedmod(user), target = src) || state != STATE_EMPTY) return - if(3) - if(istype(P, /obj/item/crowbar)) - add_fingerprint(user) - playsound(src.loc, P.usesound, 50, 1) - state = 2 - circuit.loc = src.loc - circuit = null - if(components.len == 0) - to_chat(user, span_notice("You remove the circuit board.")) - else - to_chat(user, span_notice("You remove the circuit board and other components.")) - for(var/obj/item/I in components) - I.loc = src.loc - name = initial(name) - desc = initial(desc) - req_components = null - components = null - icon_state = "box_1" + + if(!coil.use(5)) + to_chat(user, span_warning("At some point during construction you lost some cable. Make sure you have five lengths before trying again.")) return - if(istype(P, /obj/item/wrench)) - add_fingerprint(user) - playsound(src.loc, P.usesound, 75, 1) - if(!anchored && !isinspace()) - anchored = TRUE - WRENCH_ANCHOR_MESSAGE - else if(anchored) - anchored = FALSE - WRENCH_UNANCHOR_MESSAGE + state = STATE_WIRED + update_icon(UPDATE_ICON_STATE) + to_chat(user, span_notice("You add cables to the frame.")) + + if(STATE_WIRED) + if(!istype(I, /obj/item/circuitboard)) + return ..() + + var/obj/item/circuitboard/new_circuit = I + if(new_circuit.board_type != "machine") + to_chat(user, span_warning("This frame does not accept circuit boards of this type!")) return - if(istype(P, /obj/item/screwdriver)) - var/component_check = 1 - for(var/R in req_components) - if(req_components[R] > 0) - component_check = 0 - break - if(component_check) - playsound(src.loc, P.usesound, 50, 1) - var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) - new_machine.on_construction() - for(var/obj/O in new_machine.component_parts) - qdel(O) - new_machine.component_parts = list() - for(var/obj/O in src) - O.loc = null - new_machine.component_parts += O - circuit.loc = null - new_machine.RefreshParts() - transfer_fingerprints_to(new_machine) - qdel(src) + if(!user.drop_transfer_item_to_loc(new_circuit, src)) + to_chat(user, span_warning("[new_circuit] is stuck to you and cannot be placed into [src]!")) return - if(istype(P, /obj/item/storage/part_replacer) && P.contents.len && get_req_components_amt()) - var/obj/item/storage/part_replacer/replacer = P + state = STATE_COMPONENTS + circuit = new_circuit + name += " ([new_circuit.board_name])" + if(length(circuit.req_components)) + update_lists(circuit.req_components) + else + stack_trace("Circuit without req_components list, placed in [src].") + playsound(loc, new_circuit.usesound, 50, TRUE) + to_chat(user, span_notice("You add the circuit board to the frame.")) + update_icon(UPDATE_ICON_STATE) + + if(STATE_COMPONENTS) + + if(istype(I, /obj/item/storage/part_replacer) && length(I.contents) && get_req_components_amt()) + var/obj/item/storage/part_replacer/replacer = I var/list/added_components = list() var/list/part_list = list() @@ -206,42 +273,40 @@ components += part to_chat(user, span_notice("[part.name] applied.")) replacer.play_rped_sound() - - update_req_desc() return - if(istype(P, /obj/item)) - var/success - for(var/I in req_components) - if(istype(P, I) && (req_components[I] > 0) && (!(P.flags & NODROP) || istype(P, /obj/item/stack))) - add_fingerprint(user) - success=1 - playsound(src.loc, P.usesound, 50, 1) - if(istype(P, /obj/item/stack)) - var/obj/item/stack/S = P - var/camt = min(S.get_amount(), req_components[I]) - var/obj/item/stack/NS - if (S.is_cyborg && S.cyborg_construction_stack) - NS = new S.cyborg_construction_stack(src, camt) + if(isitem(I)) + var/success = FALSE + for(var/path in req_components) + var/is_stack = isstack(I) + if(istype(I, path) && (req_components[path] > 0) && (!(I.flags & NODROP) || is_stack)) + success = TRUE + playsound(loc, I.usesound, 50, TRUE) + if(is_stack) + var/obj/item/stack/stack = I + var/camt = min(stack.get_amount(), req_components[path]) + var/obj/item/stack/new_stack + if(stack.is_cyborg && stack.cyborg_construction_stack) + new_stack = new stack.cyborg_construction_stack(src, camt) else - NS = new P.type(src, camt) - NS.update_icon() - S.use(camt) - components += NS - req_components[I] -= camt - update_req_desc() + new_stack = new stack.type(src, camt) + new_stack.update_icon() + stack.use(camt) + components += new_stack + req_components[path] -= camt break - user.drop_transfer_item_to_loc(P, src) - components += P - req_components[I]-- - update_req_desc() - return 1 + user.drop_transfer_item_to_loc(I, src) + components += I + req_components[path]-- + break + if(!success) - to_chat(user, span_danger("You cannot add that to the machine!")) - return 0 - return - if(user.a_intent == INTENT_HARM) - return ..() + to_chat(user, span_warning("You cannot add that to the machine!")) + + +#undef STATE_EMPTY +#undef STATE_WIRED +#undef STATE_COMPONENTS //Machine Frame Circuit Boards @@ -257,7 +322,7 @@ to destroy them and players will be able to make replacements. build_path = /obj/machinery/vending/boozeomat req_components = list(/obj/item/vending_refill/boozeomat = 1) - var/static/list/vending_names_paths = list( + var/static/list/station_vendors = list( "Booze-O-Mat" = /obj/machinery/vending/boozeomat, "Solar's Best Hot Drinks" = /obj/machinery/vending/coffee, "Getmore Chocolate Corp" = /obj/machinery/vending/snack, @@ -294,17 +359,24 @@ to destroy them and players will be able to make replacements. "Service Departament ClothesMate Chaplain" = /obj/machinery/vending/clothing/departament/service/chaplain, "RoboFriends" = /obj/machinery/vending/pai,) + var/static/list/unique_vendors = list( + "ShadyCigs Ultra" = /obj/machinery/vending/cigarette/beach, + "SyndiWallMed" = /obj/machinery/vending/wallmed/syndicate, + "SyndiMed Plus" = /obj/machinery/vending/medical/syndicate_access, + ) + /obj/item/circuitboard/vendor/screwdriver_act(mob/user, obj/item/I) . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - var/choice = tgui_input_list(user, "Choose a new brand", "Select an Item", vending_names_paths) + var/choice = tgui_input_list(user, "Choose a new brand", "Select an Item", station_vendors) if(!choice) return set_type(choice) /obj/item/circuitboard/vendor/proc/set_type(type) - var/obj/machinery/vending/typepath = vending_names_paths[type] + var/static/list/buildable_vendors = station_vendors + unique_vendors + var/obj/machinery/vending/typepath = buildable_vendors[type] build_path = typepath board_name = "[type] Vendor" format_board_name() @@ -369,7 +441,7 @@ to destroy them and players will be able to make replacements. /obj/item/stack/sheet/glass = 1) /obj/item/circuitboard/thermomachine/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) if(build_path == /obj/machinery/atmospherics/unary/cold_sink/freezer) build_path = /obj/machinery/atmospherics/unary/heat_reservoir/heater board_name = "Heater" diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 348dbf2a6b2..552a4bea341 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -177,20 +177,23 @@ desc = "A bewildering tangle of machinery and pipes." icon = 'icons/obj/machines/cryogenic2.dmi' icon_state = "cryo_rear" - anchored = 1 + anchored = TRUE + var/orient_right = FALSE //Flips the sprite. - var/orient_right = null //Flips the sprite. /obj/structure/cryofeed/right - orient_right = 1 + orient_right = TRUE icon_state = "cryo_rear-r" + /obj/structure/cryofeed/Initialize(mapload) . = ..() - if(orient_right) - icon_state = "cryo_rear-r" - else - icon_state = "cryo_rear" + update_icon(UPDATE_ICON_STATE) + + +/obj/structure/cryofeed/update_icon_state() + icon_state = "cryo_rear[orient_right ? "-r" : ""]" + //Cryopods themselves. /obj/machinery/cryopod @@ -210,9 +213,7 @@ var/allow_occupant_types = list(/mob/living/carbon/human) var/disallow_occupant_types = list() var/syndicate = FALSE - var/mob/living/occupant = null // Person waiting to be despawned. - var/orient_right = null // Flips the sprite. // 15 minutes-ish safe period before being despawned. var/time_till_despawn = 9000 // This is reduced by 90% if a player manually enters cryo var/willing_time_divisor = 10 @@ -262,23 +263,22 @@ icon_state = "cryo_s" base_icon_state = "cryo_s-open" occupied_icon_state = "cryo_s" - dir = 8 + dir = WEST syndicate = TRUE -/obj/machinery/cryopod/New() + +/obj/machinery/cryopod/Initialize(mapload) + . = ..() announce = new /obj/item/radio/intercom(src) + announce.follow_target = src + icon_state = base_icon_state + set_light(1, 1, COLOR_LIGHT_GREEN) + find_control_computer() - if(orient_right) - icon_state = "[base_icon_state]-r" - else - icon_state = base_icon_state - ..() +/obj/machinery/cryopod/update_icon_state() + icon_state = occupant ? occupied_icon_state : base_icon_state -/obj/machinery/cryopod/Initialize() - ..() - set_light(1, 1, COLOR_LIGHT_GREEN) - find_control_computer() /obj/machinery/cryopod/proc/find_control_computer(urgent=0) var/area/A = get_area(src) @@ -434,10 +434,6 @@ announce_rank = G.fields["rank"] qdel(G) - if(orient_right) - icon_state = "[base_icon_state]-r" - else - icon_state = base_icon_state //Make an announcement and log the person entering storage + their rank var/list/crew_member = list() @@ -476,6 +472,7 @@ else occupant.ghostize(1) QDEL_NULL(occupant) + update_icon(UPDATE_ICON_STATE) name = initial(name) @@ -528,10 +525,6 @@ to_chat(user, span_notice("You stop putting [M] into the cryopod.")) return - if(orient_right) - icon_state = "[occupied_icon_state]-r" - else - icon_state = occupied_icon_state to_chat(M, span_notice("[on_enter_occupant_message]")) to_chat(M, span_boldnotice("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")) @@ -541,7 +534,7 @@ return ..() -/obj/machinery/cryopod/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) +/obj/machinery/cryopod/MouseDrop_T(atom/movable/O, mob/user, params) if(O.loc == user) //no you can't pull things out of your ass return @@ -561,8 +554,7 @@ return if(occupant) to_chat(user, span_boldnotice("The cryo pod is already occupied!")) - return - + return TRUE var/mob/living/L = O if(!istype(L) || L.buckled) @@ -570,23 +562,28 @@ if(L.stat == DEAD) to_chat(user, span_notice("Dead people can not be put into cryo.")) - return + return TRUE if(!L.mind) to_chat(user, span_notice("Catatonic people are not allowed into cryo.")) - return + return TRUE if(L.has_buckled_mobs()) //mob attached to us to_chat(user, span_warning("[L] will not fit into [src] because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.")) - return + return TRUE + INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/machinery/cryopod, put_in), user, L) + return TRUE + +/obj/machinery/cryopod/proc/put_in(mob/user, mob/living/L) // need this proc to use INVOKE_ASYNC in other proc. You're not recommended to use that one var/willing = null //We don't want to allow people to be forced into despawning. time_till_despawn = initial(time_till_despawn) if(L.client) if(alert(L,"Would you like to enter cryosleep?",,"Yes","No") == "Yes") - if(!L) return + if(!L) + return willing = willing_time_divisor else willing = 1 @@ -602,18 +599,17 @@ visible_message("[user] starts climbing into the cryo pod.") else visible_message("[user] starts putting [L] into the cryo pod.") - - if(do_after(user, 20, target = L)) - if(!L) return - + if(do_after(user, 2 SECONDS, target = L)) + if(!L) + return if(occupant) - to_chat(user, span_boldnotice("\The [src] is in use.")) + to_chat(user, span_boldnotice("[src] is in use.")) return - add_fingerprint(user) take_occupant(L, willing) else to_chat(user, span_notice("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) if(occupant) return @@ -621,13 +617,10 @@ return E.forceMove(src) time_till_despawn = initial(time_till_despawn) / willing_factor - if(orient_right) - icon_state = "[occupied_icon_state]-r" - else - icon_state = occupied_icon_state to_chat(E, span_notice("[on_enter_occupant_message]")) to_chat(E, span_boldnotice("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")) occupant = E + update_icon(UPDATE_ICON_STATE) name = "[name] ([occupant.name])" time_entered = world.time if(findtext("[E.key]","@",1,2)) @@ -653,15 +646,12 @@ to_chat(usr, "The cryopod is in use and locked!") return - if(orient_right) - icon_state = "[base_icon_state]-r" - else - icon_state = base_icon_state - //Eject any items that aren't meant to be in the pod. var/list/items = contents - if(occupant) items -= occupant - if(announce) items -= announce + if(occupant) + items -= occupant + if(announce) + items -= announce for(var/obj/item/I in items) I.forceMove(get_turf(src)) @@ -704,11 +694,6 @@ occupant = usr time_till_despawn = initial(time_till_despawn) / willing_time_divisor - if(orient_right) - icon_state = "[occupied_icon_state]-r" - else - icon_state = occupied_icon_state - to_chat(usr, span_notice("[on_enter_occupant_message]")) to_chat(usr, span_boldnotice("If you ghost, log out or close your client now, your character will shortly be permanently removed from the round.")) occupant = usr @@ -717,7 +702,6 @@ add_fingerprint(usr) name = "[name] ([usr.name])" - return /obj/machinery/cryopod/proc/go_out() if(!occupant) @@ -725,15 +709,9 @@ occupant.forceMove(get_turf(src)) occupant = null - - if(orient_right) - icon_state = "[base_icon_state]-r" - else - icon_state = base_icon_state - + update_icon(UPDATE_ICON_STATE) name = initial(name) - return //Attacks/effects. @@ -764,13 +742,11 @@ allow_occupant_types = list(/mob/living/silicon/robot) disallow_occupant_types = list() -/obj/machinery/cryopod/robot/right - orient_right = 1 - icon_state = "pod_0-r" /obj/machinery/cryopod/robot/despawn_occupant() var/mob/living/silicon/robot/R = occupant - if(!istype(R)) return ..() + if(!istype(R)) + return ..() R.contents -= R.mmi qdel(R.mmi) @@ -806,7 +782,7 @@ target_cryopod = safepick(free_cryopods) if(target_cryopod.check_occupant_allowed(person_to_cryo)) var/turf/T = get_turf(person_to_cryo) - var/obj/effect/portal/SP = new /obj/effect/portal(T, null, null, 40) + var/obj/effect/portal/SP = new /obj/effect/portal(T, null, null, 4 SECONDS, create_sparks = FALSE) SP.name = "NT SSD Teleportation Portal" target_cryopod.take_occupant(person_to_cryo, 1) return 1 diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index c8917f01419..ead58469c2c 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -71,12 +71,20 @@ WRENCH_UNANCHOR_MESSAGE playsound(src, 'sound/items/deconstruct.ogg', 50, 1) -/obj/machinery/disco/update_icon() + +/obj/machinery/disco/update_icon_state() if(active) icon_state = "disco1" else icon_state = "disco0" - ..() + + +/obj/machinery/disco/update_overlays() + . = ..() + underlays.Cut() + + if(active) + underlays += emissive_appearance(icon, "disco_lightmask") /obj/machinery/disco/attack_hand(mob/user) @@ -129,6 +137,7 @@ return active = TRUE update_icon() + set_light(1, LIGHTING_MINIMUM_POWER) //for emmisive appearance dance_setup() START_PROCESSING(SSobj, src) lights_spin() @@ -481,7 +490,8 @@ STOP_PROCESSING(SSobj, src) dance_over() playsound(src,'sound/machines/terminal_off.ogg',50,1) - icon_state = "disco0" + update_icon() + set_light(0) stop = world.time + 100 diff --git a/code/game/machinery/defib_mount.dm b/code/game/machinery/defib_mount.dm index 07c3b8fdb97..f2f56ef4cac 100644 --- a/code/game/machinery/defib_mount.dm +++ b/code/game/machinery/defib_mount.dm @@ -34,10 +34,10 @@ if(building) set_pixel_offsets_from_dir(30, -30, 30, -30) -/obj/machinery/defibrillator_mount/loaded/New() //loaded subtype for mapping use - ..() +/obj/machinery/defibrillator_mount/loaded/Initialize(mapload) //loaded subtype for mapping use + . = ..() defib = new/obj/item/defibrillator/loaded(src) - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/machinery/defibrillator_mount/Destroy() QDEL_NULL(defib) @@ -46,7 +46,7 @@ /obj/machinery/defibrillator_mount/examine(mob/user) . = ..() if(defib) - . += span_notice("There is a defib unit hooked up. Alt-click to remove it.") + . += span_info("There is a defib unit hooked up. Alt-Click to remove it.") if(GLOB.security_level >= SEC_LEVEL_RED) . += span_notice("Due to a security situation, its locking clamps can be toggled by swiping any ID.") else @@ -58,47 +58,36 @@ if(defib && defib.cell && defib.cell.charge < defib.cell.maxcharge && is_operational()) use_power(200) defib.cell.give(180) //90% efficiency, slightly better than the cell charger's 87.5% - update_icon() + update_icon(UPDATE_OVERLAYS) + -/obj/machinery/defibrillator_mount/update_icon() - cut_overlays() +/obj/machinery/defibrillator_mount/update_overlays() + . = ..() if(defib) - add_overlay("defib") + . += "defib" if(defib.powered) - add_overlay(defib.safety ? "online" : "emagged") + . += "[defib.safety ? "online" : "emagged"]" var/ratio = defib.cell.charge / defib.cell.maxcharge ratio = CEILING(ratio * 4, 1) * 25 - add_overlay("charge[ratio]") + . += "charge[ratio]" if(clamps_locked) - add_overlay("clamps") + . += "clamps" + //defib interaction -/obj/machinery/defibrillator_mount/attack_hand(mob/living/carbon/) - var/mob/living/carbon/human/user = usr +/obj/machinery/defibrillator_mount/attack_hand(mob/living/carbon/human/user = usr) if(!defib) to_chat(user, span_warning("There's no defibrillator unit loaded!")) return - var/obj/item/organ/external/temp2 = user.bodyparts_by_name[BODY_ZONE_PRECISE_R_HAND] - var/obj/item/organ/external/temp = user.bodyparts_by_name[BODY_ZONE_PRECISE_L_HAND] - - if(!temp || !temp.is_usable() && !temp2 || !temp2.is_usable()) - to_chat(user, span_warning("You can't use your hand to take out the paddles!")) - return - - if(defib.paddles.loc != defib) - to_chat(user, span_warning("[defib.paddles.loc == user ? "You are already" : "Someone else is"] holding [defib]'s paddles!")) - return - - defib.paddles.forceMove_turf() - if(!user.put_in_hands(defib.paddles, ignore_anim = FALSE)) - defib.paddles.forceMove(defib) - to_chat(user, span_warning("You need a free hand to hold the paddles!")) + if(!defib.paddles_on_defib) + to_chat(user, span_warning("[user.is_in_hands(defib.paddles) ? "You are already" : "Someone else is"] holding [defib]'s paddles!")) return + defib.dispence_paddles(user) add_fingerprint(user) - defib.paddles_on_defib = FALSE + /obj/machinery/defibrillator_mount/attackby(obj/item/I, mob/living/user, params) if(istype(I, /obj/item/defibrillator)) @@ -109,16 +98,20 @@ to_chat(user, span_warning("[I] is stuck to your hand!")) return add_fingerprint(user) - user.visible_message(span_notice("[user] hooks up [I] to [src]!"), \ - span_notice("You press [I] into the mount, and it clicks into place.")) + user.visible_message( + span_notice("[user] hooks up [I] to [src]!"), + span_notice("You press [I] into the mount, and it clicks into place."), + ) playsound(src, 'sound/machines/click.ogg', 50, TRUE) defib = I - update_icon() + update_icon(UPDATE_OVERLAYS) return - else if(defib && I == defib.paddles) + + if(defib && I == defib.paddles) add_fingerprint(user) - user.drop_from_active_hand() + user.drop_item_ground(I) return + var/obj/item/card/id = I.GetID() if(id) if(check_access(id) || GLOB.security_level >= SEC_LEVEL_RED) //anyone can toggle the clamps in red alert! @@ -128,12 +121,14 @@ add_fingerprint(user) clamps_locked = !clamps_locked to_chat(user, span_notice("Clamps [clamps_locked ? "" : "dis"]engaged.")) - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, span_warning("Insufficient access.")) return + return ..() + /obj/machinery/defibrillator_mount/wrench_act(mob/user, obj/item/I) . = TRUE if(defib) @@ -145,18 +140,19 @@ new /obj/item/mounted/frame/defib_mount(get_turf(user)) qdel(src) + /obj/machinery/defibrillator_mount/AltClick(mob/living/carbon/human/user) + if(!Adjacent(user)) + return if(!istype(user) || user.incapacitated()) to_chat(user, span_warning("You can't do that right now!")) return - var/obj/item/organ/external/temp2 = user.bodyparts_by_name[BODY_ZONE_PRECISE_R_HAND] - var/obj/item/organ/external/temp = user.bodyparts_by_name[BODY_ZONE_PRECISE_L_HAND] - if(!Adjacent(user)) - return if(!defib) to_chat(user, span_warning("It'd be hard to remove a defib unit from a mount that has none.")) return - if(!temp || !temp.is_usable() && !temp2 || !temp2.is_usable()) + var/obj/item/organ/external/hand_right = user.get_organ(BODY_ZONE_PRECISE_R_HAND) + var/obj/item/organ/external/hand_left = user.get_organ(BODY_ZONE_PRECISE_L_HAND) + if((!hand_right || !hand_right.is_usable()) && (!hand_left || !hand_left.is_usable())) to_chat(user, span_warning("You can't use your hand to take out the defibrillator!")) return if(clamps_locked) @@ -168,7 +164,8 @@ span_notice("You slide out [defib] from [src] and unhook the charging cables.")) playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) defib = null - update_icon() + update_icon(UPDATE_OVERLAYS) + //wallframe, for attaching the mounts easily /obj/item/mounted/frame/defib_mount diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 2d80e9d97b9..92a90783949 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1067,6 +1067,23 @@ About the new airlock wires panel: return interact_with_panel(user) +/obj/machinery/door/airlock/wrench_act(mob/user, obj/item/I) + if(!headbutt_shock_check(user)) + return + . = TRUE + if(!I.tool_use_check(user, 0)) + return + if(!panel_open||!locked||emagged) + to_chat(user, span_notice("You can't reach bolt reducer.")) + return + if(isAllPowerLoss()) + to_chat(user, span_notice("You start wrenching bolt reducer.")) + if(I.use_tool(src, user, 300, volume = I.tool_volume)) + user.visible_message(span_notice("[user] raise \the [src]'s bolt manually."), + span_notice("You raise \the [src]'s bolt manually.")) + unlock(TRUE) + return + /obj/machinery/door/airlock/welder_act(mob/user, obj/item/I) //This is god awful but I don't care if(!headbutt_shock_check(user)) return @@ -1459,7 +1476,7 @@ About the new airlock wires panel: else ae = new/obj/item/airlock_electronics(loc) check_access() - ae.selected_accesses = req_access + ae.selected_accesses = length(req_access) ? req_access : list() ae.one_access = check_one_access else ae = electronics diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 65c30d7e2de..27533219b13 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -134,8 +134,6 @@ if(frequency) set_frequency(frequency) - update_icon() - /obj/machinery/door/airlock/New() ..() @@ -160,7 +158,7 @@ var/alert = 0 var/previousPressure -/obj/machinery/airlock_sensor/update_icon() +/obj/machinery/airlock_sensor/update_icon_state() if(on) if(alert) icon_state = "airlock_sensor_alert" @@ -197,7 +195,7 @@ alert = (pressure < ONE_ATMOSPHERE*0.8) - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/machinery/airlock_sensor/set_frequency(new_frequency) SSradio.remove_object(src, frequency) @@ -242,13 +240,13 @@ 2=Network Access */ -/obj/machinery/access_button/update_icon() +/obj/machinery/access_button/update_icon_state() if(on) icon_state = "access_button_standby" else icon_state = "access_button_off" -/obj/machinery/access_button/attack_ai(mob/user as mob) +/obj/machinery/access_button/attack_ai(mob/user) if(wires & 2) return ..(user) else diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 8288cefd09b..900043238f7 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -74,7 +74,7 @@ name = "Access Controller" tag_secure = 1 -/obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon() +/obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon_state() if(on && program) if(program.memory["processing"]) icon_state = "access_control_process" diff --git a/code/game/machinery/floodlight.dm b/code/game/machinery/floodlight.dm index 9950b3f61de..e24909f7691 100644 --- a/code/game/machinery/floodlight.dm +++ b/code/game/machinery/floodlight.dm @@ -95,7 +95,7 @@ updateicon() /obj/machinery/floodlight/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) if(!anchored && !isinspace()) playsound(loc, W.usesound, 50, 1) @@ -113,7 +113,7 @@ anchored = FALSE updateicon() return - if(istype(W, /obj/item/screwdriver)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) add_fingerprint(user) if(!open) if(unlocked) @@ -124,7 +124,7 @@ to_chat(user, "You unscrew the battery panel.") updateicon() return - if(istype(W, /obj/item/crowbar)) + if(W.tool_behaviour == TOOL_CROWBAR) add_fingerprint(user) if(unlocked) if(open) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index c3698353eec..5a7281ff110 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -11,40 +11,41 @@ /obj/machinery/iv_drip/process() if(istype(bag) && bag.injection_target) - update_icon() + update_icon(UPDATE_OVERLAYS) return return PROCESS_KILL -/obj/machinery/iv_drip/update_icon() - cut_overlays() +/obj/machinery/iv_drip/update_overlays() + . = ..() if(bag) - add_overlay("hangingbag") + . += "hangingbag" if(bag.reagents.total_volume) var/image/filling = image('icons/goonstation/objects/iv.dmi', src, "hangingbag-fluid") filling.icon += mix_color_from_reagents(bag.reagents.reagent_list) - add_overlay(filling) + . += filling -/obj/machinery/iv_drip/MouseDrop(mob/living/target) - if(usr.incapacitated()) - return - if(!ishuman(usr) || !iscarbon(target)) - return +/obj/machinery/iv_drip/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(usr.incapacitated() || !ishuman(usr) || !ishuman(over_object) || !Adjacent(over_object) || !usr.Adjacent(over_object)) + return FALSE + + add_fingerprint(usr) + if(!bag) + to_chat(usr, span_warning("There's no IV bag connected to [src]!")) + return FALSE + bag.afterattack(over_object, usr, TRUE) + START_PROCESSING(SSmachines, src) - if(Adjacent(target) && usr.Adjacent(target)) - add_fingerprint(usr) - bag.afterattack(target, usr, TRUE) - START_PROCESSING(SSmachines, src) /obj/machinery/iv_drip/attack_hand(mob/user) if(bag) add_fingerprint(user) bag.forceMove_turf() user.put_in_hands(bag, ignore_anim = FALSE) - bag.update_icon() + bag.update_icon(UPDATE_OVERLAYS) bag = null - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/machinery/iv_drip/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/reagent_containers/iv_bag)) @@ -57,13 +58,13 @@ add_fingerprint(user) bag = I to_chat(user, span_notice("You attach [I] to [src].")) - update_icon() + update_icon(UPDATE_OVERLAYS) START_PROCESSING(SSmachines, src) else if (bag && istype(I, /obj/item/reagent_containers)) add_fingerprint(user) bag.attackby(I) I.afterattack(bag, usr, TRUE) - update_icon() + update_icon(UPDATE_OVERLAYS) else return ..() diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index dc96b53a171..271e72b7f82 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -143,17 +143,17 @@ Class Procs: /obj/machinery/proc/flicker() return FALSE + /obj/machinery/Initialize(mapload) if(!armor) armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) . = ..() GLOB.machines += src - if(use_power) - myArea = get_area(src) - if(myArea) - RegisterSignal(myArea, COMSIG_AREA_EXITED, PROC_REF(onAreaExited)) - LAZYADD(myArea.machinery_cache, src) + myArea = get_area(src) + if(myArea) + RegisterSignal(myArea, COMSIG_AREA_EXITED, PROC_REF(onAreaExited)) + LAZYADD(myArea.machinery_cache, src) if(!speed_process) START_PROCESSING(SSmachines, src) @@ -164,6 +164,7 @@ Class Procs: init_multitool_menu() + /obj/machinery/proc/onAreaExited() if(myArea == get_area(src)) return @@ -290,7 +291,7 @@ Class Procs: else return attack_hand(user) -/obj/machinery/attack_hand(mob/user as mob) +/obj/machinery/attack_hand(mob/user) if(istype(user, /mob/dead/observer)) return FALSE @@ -352,8 +353,8 @@ Class Procs: if(!disassembled) M.obj_integrity = M.max_integrity * 0.5 //the frame is already half broken transfer_fingerprints_to(M) - M.state = 2 - M.icon_state = "box_1" + M.state = 2 // STATE_WIRED + M.update_icon(UPDATE_ICON_STATE) /obj/machinery/obj_break(damage_flag) if(!(flags & NODECONSTRUCT)) @@ -377,14 +378,18 @@ Class Procs: if(!I.use_tool(src, user, 0, volume = 0)) return FALSE if(!(flags & NODECONSTRUCT)) + var/prev_icon_state = icon_state if(!panel_open) - panel_open = 1 + panel_open = TRUE icon_state = icon_state_open to_chat(user, span_notice("You open the maintenance hatch of [src].")) else - panel_open = 0 + panel_open = FALSE icon_state = icon_state_closed to_chat(user, span_notice("You close the maintenance hatch of [src].")) + if(prev_icon_state != icon_state) + SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_ICON_STATE) + SEND_SIGNAL(src, COMSIG_ATOM_UPDATED_ICON, UPDATE_ICON_STATE) I.play_tool_sound(user, I.tool_volume) return 1 return 0 diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 01995956d64..25ff3c0a29b 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -46,7 +46,7 @@ // update the invisibility and icon /obj/machinery/magnetic_module/hide(intact) - invisibility = intact ? INVISIBILITY_ABSTRACT : 0 + invisibility = intact ? INVISIBILITY_MAXIMUM : 0 updateicon() // update the icon_state diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 22405f41daf..a5b9027f8c6 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -96,7 +96,7 @@ /obj/machinery/mass_driver_frame/attackby(var/obj/item/W as obj, var/mob/user as mob) switch(build) if(0) // Loose frame - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) to_chat(user, "You begin to anchor \the [src] on the floor.") playsound(get_turf(src), W.usesound, 50, 1) if(do_after(user, 10 * W.toolspeed * gettoolspeedmod(user), target = src) && (build == 0)) @@ -107,7 +107,7 @@ return 1 return if(1) // Fixed to the floor - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) to_chat(user, "You begin to de-anchor \the [src] from the floor.") playsound(get_turf(src), W.usesound, 50, 1) if(do_after(user, 10 * W.toolspeed * gettoolspeedmod(user), target = src) && (build == 1)) @@ -128,7 +128,7 @@ build++ return if(3) // Wired - if(istype(W, /obj/item/wirecutters)) + if(W.tool_behaviour == TOOL_WIRECUTTER) to_chat(user, "You begin to remove the wiring from \the [src].") if(do_after(user, 10 * W.toolspeed * gettoolspeedmod(user), target = src) && (build == 3)) add_fingerprint(user) @@ -149,7 +149,7 @@ return 1 return if(4) // Grille in place - if(istype(W, /obj/item/crowbar)) + if(W.tool_behaviour == TOOL_CROWBAR) to_chat(user, "You begin to pry off the grille from \the [src]...") playsound(get_turf(src), W.usesound, 50, 1) if(do_after(user, 30 * W.toolspeed * gettoolspeedmod(user), target = src) && (build == 4)) @@ -157,7 +157,7 @@ new /obj/item/stack/rods(loc,2) build-- return 1 - if(istype(W, /obj/item/screwdriver)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) add_fingerprint(user) to_chat(user, "You finalize the Mass Driver...") playsound(get_turf(src), W.usesound, 50, 1) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 881acfeae39..6bd1c41c11b 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -93,7 +93,7 @@ if(T.intact) return // prevent intraction when T-scanner revealed - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) add_fingerprint(user) open = !open @@ -220,8 +220,8 @@ Transponder Codes:
    "} /obj/machinery/navbeacon/invisible - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_ABSTRACT /obj/machinery/navbeacon/invisible/hide(intact) - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_ABSTRACT updateicon() diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index e5c4a71290d..7e842e4225c 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -522,7 +522,7 @@ w_class = WEIGHT_CLASS_BULKY /obj/item/pipe_meter/attackby(var/obj/item/W as obj, var/mob/user as mob, params) - if(!istype(W, /obj/item/wrench)) + if(W.tool_behaviour != TOOL_WRENCH) return ..() if(!locate(/obj/machinery/atmospherics/pipe, src.loc)) to_chat(user, span_warning("You need to fasten it to a pipe")) @@ -548,7 +548,7 @@ w_class = WEIGHT_CLASS_BULKY /obj/item/pipe_gsensor/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!istype(W, /obj/item/wrench)) + if(!W.tool_behaviour == TOOL_WRENCH) return ..() var/obj/machinery/atmospherics/air_sensor/sensor = new(loc) sensor.add_fingerprint(user) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 14cf12c074f..1c852a3490d 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -102,7 +102,7 @@ user.drop_transfer_item_to_loc(W, src) qdel(W) return - else if(istype(W, /obj/item/wrench)) + else if(W.tool_behaviour == TOOL_WRENCH) if(unwrenched==0) playsound(loc, W.usesound, 50, 1) to_chat(user, span_notice("You begin to unfasten \the [src] from the floor...")) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index db8c24b2fbc..7c7e401d547 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -20,7 +20,7 @@ var/deep_water = FALSE //set to 1 to drown even standing people /obj/machinery/poolcontroller/invisible - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_ABSTRACT name = "Water Controller" desc = "An invisible water controller. Players shouldn't see this." diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 54a600669ff..634f23f55e4 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -69,6 +69,10 @@ var/always_up = FALSE //Will stay active var/has_cover = TRUE //Hides the cover + var/list/turret_marks + + ///Targets that are currently processed by turret. Used by process() + var/list/processing_targets = list() /obj/machinery/porta_turret/Initialize(mapload) . = ..() @@ -78,8 +82,24 @@ spark_system.set_up(5, 0, src) spark_system.attach(src) + AddComponent(/datum/component/proximity_monitor, scan_range) setup() +/obj/machinery/porta_turret/HasProximity(atom/movable/AM) + handleInterloper(AM) + +/obj/machinery/porta_turret/proc/handleInterloper(atom/movable/entity) + //message_admins("[entity] is in target range of [src]") + + if(entity.invisibility > SEE_INVISIBLE_LIVING) //Let's not do typechecks and stuff on invisible things + return + + var/static/valid_targets = typecacheof(list(/obj/mecha, /obj/spacepod, /obj/vehicle, /mob/living)) + if(!is_type_in_typecache(entity, valid_targets)) + return + + processing_targets[entity] = TRUE //associative for perfomance + /obj/machinery/porta_turret/Destroy() QDEL_NULL(spark_system) return ..() @@ -295,7 +315,7 @@ GLOBAL_LIST_EMPTY(turret_icons) /obj/machinery/porta_turret/attackby(obj/item/I, mob/user) if((stat & BROKEN) && !syndicate) - if(istype(I, /obj/item/crowbar)) + if(I.tool_behaviour == TOOL_CROWBAR) //If the turret is destroyed, you can remove it with a crowbar to //try and salvage its components to_chat(user, span_notice("You begin prying the metal coverings off.")) @@ -314,7 +334,7 @@ GLOBAL_LIST_EMPTY(turret_icons) to_chat(user, span_notice("You remove the turret but did not manage to salvage anything.")) qdel(src) // qdel - else if((istype(I, /obj/item/wrench))) + else if(I.tool_behaviour == TOOL_WRENCH) if(enabled || raised) to_chat(user, span_warning("You cannot unsecure an active turret!")) return @@ -487,51 +507,64 @@ GLOBAL_LIST_EMPTY(turret_icons) popDown() return - var/list/targets = list() //list of primary targets - var/list/secondarytargets = list() //targets that are least important - var/static/things_to_scan = typecacheof(list(/obj/mecha, /obj/spacepod, /obj/vehicle, /mob/living)) + if(!length(processing_targets)) + return - for(var/A in typecache_filter_list(view(scan_range, src), things_to_scan)) - var/atom/AA = A + //Verify that targeted atoms are in our sight. Otherwise, just remove them from processing. + for(var/atom/movable/atom as anything in processing_targets) + if(!can_see(src, atom, scan_range)) + processing_targets -= atom - if(AA.invisibility > SEE_INVISIBLE_LIVING) //Let's not do typechecks and stuff on invisible things + var/list/primary_candidates + var/list/secondary_candidates + + for(var/atom/movable/atom as anything in processing_targets) + var/assess_type = TURRET_NOT_TARGET + assess_type = set_assess_type(atom) + if(assess_type == TURRET_PRIORITY_TARGET) + LAZYADD(primary_candidates, atom) continue - if(istype(A, /obj/mecha)) - var/obj/mecha/ME = A - assess_and_assign(ME.occupant, targets, secondarytargets) + if(assess_type == TURRET_SECONDARY_TARGET) + LAZYADD(secondary_candidates, atom) - if(istype(A, /obj/spacepod)) - var/obj/spacepod/SP = A - assess_and_assign(SP.pilot, targets, secondarytargets) + if(!primary_candidates && !secondary_candidates) + if(!always_up) + popDown() + return - if(istype(A, /obj/vehicle)) - var/obj/vehicle/T = A - if(T.has_buckled_mobs()) - for(var/m in T.buckled_mobs) - var/mob/living/buckled_mob = m - assess_and_assign(buckled_mob, targets, secondarytargets) + if(!tryToShootAt(primary_candidates)) + if(!tryToShootAt(secondary_candidates)) + if(!always_up) + popDown() - if(isliving(A)) - var/mob/living/C = A - assess_and_assign(C, targets, secondarytargets) +/obj/machinery/porta_turret/proc/set_assess_type(atom/movable/target) + if(istype(target, /obj/mecha)) + var/obj/mecha/ME = target + return assess_and_assign(ME.occupant) - if(!tryToShootAt(targets)) - if(!tryToShootAt(secondarytargets)) // if no valid targets, go for secondary targets - if(!always_up) - popDown() // no valid targets, close the cover + if(istype(target, /obj/spacepod)) + var/obj/spacepod/SP = target + return assess_and_assign(SP.pilot) + + if(istype(target, /obj/vehicle)) + var/obj/vehicle/T = target + if(T.has_buckled_mobs()) + for(var/m in T.buckled_mobs) + var/mob/living/buckled_mob = m + return assess_and_assign(buckled_mob) + + if(isliving(target)) + var/mob/living/C = target + return assess_and_assign(C) /obj/machinery/porta_turret/proc/in_faction(mob/living/target) if(!(faction in target.faction)) - return 0 - return 1 + return FALSE + return TRUE -/obj/machinery/porta_turret/proc/assess_and_assign(mob/living/L, list/targets, list/secondarytargets) - switch(assess_living(L)) - if(TURRET_PRIORITY_TARGET) - targets += L - if(TURRET_SECONDARY_TARGET) - secondarytargets += L +/obj/machinery/porta_turret/proc/assess_and_assign(mob/living/L) + return assess_living(L) /obj/machinery/porta_turret/proc/assess_living(mob/living/L) if(!L) @@ -584,15 +617,19 @@ 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) + return FALSE + if(targets.len && last_target && (last_target in targets) && target(last_target)) - return 1 + return TRUE while(targets.len) var/mob/living/M = pick(targets) targets -= M if(target(M)) - return 1 + return TRUE + /obj/machinery/porta_turret/proc/popUp() //pops the turret up if(disabled) @@ -770,7 +807,7 @@ GLOBAL_LIST_EMPTY(turret_icons) //this is a bit unwieldy but self-explanatory switch(build_step) if(0) //first step - if(istype(I, /obj/item/wrench) && !anchored) + if(I.tool_behaviour == TOOL_WRENCH && !anchored) add_fingerprint(user) playsound(loc, I.usesound, 100, 1) to_chat(user, span_notice("You secure the external bolts.")) @@ -778,7 +815,7 @@ GLOBAL_LIST_EMPTY(turret_icons) build_step = 1 return - else if(istype(I, /obj/item/crowbar) && !anchored) + else if(I.tool_behaviour == TOOL_CROWBAR && !anchored) playsound(loc, I.usesound, 75, 1) to_chat(user, span_notice("You dismantle the turret construction.")) new /obj/item/stack/sheet/metal( loc, 5) @@ -797,7 +834,7 @@ GLOBAL_LIST_EMPTY(turret_icons) to_chat(user, span_warning("You need two sheets of metal to continue construction.")) return - else if(istype(I, /obj/item/wrench)) + else if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) playsound(loc, I.usesound, 75, 1) to_chat(user, span_notice("You unfasten the external bolts.")) @@ -807,7 +844,7 @@ GLOBAL_LIST_EMPTY(turret_icons) if(2) - if(istype(I, /obj/item/wrench)) + if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) playsound(loc, I.usesound, 100, 1) to_chat(user, span_notice("You bolt the metal armor into place.")) @@ -839,7 +876,7 @@ GLOBAL_LIST_EMPTY(turret_icons) qdel(I) //delete the gun :( qdel return - else if(istype(I, /obj/item/wrench)) + else if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) playsound(loc, I.usesound, 100, 1) to_chat(user, span_notice("You remove the turret's metal armor bolts.")) @@ -860,7 +897,7 @@ GLOBAL_LIST_EMPTY(turret_icons) //attack_hand() removes the gun if(5) - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) add_fingerprint(user) playsound(loc, I.usesound, 100, 1) build_step = 6 @@ -880,13 +917,13 @@ GLOBAL_LIST_EMPTY(turret_icons) to_chat(user, span_warning("You need two sheets of metal to continue construction.")) return - else if(istype(I, /obj/item/screwdriver)) + else if(I.tool_behaviour == TOOL_SCREWDRIVER) add_fingerprint(user) playsound(loc, I.usesound, 100, 1) build_step = 5 to_chat(user, span_notice("You open the internal access hatch.")) return - else if(istype(I, /obj/item/crowbar)) + else if(I.tool_behaviour == TOOL_CROWBAR) add_fingerprint(user) playsound(loc, I.usesound, 75, 1) to_chat(user, span_notice("You pry off the turret's exterior armor.")) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 54cee71d5fe..1fe088c7229 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -90,7 +90,7 @@ /obj/machinery/shield/cult/barrier/Initialize() . = ..() - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_ABSTRACT /obj/machinery/shield/cult/barrier/Destroy() if(parent_rune && !QDELETED(parent_rune)) @@ -121,7 +121,7 @@ visible = TRUE else // Currently visible density = FALSE // Turn invisible - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_ABSTRACT visible = FALSE air_update_turf(1) @@ -469,7 +469,7 @@ /obj/machinery/shieldwallgen/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/wrench)) + if(I.tool_behaviour == TOOL_WRENCH) if(active) to_chat(user, "Turn off the field generator first.") return diff --git a/code/game/machinery/tcomms/core.dm b/code/game/machinery/tcomms/core.dm index dd4dfc20237..ef724227950 100644 --- a/code/game/machinery/tcomms/core.dm +++ b/code/game/machinery/tcomms/core.dm @@ -41,7 +41,7 @@ active = TRUE else visible_message(span_warning("Error: Another core is already active in this sector. Power-up cancelled due to radio interference.")) - update_icon() + update_icon(UPDATE_ICON_STATE) /** * Destructor for the core. @@ -158,7 +158,7 @@ if(C.active) if(C.stat & NOPOWER) // If another core has no power but is supposed to be on, we shut it down so we can continue. C.active = FALSE // Since only one active core is allowed per z level, give priority to the one actually working. - C.update_icon() + C.update_icon(UPDATE_ICON_STATE) else return FALSE // If we got here there isnt an active core on this Z-level. So return true @@ -231,7 +231,7 @@ if("toggle_active") if(check_power_on()) active = !active - update_icon() + update_icon(UPDATE_ICON_STATE) else to_chat(usr, span_warning("Error: Another core is already active in this sector. Power-up cancelled due to radio interference.")) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 2a00d8f8e8e..44e5c76e67e 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -108,7 +108,7 @@ else component_parts = list() var/obj/item/circuitboard/vendor/V = new - V.set_type(replacetext(name, "\improper", "")) + V.set_type(replacetext(initial(name), "\improper", "")) component_parts += V component_parts += new refill_canister RefreshParts() @@ -1011,10 +1011,11 @@ products = list(/obj/item/reagent_containers/food/drinks/cans/cola = 10,/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 10, /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 10,/obj/item/reagent_containers/food/drinks/cans/starkist = 10, /obj/item/reagent_containers/food/drinks/cans/space_up = 10,/obj/item/reagent_containers/food/drinks/cans/grape_juice = 10) - contraband = list(/obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5) + contraband = list(/obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5, /obj/item/reagent_containers/food/drinks/zaza = 1) prices = list(/obj/item/reagent_containers/food/drinks/cans/cola = 20,/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 20, /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 20,/obj/item/reagent_containers/food/drinks/cans/starkist = 20, - /obj/item/reagent_containers/food/drinks/cans/space_up = 20,/obj/item/reagent_containers/food/drinks/cans/grape_juice = 20) + /obj/item/reagent_containers/food/drinks/cans/space_up = 20,/obj/item/reagent_containers/food/drinks/cans/grape_juice = 20, + /obj/item/reagent_containers/food/drinks/zaza = 200) refill_canister = /obj/item/vending_refill/cola /obj/machinery/vending/cola/free @@ -1184,7 +1185,7 @@ refill_canister = /obj/item/vending_refill/wallmed /obj/machinery/vending/wallmed/syndicate - name = "\improper SyndiMed Plus" + name = "\improper SyndiWallMed" desc = "EVIL wall-mounted Medical Equipment dispenser." icon_state = "syndimed" icon_deny = "syndimed-deny" @@ -1203,9 +1204,10 @@ req_access = list(ACCESS_SECURITY) products = list(/obj/item/restraints/handcuffs = 8,/obj/item/restraints/handcuffs/cable/zipties = 8,/obj/item/grenade/flashbang = 4,/obj/item/flash = 5, /obj/item/reagent_containers/food/snacks/donut = 12,/obj/item/storage/box/evidence = 6,/obj/item/flashlight/seclite = 4,/obj/item/restraints/legcuffs/bola/energy = 7, - /obj/item/clothing/mask/muzzle/safety = 4, /obj/item/storage/box/swabs = 6, /obj/item/storage/box/fingerprints = 6, /obj/item/eftpos/sec = 4, + /obj/item/clothing/mask/muzzle/safety = 4, /obj/item/storage/box/swabs = 6, /obj/item/storage/box/fingerprints = 6, /obj/item/eftpos/sec = 4, /obj/item/storage/belt/security/webbing = 2, ) contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/storage/fancy/donut_box = 2,/obj/item/hailer = 5) + prices = list(/obj/item/storage/belt/security/webbing = 2000,) refill_canister = /obj/item/vending_refill/security /obj/machinery/vending/security/training @@ -1225,22 +1227,18 @@ if(!powered()) return add_fingerprint(user) - var/list/available_kits = list( - "Dominator Kit" = list(/obj/item/gun/energy/dominator/sibyl, /obj/item/clothing/accessory/holster), - "Enforcer Kit" = list(/obj/item/gun/projectile/automatic/pistol/enforcer/security, /obj/item/ammo_box/magazine/enforcer, /obj/item/ammo_box/magazine/enforcer, /obj/item/clothing/accessory/holster), - ) - var/weapon_kit = input(user, "Select a weaponary kit.") as null|anything in available_kits + var/list/available_kits = list("Dominator Kit" = /obj/item/storage/box/dominator_kit, + "Enforcer Kit" = /obj/item/storage/box/enforcer_kit) + var/weapon_kit = tgui_input_list(user, "Select a weaponary kit:", "Weapon kits", available_kits) if(!weapon_kit) return if(!Adjacent(user) || QDELETED(I) || I.loc != user) return qdel(I) sleep(0.5 SECONDS) - var/obj/item/storage/box/box = new(get_turf(src)) playsound(get_turf(src), 'sound/machines/machine_vend.ogg', 50, TRUE) - box.icon_state = "box_sec" - for(var/path in available_kits[weapon_kit]) - new path(box) + var/path = available_kits[weapon_kit] + var/obj/item/box = new path(get_turf(src)) if(Adjacent(user)) user.put_in_hands(box, ignore_anim = FALSE) return @@ -1495,22 +1493,27 @@ /obj/item/clothing/under/redhawaiianshirt = 1, /obj/item/clothing/under/pinkhawaiianshirt = 1, /obj/item/clothing/under/bluehawaiianshirt = 1, - /obj/item/clothing/under/orangehawaiianshirt = 1) + /obj/item/clothing/under/orangehawaiianshirt = 1, + /obj/item/clothing/under/ussptracksuit_red = 4, + /obj/item/clothing/under/ussptracksuit_blue = 4) contraband = list(/obj/item/clothing/suit/judgerobe = 1, - /obj/item/clothing/head/powdered_wig = 1, - /obj/item/gun/magic/wand = 1, - /obj/item/clothing/mask/balaclava =1, - /obj/item/clothing/glasses/thermal_fake = 1, - /obj/item/clothing/mask/horsehead = 2) + /obj/item/clothing/head/powdered_wig = 1, + /obj/item/gun/magic/wand = 1, + /obj/item/clothing/mask/balaclava =1, + /obj/item/clothing/under/syndicate/blackops_civ = 1, + /obj/item/clothing/glasses/thermal_fake = 1, + /obj/item/clothing/mask/horsehead = 2) premium = list(/obj/item/clothing/suit/hgpirate = 1, - /obj/item/clothing/head/hgpiratecap = 1, - /obj/item/clothing/head/helmet/roman/fake = 1, - /obj/item/clothing/head/helmet/roman/legionaire/fake = 1, - /obj/item/clothing/under/roman = 1, - /obj/item/clothing/shoes/roman = 1, - /obj/item/shield/riot/roman/fake = 1, - /obj/item/clothing/under/cuban_suit = 1, - /obj/item/clothing/head/cuban_hat = 1) + /obj/item/clothing/head/hgpiratecap = 1, + /obj/item/clothing/head/helmet/roman/fake = 1, + /obj/item/clothing/head/helmet/roman/legionaire/fake = 1, + /obj/item/clothing/under/roman = 1, + /obj/item/clothing/shoes/roman = 1, + /obj/item/shield/riot/roman/fake = 1, + /obj/item/clothing/under/cuban_suit = 1, + /obj/item/clothing/head/cuban_hat = 1, + /obj/item/clothing/under/ussptracksuit_black = 1, + /obj/item/clothing/under/ussptracksuit_white = 1) refill_canister = /obj/item/vending_refill/autodrobe /obj/machinery/vending/dinnerware @@ -1676,7 +1679,7 @@ /obj/item/clothing/under/color/darkred = 10, /obj/item/clothing/under/colour/skirt = 10 ) - contraband = list(/obj/item/clothing/under/syndicate/tacticool = 5,/obj/item/clothing/under/color/orange = 5) + contraband = list(/obj/item/clothing/under/syndicate/tacticool = 5,/obj/item/clothing/under/color/orange = 5, /obj/item/clothing/under/syndicate/tacticool/skirt = 5) premium = list(/obj/item/clothing/under/rainbow = 1) refill_canister = /obj/item/vending_refill/suitdispenser @@ -1813,10 +1816,12 @@ /obj/item/clothing/neck/cloak/grey = 1) contraband = list(/obj/item/clothing/under/syndicate/tacticool = 1, - /obj/item/clothing/mask/balaclava = 1, - /obj/item/clothing/head/ushanka = 1, - /obj/item/clothing/under/soviet = 1, - /obj/item/storage/belt/fannypack/black = 1) + /obj/item/clothing/under/syndicate/tacticool/skirt = 1, + /obj/item/clothing/mask/balaclava = 1, + /obj/item/clothing/under/syndicate/blackops_civ = 1, + /obj/item/clothing/head/ushanka = 1, + /obj/item/clothing/under/soviet = 1, + /obj/item/storage/belt/fannypack/black = 1) premium = list(/obj/item/clothing/under/suit_jacket/checkered = 1, /obj/item/clothing/head/mailman = 1, @@ -1922,6 +1927,7 @@ /obj/item/clothing/mask/balaclava = 10, /obj/item/clothing/mask/bandana/red = 10, /obj/item/clothing/mask/bandana/black = 10, + /obj/item/clothing/mask/secscarf = 10, /obj/item/clothing/gloves/color/black = 10, /obj/item/clothing/gloves/color/red = 10, @@ -2274,6 +2280,7 @@ req_access = list(ACCESS_CHAPEL_OFFICE) products = list( /obj/item/clothing/under/rank/chaplain = 5, + /obj/item/clothing/under/rank/chaplain/skirt = 5, /obj/item/clothing/suit/witchhunter = 2, /obj/item/clothing/head/witchhunter_hat = 2, /obj/item/clothing/suit/armor/riot/knight/templar = 1, @@ -2304,6 +2311,7 @@ req_access = list(ACCESS_HYDROPONICS) products = list( /obj/item/clothing/under/rank/hydroponics = 5, + /obj/item/clothing/under/rank/hydroponics/skirt = 5, /obj/item/clothing/suit/storage/suragi_jacket/botany = 3, /obj/item/clothing/suit/apron = 4, /obj/item/clothing/suit/apron/overalls = 2, @@ -2439,7 +2447,8 @@ /obj/item/ammo_box/speedloader/shotgun = 4, /obj/item/gun/projectile/automatic/wt550 = 3, /obj/item/ammo_box/magazine/wt550m9 = 6, - /obj/item/gun/energy/dominator/sibyl = 2 + /obj/item/gun/energy/dominator/sibyl = 2, + /obj/item/melee/classic_baton/telescopic = 4 ) contraband = list(/obj/item/storage/fancy/donut_box = 2) refill_canister = /obj/item/vending_refill/nta diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index d4b9ecbccd2..33c9d764617 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -162,10 +162,6 @@ for(var/obj/item/clothing/shoes/S in contents) if(!S.dyeable) continue - if(S.chained == 1) - S.chained = 0 - S.slowdown = SHOES_SLOWDOWN - new /obj/item/restraints/handcuffs( src ) S.icon_state = new_shoe_icon_state S.item_color = wash_color S.name = new_shoe_name @@ -221,7 +217,7 @@ usr.loc = src.loc -/obj/machinery/washing_machine/update_icon() +/obj/machinery/washing_machine/update_icon_state() icon_state = "wm_[state][panel]" /obj/machinery/washing_machine/attackby(obj/item/W as obj, mob/user as mob, params) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index eae63e929f8..6ef18718950 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -2,26 +2,24 @@ force = 30 var/maxsize = 2 internal_damage_threshold = 50 - maint_access = 0 + maint_access = FALSE armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) destruction_sleep_duration = 4 SECONDS 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) if(..()) if(H.client) H.client.mouse_pointer_icon = file("icons/obj/mecha/mecha_mouse.dmi") - return 1 - else - return 0 + return TRUE + return FALSE -/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, mob/user) if(..()) if(occupant.client) occupant.client.mouse_pointer_icon = file("icons/obj/mecha/mecha_mouse.dmi") - return 1 - else - return 0 + return TRUE + return FALSE /obj/mecha/combat/Topic(href,href_list) ..() diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 9955f4a530b..b4eb22d7cda 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -10,7 +10,7 @@ armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, bio = 0, rad = 50, fire = 100, acid = 100) max_temperature = 30000 infra_luminosity = 8 - maint_access = 1 + maint_access = TRUE force = 40 wreckage = /obj/structure/mecha_wreckage/durand @@ -41,7 +41,7 @@ armor = list(melee = 50, bullet = 35, laser = 15, energy = 15, bomb = 20, bio = 0, rad = 50, fire = 100, acid = 100) max_temperature = 30000 infra_luminosity = 8 - maint_access = 0 + maint_access = FALSE force = 40 wreckage = /obj/structure/mecha_wreckage/durand/old @@ -58,7 +58,7 @@ max_temperature = 30000 infra_luminosity = 8 max_equip = 4 - maint_access = 0 + maint_access = FALSE force = 40 wreckage = /obj/structure/mecha_wreckage/durand/rover internal_damage_threshold = 35 diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 4120e5ececc..93ee3d2f5d6 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -10,7 +10,7 @@ armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) max_temperature = 25000 infra_luminosity = 6 - maint_access = 1 + maint_access = TRUE leg_overload_coeff = 2 wreckage = /obj/structure/mecha_wreckage/gygax internal_damage_threshold = 35 @@ -45,7 +45,7 @@ max_temperature = 35000 leg_overload_coeff = 100 operation_req_access = list(ACCESS_CENT_SPECOPS) - maint_access = 0 + maint_access = FALSE wreckage = /obj/structure/mecha_wreckage/gygax/ert max_equip = 5 maxsize = 2 @@ -77,7 +77,7 @@ max_temperature = 35000 leg_overload_coeff = 2 operation_req_access = list(ACCESS_SYNDICATE) - maint_access = 0 + maint_access = FALSE wreckage = /obj/structure/mecha_wreckage/gygax/dark max_equip = 4 maxsize = 2 diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index 84178656311..1916c75bfeb 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -10,10 +10,10 @@ armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 25000 infra_luminosity = 5 - maint_access = 1 + maint_access = TRUE operation_req_access = list(ACCESS_CLOWN) wreckage = /obj/structure/mecha_wreckage/honker - add_req_access = 0 + add_req_access = FALSE max_equip = 3 starting_voice = /obj/item/mecha_modkit/voice/honk var/squeak = 0 diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index f2156f52d05..6a893993bb6 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -12,7 +12,7 @@ infra_luminosity = 3 operation_req_access = list(ACCESS_CENT_SPECOPS) wreckage = /obj/structure/mecha_wreckage/marauder - add_req_access = 0 + add_req_access = FALSE internal_damage_threshold = 25 force = 45 max_equip = 5 diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 9ed436a6a9f..1c7accb09cc 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -12,9 +12,8 @@ armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 50, "fire" = 100, "acid" = 100) max_temperature = 25000 infra_luminosity = 3 - maint_access = 1 + maint_access = TRUE wreckage = /obj/structure/mecha_wreckage/phazon - add_req_access = 1 //operation_req_access = list() internal_damage_threshold = 25 force = 15 diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 6b59dd827c3..7a6384e28f9 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -11,8 +11,8 @@ max_temperature = 15000 wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(ACCESS_MIME) - maint_access = 1 - add_req_access = 0 + maint_access = TRUE + add_req_access = FALSE internal_damage_threshold = 60 max_equip = 3 step_energy_drain = 3 diff --git a/code/game/mecha/combat/sidewinder.dm b/code/game/mecha/combat/sidewinder.dm index c691b618bd3..c123527630a 100644 --- a/code/game/mecha/combat/sidewinder.dm +++ b/code/game/mecha/combat/sidewinder.dm @@ -10,7 +10,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // мех для тестов, не для боя max_temperature = 15000 wreckage = /obj/structure/mecha_wreckage/sidewinder - maint_access = 1 + maint_access = TRUE mech_enter_time = 1 internal_damage_threshold = 100 // для тестов внутренних повреждений max_equip = 40 //а хули вы хотели, 60 тонн! diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index e6aac7d116e..95ab83e82a6 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -15,7 +15,12 @@ var/obj/mecha/chassis = null var/range = MECHA_MELEE //bitflags var/salvageable = TRUE - var/selectable = TRUE // Set to FALSE for passive equipment such as mining scanner or armor plates +/* + MODULE_SELECTABLE_FULL - Regular selectable equipment. + MODULE_SELECTABLE_TOGGLE - Equipment toggles On/Off instead of regular selecting. + MODULE_SELECTABLE_NONE - Not selectable equipment. +*/ + var/selectable = MODULE_SELECTABLE_FULL var/harmful = FALSE //Controls if equipment can be used to attack by a pacifist. var/integrated = FALSE // Preventing modules from getting detached. @@ -55,7 +60,7 @@ var/txt = "* " if(chassis.selected == src) txt += "[name]" - else if(selectable) + else if(selectable == MODULE_SELECTABLE_FULL) txt += "[name]" else txt += "[name]" @@ -159,11 +164,16 @@ return /obj/item/mecha_parts/mecha_equipment/proc/give_targeted_action() - if(!selectable) - return - var/datum/action/innate/mecha/select_module/select_action = new - select_action.Grant(chassis.occupant, chassis, src) - chassis.select_actions[src] = select_action + var/datum/action/innate/mecha/module_action + switch(selectable) + if(MODULE_SELECTABLE_FULL) + module_action = new /datum/action/innate/mecha/select_module + if(MODULE_SELECTABLE_TOGGLE) + module_action = new /datum/action/innate/mecha/toggle_module + if(MODULE_SELECTABLE_NONE) + return + module_action.Grant(chassis.occupant, chassis, src) + chassis.module_actions[src] = module_action /obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto = null) if(!can_detach()) @@ -188,9 +198,9 @@ /obj/item/mecha_parts/mecha_equipment/proc/remove_targeted_action() if(!selectable) return - if(chassis.select_actions[src]) - var/datum/action/innate/mecha/select_module/select_action = chassis.select_actions[src] - select_action.Remove(chassis.occupant) + if(chassis.module_actions[src]) + var/datum/action/innate/mecha/module_action = chassis.module_actions[src] + module_action.Remove(chassis.occupant) /obj/item/mecha_parts/mecha_equipment/Topic(href,href_list) if(href_list["detach"]) @@ -199,7 +209,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/set_ready_state(state) equip_ready = state if(chassis) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",get_equip_info()) /obj/item/mecha_parts/mecha_equipment/proc/occupant_message(message) if(chassis) @@ -211,3 +221,12 @@ /obj/item/mecha_parts/mecha_equipment/proc/self_occupant_attack() return + +/obj/item/mecha_parts/mecha_equipment/proc/select_module() + chassis.selected = src + chassis.occupant_message(span_notice("You switch to [src].")) + chassis.visible_message("[chassis] raises [src]") + send_byjax(chassis.occupant, "exosuit.browser", "eq_list", chassis.get_equipment_list()) + +/obj/item/mecha_parts/mecha_equipment/proc/toggle_module() + return diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index d3f098d99cc..b0fd6eb75d3 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -283,8 +283,8 @@ /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/detach_act() STOP_PROCESSING(SSobj, src) - if(istype(src.loc, /obj/mecha/medical/odysseus)) - var/obj/mecha/medical/odysseus/O = src.loc + if(istype(loc, /obj/mecha/medical/odysseus)) + var/obj/mecha/medical/odysseus/O = loc for(var/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun_upgrade/S in O.equipment) S.detach() @@ -312,11 +312,11 @@ if(istype(target, /obj/item/reagent_containers/syringe) || istype(target, /obj/item/storage)) if(get_dist(src, target) < 2) for(var/obj/structure/D in target.loc)//Basic level check for structures in the way (Like grilles and windows) - if(!(D.CanPass(target, src.loc))) + if(!(D.CanPass(target, loc))) occupant_message("Unable to load syringe.") return FALSE for(var/obj/machinery/door/D in target.loc)//Checks for doors - if(!(D.CanPass(target, src.loc))) + if(!(D.CanPass(target, loc))) occupant_message("Unable to load syringe.") return FALSE return start_syringe_loading(target) @@ -330,7 +330,7 @@ if(reagents.total_volume<=0) occupant_message(span_alert("No available reagents to load syringe with.")) return FALSE - var/turf/trg = get_turf(target) + var/turf/target_turf = get_turf(target) var/obj/item/reagent_containers/syringe/mechsyringe = syringes[1] mechsyringe.forceMove(get_turf(chassis)) reagents.trans_to(mechsyringe, min(mechsyringe.volume, reagents.total_volume)) @@ -340,42 +340,49 @@ playsound(chassis, 'sound/items/syringeproj.ogg', 50, 1) log_message("Launched [mechsyringe] from [src], targeting [target].") start_cooldown() + INVOKE_ASYNC(src, PROC_REF(async_syringe_gun_action), mechsyringe, target_turf) + + +/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/async_syringe_gun_action(obj/item/reagent_containers/syringe/mechsyringe, turf/target_turf) var/mob/originaloccupant = chassis.occupant var/original_target_zone = originaloccupant.zone_selected - spawn(0) - src = null //if src is deleted, still process the syringe - var/max_range = 6 - for(var/i=0, i"), span_notice("You short out the safeties on[src].")) - playsound(src.loc, 'sound/effects/sparks4.ogg', 50, TRUE) + playsound(loc, 'sound/effects/sparks4.ogg', 50, TRUE) /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/get_reagents_page() var/output = {" @@ -561,7 +568,7 @@ icon_state = "beaker_upgrade" origin_tech = "materials=5;engineering=5;biotech=6" energy_drain = 10 - selectable = FALSE + selectable = MODULE_SELECTABLE_NONE var/improv_max_volume = 300 var/imrov_synth_speed = 20 diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index d27d3d695d1..8cd689118c2 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -99,7 +99,7 @@ add_attack_logs(user, target, "DRILLED with [src] ([uppertext(user.a_intent)]) ([uppertext(damtype)])") if(target.stat == DEAD && target.getBruteLoss() >= 200) add_attack_logs(user, target, "gibbed") - if(LAZYLEN(target.butcher_results)) + if(LAZYLEN(target.butcher_results) || issmall(target)) target.harvest(chassis) // Butcher the mob with our drill. else target.gib() @@ -147,23 +147,19 @@ icon_state = "mecha_analyzer" equip_cooldown = 1.5 SECONDS -/obj/item/mecha_parts/mecha_equipment/mining_scanner/Initialize(mapload) - . = ..() - START_PROCESSING(SSfastprocess, src) - /obj/item/mecha_parts/mecha_equipment/mining_scanner/Destroy() - STOP_PROCESSING(SSfastprocess, src) + STOP_PROCESSING(SSobj, src) return ..() /obj/item/mecha_parts/mecha_equipment/mining_scanner/attach_act(obj/mecha/M) - START_PROCESSING(SSfastprocess, src) + START_PROCESSING(SSobj, src) -/obj/item/mecha_parts/mecha_equipment/mining_scanner/detach_act() - STOP_PROCESSING(SSfastprocess, src) +/obj/item/mecha_parts/mecha_equipment/mining_scanner/detach_act(obj/mecha/M) + STOP_PROCESSING(SSobj, src) /obj/item/mecha_parts/mecha_equipment/mining_scanner/process() if(!chassis) - STOP_PROCESSING(SSfastprocess, src) + STOP_PROCESSING(SSobj, src) return TRUE if(!action_checks(src)) return FALSE diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 7a1c546d497..19ea70585d1 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -163,7 +163,7 @@ range = 0 var/deflect_coeff = 1.15 var/damage_coeff = 0.8 - selectable = FALSE + selectable = MODULE_SELECTABLE_NONE /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/attack_react(mob/user) if(action_checks(user)) @@ -181,7 +181,7 @@ range = 0 var/deflect_coeff = 1.15 var/damage_coeff = 0.8 - selectable = FALSE + selectable = MODULE_SELECTABLE_NONE /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/projectile_react() if(action_checks(src)) @@ -192,7 +192,7 @@ ////////////////////////////////// REPAIR DROID ////////////////////////////////////////////////// /obj/item/mecha_parts/mecha_equipment/repair_droid - name = "Repair Droid" + name = "repair droid" desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage." icon_state = "repair_droid" origin_tech ="magnets=3;programming=3;engineering=4" @@ -203,7 +203,7 @@ var/health_boost = 1 var/icon/droid_overlay var/list/repairable_damage = list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH) - selectable = FALSE + selectable = MODULE_SELECTABLE_TOGGLE /obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy() STOP_PROCESSING(SSobj, src) @@ -225,21 +225,24 @@ /obj/item/mecha_parts/mecha_equipment/repair_droid/Topic(href, href_list) ..() if(href_list["toggle_repairs"]) - if(!action_checks(src)) - return - chassis.overlays -= droid_overlay - if(!active_mode) - START_PROCESSING(SSobj, src) - droid_overlay = new(icon, icon_state = "repair_droid_a") - log_message("Activated.") - else - STOP_PROCESSING(SSobj, src) - droid_overlay = new(icon, icon_state = "repair_droid") - log_message("Deactivated.") - active_mode = !active_mode - chassis.overlays += droid_overlay - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",get_equip_info()) - start_cooldown() + toggle_module() + +/obj/item/mecha_parts/mecha_equipment/repair_droid/toggle_module() + if(!action_checks(src)) + return + chassis.overlays -= droid_overlay + if(!active_mode) + START_PROCESSING(SSobj, src) + droid_overlay = new(icon, icon_state = "repair_droid_a") + log_message("Droid activated.") + else + STOP_PROCESSING(SSobj, src) + droid_overlay = new(icon, icon_state = "repair_droid") + log_message("Droid deactivated.") + active_mode = !active_mode + chassis.overlays += droid_overlay + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",get_equip_info()) + start_cooldown() /obj/item/mecha_parts/mecha_equipment/repair_droid/process() if(!chassis) @@ -256,7 +259,7 @@ chassis.clearInternalDamage(int_dam_flag) repaired = TRUE break - if(h_boost<0 || chassis.obj_integrity < chassis.max_integrity) + if(h_boost < 0 || chassis.obj_integrity < chassis.max_integrity) chassis.obj_integrity += min(h_boost, chassis.max_integrity-chassis.obj_integrity) repaired = TRUE if(repaired) @@ -282,8 +285,8 @@ energy_drain = 0 range = 0 var/coeff = 100 - var/list/use_channels = list(EQUIP,ENVIRON,LIGHT) - selectable = FALSE + var/list/use_channels = list(EQUIP, ENVIRON, LIGHT) + selectable = MODULE_SELECTABLE_TOGGLE /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy() STOP_PROCESSING(SSobj, src) @@ -313,14 +316,17 @@ /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Topic(href, href_list) ..() if(href_list["toggle_relay"]) - if(equip_ready) //inactive - START_PROCESSING(SSobj, src) - set_ready_state(FALSE) - log_message("Activated.") - else - STOP_PROCESSING(SSobj, src) - set_ready_state(TRUE) - log_message("Deactivated.") + toggle_module() + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/toggle_module() + if(equip_ready) //inactive + START_PROCESSING(SSobj, src) + set_ready_state(FALSE) + log_message("Activated.") + else + STOP_PROCESSING(SSobj, src) + set_ready_state(TRUE) + log_message("Deactivated.") /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_module_equip_info() return " [equip_ready?"A":"Dea"]ctivate" @@ -504,7 +510,7 @@ desc = "Boosts exosuit servo-motors, allowing it to activate strafe mode. Requires energy to operate." icon_state = "actuator" origin_tech = "powerstorage=5;programming=5;engineering=5;combat=5" - selectable = FALSE + selectable = MODULE_SELECTABLE_NONE var/energy_per_step = 50 //How much energy this module drains per step in strafe mode /obj/item/mecha_parts/mecha_equipment/servo_hydra_actuator/can_attach(obj/mecha/M) @@ -543,7 +549,7 @@ icon_state = "move_plating" origin_tech = "materials=5;engineering=5;magnets=4;powerstorage=4" energy_drain = 20 - selectable = FALSE + selectable = MODULE_SELECTABLE_NONE var/ripley_step_in = 2.5 var/odyss_step_in = 1.8 var/clarke_step_in = 1.5 @@ -557,27 +563,27 @@ return FALSE /obj/item/mecha_parts/mecha_equipment/improved_exosuit_control_system/attach_act() - if(istype(src.loc, /obj/mecha/working/ripley)) // for ripley/firefighter - var/obj/mecha/working/ripley/R = src.loc + if(istype(loc, /obj/mecha/working/ripley)) // for ripley/firefighter + var/obj/mecha/working/ripley/R = loc R.slow_pressure_step_in = ripley_step_in - if(istype(src.loc, /obj/mecha/medical/odysseus)) // odyss - var/obj/mecha/medical/odysseus/O = src.loc + if(istype(loc, /obj/mecha/medical/odysseus)) // odyss + var/obj/mecha/medical/odysseus/O = loc O.step_in = odyss_step_in - if(istype(src.loc, /obj/mecha/working/clarke)) // clerke - var/obj/mecha/working/clarke/K = src.loc + if(istype(loc, /obj/mecha/working/clarke)) // clerke + var/obj/mecha/working/clarke/K = loc K.fast_pressure_step_in = clarke_step_in // that's why - if(istype(src.loc, /obj/mecha/combat/durand)) // dura - var/obj/mecha/combat/durand/D = src.loc + if(istype(loc, /obj/mecha/combat/durand)) // dura + var/obj/mecha/combat/durand/D = loc D.step_in = durand_step_in - if(istype(src.loc, /obj/mecha/combat/lockersyndie)) // syndilocker - var/obj/mecha/combat/lockersyndie/L = src.loc + if(istype(loc, /obj/mecha/combat/lockersyndie)) // syndilocker + var/obj/mecha/combat/lockersyndie/L = loc L.step_in = locker_step_in /obj/item/mecha_parts/mecha_equipment/improved_exosuit_control_system/detach_act() - if(istype(src.loc, /obj/mecha)) - var/obj/mecha/O = src.loc + if(istype(loc, /obj/mecha)) + var/obj/mecha/O = loc O.step_in = initial(O.step_in) - if(istype(src.loc, /obj/mecha/working)) - var/obj/mecha/working/W = src.loc + if(istype(loc, /obj/mecha/working)) + var/obj/mecha/working/W = loc W.slow_pressure_step_in = initial(W.slow_pressure_step_in) W.fast_pressure_step_in = initial(W.fast_pressure_step_in) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 2dc634b22bd..68a38ecba92 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -7,7 +7,6 @@ equip_cooldown = 1.5 SECONDS energy_drain = 10 var/dam_force = 20 - var/obj/mecha/working/cargo_holder harmful = TRUE /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/mecha/M) @@ -16,29 +15,23 @@ return TRUE return FALSE -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach_act(obj/mecha/M) - cargo_holder = M - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/detach_act() - cargo_holder = null - /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(atom/target) if(!action_checks(target)) return FALSE - if(!cargo_holder) + if(!chassis) return FALSE - if(istype(target,/obj)) + if(isobj(target)) var/obj/O = target if(!O.anchored) - if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) + if(length(chassis.cargo) < chassis.cargo_capacity) chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") O.anchored = TRUE if(do_after_cooldown(target)) - cargo_holder.cargo += O + LAZYADD(chassis.cargo, O) O.loc = chassis O.anchored = FALSE occupant_message(span_notice("[target] successfully loaded.")) - log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") + log_message("Loaded [O]. Cargo compartment capacity: [chassis.cargo_capacity - length(chassis.cargo)]") return TRUE else O.anchored = initial(O.anchored) @@ -47,7 +40,7 @@ else occupant_message(span_warning("[target] is firmly secured!")) return FALSE - else if(istype(target,/mob/living)) + if(isliving(target)) var/mob/living/M = target if(chassis.occupant.a_intent == INTENT_HARM) M.take_overall_damage(dam_force) @@ -64,15 +57,15 @@ occupant_message(span_warning("БЕГИ, ИДИОТ, НЕ ВРЕМЯ ДЛЯ ОБНИМАШЕК!!!")) return FALSE if(!M.anchored) - if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) + if(length(chassis.cargo) < chassis.cargo_capacity) chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") M.anchored = TRUE if(do_after_cooldown(target)) - cargo_holder.cargo += M + LAZYADD(chassis.cargo, M) M.loc = chassis M.anchored = FALSE occupant_message(span_notice("[target] successfully loaded.")) - log_message("Loaded [M]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") + log_message("Loaded [M]. Cargo compartment capacity: [chassis.cargo_capacity - length(chassis.cargo)]") return TRUE else M.anchored = initial(M.anchored) @@ -99,72 +92,48 @@ /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(atom/target) if(!action_checks(target)) return FALSE - if(!cargo_holder) + if(!chassis) return FALSE - if(istype(target,/obj)) - var/obj/O = target - if(!O.anchored) - if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) - chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") - O.anchored = TRUE - if(do_after_cooldown(target)) - cargo_holder.cargo += O - O.loc = chassis - O.anchored = FALSE - occupant_message(span_notice("[target] successfully loaded.")) - log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") - return TRUE - else - O.anchored = initial(O.anchored) - return FALSE - else - occupant_message(span_warning("Not enough room in cargo compartment!")) - return FALSE - else - occupant_message(span_warning("[target] is firmly secured!")) - return FALSE - else if(istype(target,/mob/living)) - var/mob/living/M = target - if(M.stat == DEAD) - return FALSE - if(chassis.occupant.a_intent == INTENT_HARM) - target.visible_message(span_danger("[chassis] destroys [target] in an unholy fury."), - span_userdanger("[chassis] destroys [target] in an unholy fury.")) - M.gib() - /*if(chassis.occupant.a_intent == INTENT_DISARM) - target.visible_message("[chassis] rips [target]'s arms off.", - "[chassis] rips [target]'s arms off.")*/ - else - step_away(M,chassis) - target.visible_message("[chassis] tosses [target] like a piece of paper.") - start_cooldown() - return TRUE + if(!isliving(target)) + return ..() + + var/mob/living/M = target + if(M.stat == DEAD) + return FALSE + if(chassis.occupant.a_intent == INTENT_HARM) + target.visible_message(span_danger("[chassis] destroys [target] in an unholy fury."), + span_userdanger("[chassis] destroys [target] in an unholy fury.")) + M.gib() + /*if(chassis.occupant.a_intent == INTENT_DISARM) + target.visible_message("[chassis] rips [target]'s arms off.", + "[chassis] rips [target]'s arms off.")*/ + else + step_away(M,chassis) + target.visible_message("[chassis] tosses [target] like a piece of paper.") + start_cooldown() + return TRUE /obj/item/mecha_parts/mecha_equipment/cargo_upgrade name = "Cargo expansion upgrade" desc = "A working exosuit module that allows you to turn your Ripley into a hearse, zoo, or armored personnel carrier." icon_state = "tesla" origin_tech = "materials=5;bluespace=6;" - selectable = FALSE + selectable = MODULE_SELECTABLE_NONE /obj/item/mecha_parts/mecha_equipment/cargo_upgrade/can_attach(obj/mecha/M) if(..()) - if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat/lockersyndie)) + if(istype(M, /obj/mecha/working)) return TRUE return FALSE -/obj/item/mecha_parts/mecha_equipment/cargo_upgrade/attach_act() - if(istype(src.loc, /obj/mecha/working)) - var/obj/mecha/working/W = src.loc - W.cargo_expanded = TRUE - W.cargo_capacity = 40 +/obj/item/mecha_parts/mecha_equipment/cargo_upgrade/attach_act(obj/mecha/M) + chassis.cargo_expanded = TRUE + chassis.cargo_capacity = 40 -/obj/item/mecha_parts/mecha_equipment/cargo_upgrade/detach_act() - if(istype(src.loc, /obj/mecha/working)) - var/obj/mecha/working/R = src.loc - R.cargo_expanded = FALSE - R.cargo_capacity = initial(R.cargo_capacity) +/obj/item/mecha_parts/mecha_equipment/cargo_upgrade/detach_act(obj/mecha/M) + chassis.cargo_expanded = FALSE + chassis.cargo_capacity = initial(chassis.cargo_capacity) /obj/item/mecha_parts/mecha_equipment/rcd name = "Mounted RCD" @@ -323,7 +292,7 @@ /obj/item/mecha_parts/mecha_equipment/multimodule/attach_act(obj/mecha/M) for(var/thing in modules) var/obj/item/mecha_parts/mecha_equipment/module = modules[thing] - module.chassis = src.chassis + module.chassis = chassis module.attach_act(M) /obj/item/mecha_parts/mecha_equipment/multimodule/detach_act() @@ -589,7 +558,7 @@ sleep(2) /obj/item/mecha_parts/mecha_equipment/extinguisher/get_module_equip_info() - return " \[[src.reagents.total_volume]\]" + return " \[[reagents.total_volume]\]" /obj/item/mecha_parts/mecha_equipment/extinguisher/on_reagent_change() return @@ -633,7 +602,7 @@ occupant_message(span_notice("[src] is projecting at max capacity!")) return FALSE else - playsound(src.loc, 'sound/machines/click.ogg', 20, 1) + playsound(loc, 'sound/machines/click.ogg', 20, 1) if(creation_time) holocreator_busy = TRUE if(!do_after_mecha(target, creation_time)) @@ -756,6 +725,6 @@ if(!emagged) items_list.Add(new emag_item) emagged = TRUE - user.visible_message(span_warning("Sparks fly out of [src.name]"), span_notice("You short out the safeties on [src.name].")) - playsound(src.loc, 'sound/effects/sparks4.ogg', 50, TRUE) + user.visible_message(span_warning("Sparks fly out of [name]"), span_notice("You short out the safeties on [name].")) + playsound(loc, 'sound/effects/sparks4.ogg', 50, TRUE) update_equip_info() diff --git a/code/game/mecha/makeshift/lockermech.dm b/code/game/mecha/makeshift/lockermech.dm index e1589c81c80..d5f1ac563a6 100644 --- a/code/game/mecha/makeshift/lockermech.dm +++ b/code/game/mecha/makeshift/lockermech.dm @@ -12,64 +12,9 @@ max_equip = 2 //You only have two arms and the control system is shitty wreckage = null mech_enter_time = 20 - var/list/cargo = list() - var/cargo_capacity = 5 // you can fit a few things in this locker but not much. -/obj/mecha/makeshift/Topic(href, href_list) - ..() - if(href_list["drop_from_cargo"]) - var/obj/O = locate(sanitize(href_list["drop_from_cargo"])) - if(O && (O in cargo)) - occupant_message("You unload [O].") - O.forceMove(loc) - cargo -= O - log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]") - return - -/obj/mecha/makeshift/go_out() - ..() - update_icon() + cargo_capacity = 5 // you can fit a few things in this locker but not much. -/obj/mecha/makeshift/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() - - -/obj/mecha/makeshift/Exit(atom/movable/O) - if(O in cargo) - return 0 - return ..() - -// /obj/mecha/makeshift/contents_explosion(severity, target) -// for(var/X in cargo) -// var/obj/O = X -// if(prob(30/severity)) -// cargo -= O -// O.forceMove(loc) -// . = ..() - -/obj/mecha/makeshift/get_stats_part() - var/output = ..() - output += "Cargo Compartment Contents:
    " - if(cargo.len) - for(var/obj/O in cargo) - output += "Unload : [O]
    " - else - output += "Nothing" - output += "
    " - return output - -// /obj/mecha/makeshift/relay_container_resist(mob/living/user, obj/O) -// to_chat(user, "You lean on the back of [O] and start pushing so it falls out of [src].") -// if(do_after(user, 10, target = O))//Its a fukken locker -// if(!user || user.stat != CONSCIOUS || user.loc != src || O.loc != src ) -// return -// to_chat(user, "You successfully pushed [O] out of [src]!") -// O.loc = loc -// cargo -= O -// else -// if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. -// to_chat(user, "You fail to push [O] out of [src]!") /obj/mecha/makeshift/Destroy() new /obj/structure/closet(loc) @@ -88,18 +33,10 @@ internal_damage_threshold = 30 deflect_chance = 20 force = 20 - maint_access = 0 mech_enter_time = 20 max_equip = 4 wreckage = null -/obj/mecha/combat/lockersyndie/go_out() - ..() - update_icon() - -/obj/mecha/combat/lockersyndie/moved_inside(mob/living/carbon/human/H) - ..() - update_icon() /obj/mecha/combat/lockersyndie/add_cell() cell = new /obj/item/stock_parts/cell/high/slime(src) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 9937f4e1cbd..3e84afeff21 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -4,9 +4,9 @@ name = "Mecha" desc = "Exosuit" icon = 'icons/obj/mecha/mecha.dmi' - density = 1 //Dense. To raise the heat. - opacity = 1 ///opaque. Menacing. - anchored = 1 //no pulling around. + density = TRUE //Dense. To raise the heat. + opacity = TRUE ///opaque. Menacing. + anchored = TRUE //no pulling around. resistance_flags = FIRE_PROOF | ACID_PROOF layer = MOB_LAYER //icon draw layer infra_luminosity = 15 //byond implementation is bugged. @@ -18,7 +18,7 @@ var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming. var/initial_icon = null //Mech type for resetting icon. Only used for reskinning kits (see custom items) var/can_move = 0 // time of next allowed movement - var/mech_enter_time = 40 // Entering mecha time + var/mech_enter_time = 4 SECONDS // Entering mecha time var/mob/living/carbon/occupant = null var/step_in = 10 //make a step in step_in/10 sec. var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. @@ -31,10 +31,9 @@ var/state = 0 var/list/log = new var/last_message = 0 - var/add_req_access = 1 - var/maint_access = 1 + var/add_req_access = TRUE + var/maint_access = TRUE var/dna //dna-locking the mech - var/list/proc_res = list() //stores proc owners, like proc_res["functionname"] = owner reference var/datum/effect_system/spark_spread/spark_system = new var/lights = 0 var/lights_power = 6 @@ -42,10 +41,15 @@ var/emagged = FALSE var/frozen = FALSE var/repairing = FALSE - var/cargo_expanded = FALSE // for wide cargo module + /// The internal storage of the exosuit. For the cargo module + var/list/cargo + /// You can fit a few things in this mecha but not much. + var/cargo_capacity = 1 + /// for wide cargo module + var/cargo_expanded = FALSE //inner atmos - var/use_internal_tank = 0 + var/use_internal_tank = FALSE var/internal_tank_valve = ONE_ATMOSPHERE var/obj/machinery/portable_atmospherics/canister/internal_tank var/datum/gas_mixture/cabin_air @@ -83,8 +87,8 @@ var/destruction_sleep_duration = 2 SECONDS //Time that mech pilot is put to sleep for if mech is destroyed - var/melee_cooldown = 10 - var/melee_can_hit = 1 + var/melee_cooldown = 1 SECONDS + var/melee_can_hit = TRUE // Action vars var/defence_mode = FALSE @@ -93,15 +97,15 @@ var/leg_overload_coeff = 100 var/thrusters_active = FALSE var/smoke = 5 - var/smoke_ready = 1 - var/smoke_cooldown = 100 + var/smoke_ready = TRUE + var/smoke_cooldown = 10 SECONDS var/zoom_mode = FALSE var/phasing = FALSE var/phasing_energy_drain = 200 var/phase_state = "" //icon_state when phasing var/wall_type = /obj/effect/forcefield/mecha //energywall icon_state - var/wall_ready = 1 - var/wall_cooldown = 200 + var/wall_ready = TRUE + var/wall_cooldown = 20 SECONDS var/large_wall = FALSE // Strafe variables @@ -182,19 +186,19 @@ var/integrity = obj_integrity * 100 / max_integrity switch(integrity) if(85 to 100) - . += "It's fully intact." + . += span_notice("It's fully intact.") if(65 to 85) - . += "It's slightly damaged." + . += span_notice("It's slightly damaged.") if(45 to 65) - . += "It's badly damaged." + . += span_notice("It's badly damaged.") if(25 to 45) - . += "It's heavily damaged." + . += span_notice("It's heavily damaged.") else - . += "It's falling apart." + . += span_warning("It's falling apart.") if(equipment && equipment.len) - . += "It's equipped with:" + . += span_notice("It's equipped with:") for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) - . += "[bicon(ME)] [ME]" + . += span_notice("[bicon(ME)] [ME]") /obj/mecha/hear_talk(mob/M, list/message_pieces) if(M == occupant && radio.broadcasting) @@ -206,10 +210,10 @@ if(user.incapacitated()) return if(phasing) - occupant_message("Unable to interact with objects while phasing.") + occupant_message(span_warning("Unable to interact with objects while phasing.")) return if(state) - occupant_message("Maintenance protocols in effect.") + occupant_message(span_warning("Maintenance protocols in effect.")) return if(!get_charge()) return @@ -221,12 +225,12 @@ if(!target.Adjacent(src)) if(selected && selected.is_ranged()) if(selected.harmful) - to_chat(L, "You don't want to harm other living beings!") + to_chat(L, span_warning("You don't want to harm other living beings!")) return selected.action(target, params) else if(selected && selected.is_melee()) if(ishuman(target) && selected.harmful) - to_chat(user, "You don't want to harm other living beings!") + to_chat(user, span_warning("You don't want to harm other living beings!")) return var/dir_to_target = get_dir(src, target) @@ -241,15 +245,15 @@ if(!target.Adjacent(src)) if(selected && selected.is_ranged()) if(HAS_TRAIT(L, TRAIT_PACIFISM) && selected.harmful) - to_chat(L, "You don't want to harm other living beings!") + to_chat(L, span_warning("You don't want to harm other living beings!")) return if(user.mind?.martial_art?.no_guns) - to_chat(L, "[L.mind.martial_art.no_guns_message]") + to_chat(L, span_warning("[L.mind.martial_art.no_guns_message]")) return selected.action(target, params) else if(selected && selected.is_melee()) if(isliving(target) && selected.harmful && HAS_TRAIT(L, TRAIT_PACIFISM)) - to_chat(user, "You don't want to harm other living beings!") + to_chat(user, span_warning("You don't want to harm other living beings!")) return selected.action(target, params) else @@ -258,9 +262,17 @@ if(!melee_can_hit || !isatom(target)) return target.mech_melee_attack(src) - melee_can_hit = 0 - spawn(melee_cooldown) - melee_can_hit = 1 + melee_can_hit = FALSE + addtimer(CALLBACK(src, PROC_REF(melee_hit_ready)), melee_cooldown) + +/obj/mecha/proc/melee_hit_ready() + melee_can_hit = TRUE + +/obj/mecha/proc/set_smoke_ready() + smoke_ready = TRUE + +/obj/mecha/proc/set_wall_ready() + wall_ready = TRUE /obj/mecha/proc/mech_toxin_damage(mob/living/target) playsound(src, 'sound/effects/spray2.ogg', 50, 1) @@ -280,7 +292,7 @@ * * direction - input direction we need to convert */ /obj/mecha/proc/convert_diagonal_dir(direction) - switch(src.dir) + switch(dir) if(NORTH, SOUTH) switch(direction) if(NORTHEAST, SOUTHEAST) @@ -306,7 +318,7 @@ */ /obj/mecha/proc/is_opposite_dir(direction) . = FALSE - switch(src.dir) + switch(dir) if(NORTH) return direction == SOUTH if(SOUTH) @@ -319,7 +331,7 @@ ////////////////////////////////// //////// Movement procs //////// ////////////////////////////////// -/obj/mecha/Process_Spacemove(var/movement_dir = 0) +/obj/mecha/Process_Spacemove(movement_dir = 0) . = ..() if(.) return TRUE @@ -334,7 +346,7 @@ if(istype(backup) && movement_dir && !backup.anchored) if(backup.newtonian_move(turn(movement_dir, 180))) if(occupant) - to_chat(occupant, "You push off of [backup] to propel yourself.") + to_chat(occupant, span_info("You push off of [backup] to propel yourself.")) return TRUE /obj/mecha/relaymove(mob/user, direction) @@ -342,15 +354,15 @@ return FALSE if(user != occupant) //While not "realistic", this piece is player friendly. user.forceMove(get_turf(src)) - to_chat(user, "You climb out from [src].") + to_chat(user, span_notice("You climb out from [src].")) return FALSE if(connected_port) if(world.time - last_message > 20) - occupant_message("Unable to move while connected to the air system port!") + occupant_message(span_warning("Unable to move while connected to the air system port!")) last_message = world.time return FALSE if(state) - occupant_message("Maintenance protocols in effect.") + occupant_message(span_danger("Maintenance protocols in effect.")) return FALSE return domove(direction) @@ -368,12 +380,12 @@ return FALSE if(defence_mode) if(world.time - last_message > 20) - occupant_message("Unable to move while in defence mode.") + occupant_message(span_danger("Unable to move while in defence mode.")) last_message = world.time return FALSE if(zoom_mode) if(world.time - last_message > 20) - occupant_message("Unable to move while in zoom mode.") + occupant_message(span_danger("Unable to move while in zoom mode.")) last_message = world.time return FALSE @@ -601,11 +613,11 @@ internal_damage &= ~int_dam_flag switch(int_dam_flag) if(MECHA_INT_TEMP_CONTROL) - occupant_message("Life support system reactivated.") + occupant_message(span_notice("Life support system reactivated.")) if(MECHA_INT_FIRE) - occupant_message("Internal fire extinquished.") + occupant_message(span_notice("Internal fire extinquished.")) if(MECHA_INT_TANK_BREACH) - occupant_message("Damaged internal tank has been sealed.") + occupant_message(span_notice("Damaged internal tank has been sealed.")) diag_hud_set_mechstat() @@ -621,7 +633,7 @@ return facing_modifiers[MECHA_SIDE_ARMOUR] if(225, 180, 135) return facing_modifiers[MECHA_FRONT_ARMOUR] - return 1 //always return non-0 + return TRUE //always return non-0 /obj/mecha/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() @@ -635,13 +647,13 @@ else check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT)) if((. >= 5 || prob(33)) && !(. == 1 && leg_overload_mode)) //If it takes 1 damage and leg_overload_mode is true, do not say TAKING DAMAGE! to the user several times a second. - occupant_message("Taking damage!") + occupant_message(span_userdanger("Taking damage!")) log_message("Took [damage_amount] points of damage. Damage type: [damage_type]") /obj/mecha/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) . = ..() if(!damage_amount) - return 0 + return FALSE var/booster_deflection_modifier = 1 var/booster_damage_modifier = 1 if(damage_flag == "bullet" || damage_flag == "laser" || damage_flag == "energy") @@ -662,9 +674,9 @@ booster_damage_modifier /= facing_modifier booster_deflection_modifier *= facing_modifier if(prob(deflect_chance * booster_deflection_modifier)) - visible_message("[src]'s armour deflects the attack!") + visible_message(span_danger("[src]'s armour deflects the attack!")) log_message("Armor saved.") - return 0 + return FALSE if(.) . *= booster_damage_modifier @@ -672,14 +684,14 @@ user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src, ATTACK_EFFECT_PUNCH) playsound(loc, 'sound/weapons/tap.ogg', 40, 1, -1) - user.visible_message("[user] hits [name]. Nothing happens", "You hit [name] with no visible effect.") + user.visible_message(span_notice("[user] hits [name]. Nothing happens."), span_notice("You hit [name] with no visible effect.")) log_message("Attack by hand/paw. Attacker - [user].") /obj/mecha/attack_alien(mob/living/carbon/alien/user) log_message("Attack by alien. Attacker - [user].", TRUE) add_attack_logs(user, OCCUPANT_LOGGING, "Alien attacked mech [src]") - playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE) + playsound(loc, 'sound/weapons/slash.ogg', 100, TRUE) attack_generic(user, user.obj_damage, BRUTE, MELEE, 0, user.armour_penetration) /obj/mecha/attack_animal(mob/living/simple_animal/user) @@ -688,9 +700,9 @@ user.custom_emote(EMOTE_VISIBLE, "[user.friendly] [src].") return FALSE else - var/play_soundeffect = 1 + var/play_soundeffect = TRUE if(user.environment_smash) - play_soundeffect = 0 + play_soundeffect = FALSE playsound(src, 'sound/effects/bang.ogg', 50, TRUE) var/animal_damage = rand(user.melee_damage_lower,user.melee_damage_upper) if(user.obj_damage) @@ -736,15 +748,27 @@ if(occupant) occupant.ex_act(severity) + for(var/X in cargo) + var/atom/movable/cargo_thing = X + if(prob(30 / severity)) + cargo -= cargo_thing + cargo_thing.forceMove(drop_location()) + /obj/mecha/handle_atom_del(atom/A) if(A == occupant) occupant = null - icon_state = initial(icon_state)+"-open" + update_icon(UPDATE_ICON_STATE) setDir(dir_in) if(A in trackers) trackers -= A /obj/mecha/Destroy() + + for(var/atom/movable/cargo_thing as anything in cargo) + cargo -= cargo_thing + cargo_thing.forceMove(drop_location()) + step_rand(cargo_thing) + if(occupant) occupant.SetSleeping(destruction_sleep_duration) go_out() @@ -810,9 +834,9 @@ if(!user.drop_from_active_hand()) return E.attach(src) - user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") + user.visible_message("[user] attaches [W] to [src].", span_notice("You attach [W] to [src].")) else - to_chat(user, "You were unable to attach [W] to [src]!") + to_chat(user, span_warning("You were unable to attach [W] to [src]!")) return if(W.GetID()) @@ -822,9 +846,9 @@ output_maintenance_dialog(id_card, user) return else - to_chat(user, "Invalid ID: Access denied.") + to_chat(user, span_warning("Invalid ID: Access denied.")) else - to_chat(user, "Maintenance protocols disabled by operator.") + to_chat(user, span_warning("Maintenance protocols disabled by operator.")) else if(istype(W, /obj/item/stack/cable_coil)) if(state == 3 && hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) @@ -841,19 +865,19 @@ if(!cell) if(!user.drop_transfer_item_to_loc(W, src)) return - to_chat(user, "You install the powercell.") + to_chat(user, span_notice("You install the powercell.")) cell = W log_message("Powercell installed") else - to_chat(user, "There's already a powercell installed.") + to_chat(user, span_notice("There's already a powercell installed.")) return else if(istype(W, /obj/item/mecha_parts/mecha_tracking)) if(!user.drop_transfer_item_to_loc(W, src)) - to_chat(user, "\the [W] is stuck to your hand, you cannot put it in \the [src]") + to_chat(user, span_notice("\the [W] is stuck to your hand, you cannot put it in \the [src].")) return trackers += W - user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") + user.visible_message("[user] attaches [W] to [src].", span_notice("You attach [W] to [src].")) diag_hud_set_mechtracking() return @@ -867,7 +891,7 @@ for(var/type in P.allowed_types) if(type == initial_icon) - found = 1 + found = TRUE break if(!found) @@ -879,20 +903,20 @@ name = P.new_name desc = P.new_desc initial_icon = P.new_icon - reset_icon() + update_icon(UPDATE_ICON_STATE) user.temporarily_remove_item_from_inventory(P) qdel(P) else if(istype(W, /obj/item/mecha_modkit)) if(occupant) - to_chat(user, "You can't access the mech's modification port while it is occupied.") + to_chat(user, span_notice("You can't access the mech's modification port while it is occupied.")) return var/obj/item/mecha_modkit/M = W if(do_after_once(user, M.install_time, target = src)) M.install(src, user) else - to_chat(user, "You stop installing [M].") + to_chat(user, span_notice("You stop installing [M].")) else if(W.force) @@ -914,16 +938,16 @@ to_chat(user, "You close the hatch to the power unit") else if(ishuman(occupant)) user.visible_message("[user] begins levering out the driver from the [src].", "You begin to lever out the driver from the [src].") - to_chat(occupant, "[user] is prying you out of the exosuit!") + to_chat(occupant, span_warning("[user] is prying you out of the exosuit!")) if(I.use_tool(src, user, 80, volume = I.tool_volume)) - user.visible_message("[user] pries the driver out of the [src]!", "You finish removing the driver from the [src]!") + user.visible_message(span_notice("[user] pries the driver out of the [src]!"), span_notice("You finish removing the driver from the [src]!")) go_out() else // Since having maint protocols available is controllable by the MMI, I see this as a consensual way to remove an MMI without destroying the mech user.visible_message("[user] begins levering out the MMI from the [src].", "You begin to lever out the MMI from the [src].") - to_chat(occupant, "[user] is prying you out of the exosuit!") + to_chat(occupant, span_warning("[user] is prying you out of the exosuit!")) if(I.use_tool(src, user, 80, volume = I.tool_volume) && pilot_is_mmi()) - user.visible_message("[user] pries the MMI out of the [src]!", "You finish removing the MMI from the [src]!") + user.visible_message(span_notice("[user] pries the MMI out of the [src]!"), span_notice("You finish removing the MMI from the [src]!")) go_out() /obj/mecha/screwdriver_act(mob/user, obj/item/I) @@ -936,16 +960,16 @@ return if(hasInternalDamage(MECHA_INT_TEMP_CONTROL)) clearInternalDamage(MECHA_INT_TEMP_CONTROL) - to_chat(user, "You repair the damaged temperature controller.") + to_chat(user, span_notice("You repair the damaged temperature controller.")) else if(state==3 && cell) cell.forceMove(loc) cell = null state = 4 - to_chat(user, "You unscrew and pry out the powercell.") + to_chat(user, span_notice("You unscrew and pry out the powercell.")) log_message("Powercell removed") else if(state==4 && cell) state=3 - to_chat(user, "You screw the cell in place.") + to_chat(user, span_notice("You screw the cell in place.")) /obj/mecha/wrench_act(mob/user, obj/item/I) if(state != 1 && state != 2) @@ -967,30 +991,30 @@ if(!I.tool_use_check(user, 0)) return if((obj_integrity >= max_integrity) && !internal_damage) - to_chat(user, "[src] is at full integrity!") + to_chat(user, span_notice("[src] is at full integrity!")) return if(repairing) - to_chat(user, "[src] is currently being repaired!") + to_chat(user, span_notice("[src] is currently being repaired!")) return if(state == 0) // If maint protocols are not active, the state is zero - to_chat(user, "[src] can not be repaired without maintenance protocols active!") + to_chat(user, span_warning("[src] can not be repaired without maintenance protocols active!")) return WELDER_ATTEMPT_REPAIR_MESSAGE repairing = TRUE if(I.use_tool(src, user, 15, volume = I.tool_volume)) if(internal_damage & MECHA_INT_TANK_BREACH) clearInternalDamage(MECHA_INT_TANK_BREACH) - user.visible_message("[user] repairs the damaged gas tank.", "You repair the damaged gas tank.") + user.visible_message(span_notice("[user] repairs the damaged gas tank."), span_notice("You repair the damaged gas tank.")) else if(obj_integrity < max_integrity) - user.visible_message("[user] repairs some damage to [name].", "You repair some damage to [name].") + user.visible_message(span_notice("[user] repairs some damage to [name]."), span_notice("You repair some damage to [name].")) obj_integrity += min(10, max_integrity - obj_integrity) else - to_chat(user, "[src] is at full integrity!") + to_chat(user, span_notice("[src] is at full integrity!")) repairing = FALSE /obj/mecha/mech_melee_attack(obj/mecha/M) if(!has_charge(melee_energy_drain)) - return 0 + return FALSE use_power(melee_energy_drain) if(M.damtype == BRUTE || M.damtype == BURN) add_attack_logs(M.occupant, src, "Mecha-attacked with [M] ([uppertext(M.occupant.a_intent)]) ([uppertext(M.damtype)])") @@ -998,7 +1022,7 @@ /obj/mecha/emag_act(mob/user) if(user) - to_chat(user, "[src]'s ID slot rejects the card.") + to_chat(user, span_warning("[src]'s ID slot rejects the card.")) ///////////////////////////////////// @@ -1012,26 +1036,26 @@ if(user.can_dominate_mechs) examine(user) //Get diagnostic information! for(var/obj/item/mecha_parts/mecha_tracking/B in trackers) - to_chat(user, "Warning: Tracking Beacon detected. Enter at your own risk. Beacon Data:") + to_chat(user, span_danger("Warning: Tracking Beacon detected. Enter at your own risk. Beacon Data:")) to_chat(user, "[B.get_mecha_info_text()]") break //Nothing like a big, red link to make the player feel powerful! - to_chat(user, "ASSUME DIRECT CONTROL?
    ") + to_chat(user, "[span_userdanger("ASSUME DIRECT CONTROL?")]
    ") else examine(user) if(occupant) - user << "This exosuit has a pilot and cannot be controlled." + to_chat(user, span_warning("This exosuit has a pilot and cannot be controlled.")) return var/can_control_mech = FALSE for(var/obj/item/mecha_parts/mecha_tracking/ai_control/A in trackers) can_control_mech = TRUE - to_chat(user, "[bicon(src)] Status of [name]:\n\ + to_chat(user, "[span_notice("[bicon(src)] Status of [name]:")]\n\ [A.get_mecha_info_text()]") break if(!can_control_mech) - to_chat(user, "You cannot control exosuits without AI control beacons installed.") + to_chat(user, span_warning("You cannot control exosuits without AI control beacons installed.")) return - to_chat(user, "Take control of exosuit?
    ") + to_chat(user, "[span_boldnotice("Take control of exosuit?")]
    ") /obj/mecha/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) if(!..()) @@ -1041,49 +1065,52 @@ switch(interaction) if(AI_TRANS_TO_CARD) //Upload AI from mech to AI card. if(!maint_access) //Mech must be in maint mode to allow carding. - to_chat(user, "[name] must have maintenance protocols active in order to allow a transfer.") + to_chat(user, span_warning("[name] must have maintenance protocols active in order to allow a transfer.")) return AI = occupant if(!AI || !isAI(occupant)) //Mech does not have an AI for a pilot - to_chat(user, "No AI detected in the [name] onboard computer.") + to_chat(user, span_warning("No AI detected in the [name] onboard computer.")) return if(AI.mind.special_role) //Malf AIs cannot leave mechs. Except through death. - to_chat(user, "ACCESS DENIED.") + to_chat(user, span_boldannounce("ACCESS DENIED.")) return AI.aiRestorePowerRoutine = 0//So the AI initially has power. - AI.control_disabled = 1 - AI.aiRadio.disabledAi = 1 + AI.control_disabled = TRUE + AI.aiRadio.disabledAi = TRUE AI.forceMove(card) occupant = null AI.controlled_mech = null AI.remote_control = null - icon_state = reset_icon(icon_state)+"-open" + update_icon(UPDATE_ICON_STATE) to_chat(AI, "You have been downloaded to a mobile storage device. Wireless connection offline.") - to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.") + to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) removed from [name] and stored within local memory.") if(AI_MECH_HACK) //Called by AIs on the mech + if(occupant) + if(AI.can_dominate_mechs) //Oh, I am sorry, were you using that? + to_chat(AI, span_warning("Pilot detected! Forced ejection initiated!")) + to_chat(occupant, span_danger("You have been forcibly ejected!")) + go_out(TRUE) //IT IS MINE, NOW. SUCK IT, RD! + else + to_chat(AI, span_warning("This exosuit has a pilot and cannot be controlled.")) + return AI.linked_core = new /obj/structure/AIcore/deactivated(AI.loc) - if(AI.can_dominate_mechs) - if(occupant) //Oh, I am sorry, were you using that? - to_chat(AI, "Pilot detected! Forced ejection initiated!") - to_chat(occupant, "You have been forcibly ejected!") - go_out(1) //IT IS MINE, NOW. SUCK IT, RD! ai_enter_mech(AI, interaction) if(AI_TRANS_FROM_CARD) //Using an AI card to upload to a mech. AI = locate(/mob/living/silicon/ai) in card if(!AI) - to_chat(user, "There is no AI currently installed on this device.") + to_chat(user, span_warning("There is no AI currently installed on this device.")) return else if(AI.stat || !AI.client) - to_chat(user, "[AI.name] is currently unresponsive, and cannot be uploaded.") + to_chat(user, span_warning("[AI.name] is currently unresponsive, and cannot be uploaded.")) return else if(occupant || dna) //Normal AIs cannot steal mechs! - to_chat(user, "Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"].") + to_chat(user, span_warning("Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"].")) return - AI.control_disabled = 0 - AI.aiRadio.disabledAi = 0 - to_chat(user, "Transfer successful: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") + AI.control_disabled = FALSE + AI.aiRadio.disabledAi = FALSE + to_chat(user, "[span_boldnotice("Transfer successful")]: [AI.name] ([rand(1000,9999)].exe) installed and executed successfully. Local copy has been removed.") ai_enter_mech(AI, interaction) //Hack and From Card interactions share some code, so leave that here for both to use. @@ -1091,18 +1118,18 @@ AI.aiRestorePowerRoutine = 0 AI.forceMove(src) occupant = AI - icon_state = reset_icon(icon_state) + update_icon(UPDATE_ICON_STATE) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!hasInternalDamage()) occupant << sound(nominalsound, volume = 50) AI.cancel_camera() AI.controlled_mech = src AI.remote_control = src - AI.canmove = 1 //Much easier than adding AI checks! Be sure to set this back to 0 if you decide to allow an AI to leave a mech somehow. - AI.can_shunt = 0 //ONE AI ENTERS. NO AI LEAVES. - to_chat(AI, "[AI.can_dominate_mechs ? "Takeover of [name] complete! You are now permanently loaded onto the onboard computer. Do not attempt to leave the station sector!" \ - : "You have been uploaded to a mech's onboard computer."]") - to_chat(AI, "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.") + AI.canmove = TRUE //Much easier than adding AI checks! Be sure to set this back to FALSE if you decide to allow an AI to leave a mech somehow. + AI.can_shunt = FALSE //ONE AI ENTERS. NO AI LEAVES. + to_chat(AI, "[AI.can_dominate_mechs ? span_announce("Takeover of [name] complete! You are now permanently loaded onto the onboard computer. Do not attempt to leave the station sector!") \ + : span_notice("You have been uploaded to a mech's onboard computer.")]") + to_chat(AI, span_boldnotice("Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.")) if(interaction == AI_TRANS_FROM_CARD) GrantActions(AI, FALSE) else @@ -1149,11 +1176,11 @@ /obj/mecha/proc/connect(obj/machinery/atmospherics/unary/portables_connector/new_port) //Make sure not already connected to something else if(connected_port || !istype(new_port) || new_port.connected_device) - return 0 + return FALSE //Make sure are close enough for a valid connection if(new_port.loc != loc) - return 0 + return FALSE //Perform the connection connected_port = new_port @@ -1165,18 +1192,18 @@ occupant.throw_alert("mechaport_d", /obj/screen/alert/mech_port_disconnect) log_message("Connected to gas port.") - return 1 + return TRUE /obj/mecha/proc/disconnect() if(!connected_port) - return 0 + return FALSE connected_port.connected_device = null connected_port = null log_message("Disconnected from gas port.") if(occupant) occupant.clear_alert("mechaport_d") - return 1 + return TRUE /obj/mecha/portableConnectorReturnAir() return internal_tank.return_air() @@ -1192,55 +1219,60 @@ /obj/mecha/proc/toggle_internal_tank() internals_action.Trigger() -/obj/mecha/MouseDrop_T(mob/M, mob/user) +/obj/mecha/MouseDrop_T(mob/M, mob/user, params) if(frozen) - to_chat(user, "Do not enter Admin-Frozen mechs.") - return + to_chat(user, span_warning("Do not enter Admin-Frozen mechs.")) + return TRUE if(user.incapacitated()) return if(user != M) return log_message("[user] tries to move in.") if(occupant) - to_chat(user, "The [src] is already occupied!") + to_chat(user, span_warning("The [src] is already occupied!")) log_append_to_last("Permission denied.") - return + return TRUE var/passed if(dna) if(ishuman(user)) if(user.dna.unique_enzymes == dna) - passed = 1 + passed = TRUE else if(operation_allowed(user)) - passed = 1 + passed = TRUE if(!passed) - to_chat(user, "Access denied.") + to_chat(user, span_warning("Access denied.")) log_append_to_last("Permission denied.") - return + return TRUE if(user.buckled) - to_chat(user, "You are currently buckled and cannot move.") + to_chat(user, span_warning("You are currently buckled and cannot move.")) log_append_to_last("Permission denied.") - return + return TRUE if(user.has_buckled_mobs()) //mob attached to us - to_chat(user, "You can't enter the exosuit with other creatures attached to you!") - return + to_chat(user, span_warning("You can't enter the exosuit with other creatures attached to you!")) + return TRUE - visible_message("[user] starts to climb into [src]") + visible_message(span_notice("[user] starts to climb into [src]")) + INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/mecha, put_in), user) + return TRUE - if(do_after(user, src.mech_enter_time * gettoolspeedmod(user), target = src)) + +/obj/mecha/proc/put_in(mob/user) + if(do_after(user, mech_enter_time * gettoolspeedmod(user), target = src)) if(obj_integrity <= 0) - to_chat(user, "You cannot get in the [name], it has been destroyed!") + to_chat(user, span_warning("You cannot get in the [name], it has been destroyed!")) else if(occupant) - to_chat(user, "[occupant] was faster! Try better next time, loser.") + to_chat(user, span_danger("[occupant] was faster! Try better next time, loser.")) else if(user.buckled) - to_chat(user, "You can't enter the exosuit while buckled.") + to_chat(user, span_warning("You can't enter the exosuit while buckled.")) else if(user.has_buckled_mobs()) - to_chat(user, "You can't enter the exosuit with other creatures attached to you!") + to_chat(user, span_warning("You can't enter the exosuit with other creatures attached to you!")) else moved_inside(user) else - to_chat(user, "You stop entering the exosuit!") + to_chat(user, span_warning("You stop entering the exosuit!")) + -/obj/mecha/proc/moved_inside(var/mob/living/carbon/human/H as mob) +/obj/mecha/proc/moved_inside(var/mob/living/carbon/human/H) if(H && H.client && (H in range(1))) occupant = H H.stop_pulling() @@ -1249,7 +1281,7 @@ GrantActions(H, human_occupant = 1) forceMove(loc) log_append_to_last("[H] moved in as pilot.") - icon_state = reset_icon() + update_icon(UPDATE_ICON_STATE) dir = dir_in playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) if(!activated) @@ -1265,28 +1297,28 @@ /obj/mecha/proc/mmi_move_inside(var/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!") + to_chat(user, span_warning("Consciousness matrix not detected!")) return FALSE else if(mmi_as_oc.brainmob.stat) - to_chat(user, "Beta-rhythm below acceptable level!") + to_chat(user, span_warning("Beta-rhythm below acceptable level!")) return FALSE else if(occupant) - to_chat(user, "Occupant detected!") + to_chat(user, span_warning("Occupant detected!")) return FALSE else if(dna && dna != mmi_as_oc.brainmob.dna.unique_enzymes) - to_chat(user, "Access denied. [name] is secured with a DNA lock.") + to_chat(user, span_warning("Access denied. [name] is secured with a DNA lock.")) return FALSE else if(!operation_allowed(user)) - to_chat(user, "Access denied. [name] is secured with an ID lock.") + to_chat(user, span_warning("Access denied. [name] is secured with an ID lock.")) return FALSE if(do_after(user, 40, target = src)) if(!occupant) return mmi_moved_inside(mmi_as_oc,user) else - to_chat(user, "Occupant detected!") + to_chat(user, span_warning("Occupant detected!")) else - to_chat(user, "You stop inserting the MMI.") + to_chat(user, span_notice("You stop inserting the MMI.")) return FALSE /obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc,mob/user) @@ -1298,7 +1330,7 @@ to_chat(user, "Beta-rhythm below acceptable level.") return FALSE if(!user.drop_item_ground(mmi_as_oc)) - to_chat(user, "\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]") + to_chat(user, span_notice("\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src].")) return FALSE var/mob/living/carbon/brain/brainmob = mmi_as_oc.brainmob brainmob.reset_perspective(src) @@ -1308,12 +1340,12 @@ if(istype(mmi_as_oc, /obj/item/mmi/robotic_brain)) var/obj/item/mmi/robotic_brain/R = mmi_as_oc if(R.imprinted_master) - to_chat(brainmob, "Your imprint to [R.imprinted_master] has been temporarily disabled. You should help the crew and not commit harm.") + to_chat(brainmob, span_notice("Your imprint to [R.imprinted_master] has been temporarily disabled. You should help the crew and not commit harm.")) mmi_as_oc.loc = src mmi_as_oc.mecha = src Entered(mmi_as_oc) Move(loc) - icon_state = reset_icon() + update_icon(UPDATE_ICON_STATE) dir = dir_in log_message("[mmi_as_oc] moved in as pilot.") if(!hasInternalDamage()) @@ -1329,17 +1361,19 @@ var/mob/living/carbon/brain/brain = occupant mob_container = brain.container if(istype(mob_container, /obj/item/mmi)) - return 1 - return 0 - -/obj/mecha/proc/pilot_mmi_hud(var/mob/living/carbon/brain/pilot) - return + return TRUE + return FALSE /obj/mecha/Exited(atom/movable/M, atom/newloc) ..() if(occupant && occupant == M) // The occupant exited the mech without calling go_out() go_out(1, newloc) +/obj/mecha/Exit(atom/movable/O) + if(O in cargo) + return FALSE + return ..() + /obj/mecha/proc/go_out(forced, atom/newloc = loc) if(!occupant) return @@ -1368,10 +1402,10 @@ return else if(!AI.linked_core || QDELETED(AI.linked_core)) - to_chat(AI, "Inactive core destroyed. Unable to return.") + to_chat(AI, span_userdanger("Inactive core destroyed. Unable to return.")) AI.linked_core = null return - to_chat(AI, "Returning to core...") + to_chat(AI, span_notice("Returning to core...")) AI.controlled_mech = null AI.remote_control = null RemoveActions(occupant, 1) @@ -1393,12 +1427,12 @@ L.reset_perspective() mmi.mecha = null mmi.update_icon() - L.canmove = 0 + L.canmove = FALSE if(istype(mmi, /obj/item/mmi/robotic_brain)) var/obj/item/mmi/robotic_brain/R = mmi if(R.imprinted_master) - to_chat(L, "Imprint re-enabled, you are once again bound to [R.imprinted_master]'s commands.") - icon_state = reset_icon(icon_state)+"-open" + to_chat(L, span_notice("Imprint re-enabled, you are once again bound to [R.imprinted_master]'s commands.")) + update_icon(UPDATE_ICON_STATE) dir = dir_in if(L && L.client) @@ -1418,36 +1452,36 @@ /obj/mecha/proc/operation_allowed(mob/living/carbon/human/H) if(!ishuman(H)) - return 0 + return FALSE for(var/ID in H.get_access_locations()) if(check_access(ID, operation_req_access)) - return 1 - return 0 + return TRUE + return FALSE /obj/mecha/proc/internals_access_allowed(mob/living/carbon/human/H) for(var/atom/ID in H.get_access_locations()) if(check_access(ID, internals_req_access)) - return 1 - return 0 + return TRUE + return FALSE /obj/mecha/check_access(obj/item/I, list/access_list) if(!istype(access_list)) - return 1 + return TRUE if(!length(access_list)) //no requirements - return 1 + return TRUE if(!I || !I.GetID() || !I.GetAccess()) //not ID or no access - return 0 + return FALSE if(access_list==operation_req_access) for(var/req in access_list) if(!(req in I.GetAccess())) //doesn't have this access - return 0 + return FALSE else if(access_list==internals_req_access) for(var/req in access_list) if(req in I.GetAccess()) - return 1 - return 1 + return TRUE + return TRUE /////////////////////// ///// Power stuff ///// @@ -1469,16 +1503,16 @@ cell.use(amount) if(occupant) update_cell() - return 1 - return 0 + return TRUE + return FALSE /obj/mecha/proc/give_power(amount) if(!isnull(get_charge())) cell.give(amount) if(occupant) update_cell() - return 1 - return 0 + return TRUE + return FALSE /obj/mecha/proc/update_cell() if(cell) @@ -1502,12 +1536,6 @@ else occupant.throw_alert("charge", /obj/screen/alert/mech_nocell) -/obj/mecha/proc/reset_icon() - if(initial_icon) - icon_state = initial_icon - else - icon_state = initial(icon_state) - return icon_state ////////////////////////////////////////// //////// Mecha global iterators //////// @@ -1629,12 +1657,11 @@ AI = occupant occupant = null var/obj/structure/mecha_wreckage/WR = new wreckage(loc, AI) - WR.icon_state = "[src.reset_icon(loc, AI)]-broken" for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) if(E.salvageable && prob(30)) WR.crowbar_salvage += E E.detach(WR) //detaches from src into WR - E.equip_ready = 1 + E.equip_ready = TRUE else E.detach(loc) qdel(E) @@ -1667,12 +1694,15 @@ if(!check_menu(L) || choice == "Cancel / No Change") return - var/obj/item/mecha_parts/mecha_equipment/new_sel = LAZYACCESS(choices_to_refs, choice) - if(istype(new_sel)) - selected = new_sel - occupant_message("You switch to [selected].") - visible_message("[src] raises [selected]") - send_byjax(occupant, "exosuit.browser", "eq_list", get_equipment_list()) + var/obj/item/mecha_parts/mecha_equipment/chosen_module = LAZYACCESS(choices_to_refs, choice) + if(!istype(chosen_module)) + return + + switch(chosen_module.selectable) + if(MODULE_SELECTABLE_FULL) + chosen_module.select_module() + if(MODULE_SELECTABLE_TOGGLE) + chosen_module.toggle_module() /obj/mecha/proc/check_menu(mob/living/L) if(L != occupant || !istype(L)) @@ -1681,4 +1711,10 @@ return FALSE return TRUE + +/obj/mecha/update_icon_state() + var/init_icon_state = initial_icon ? initial_icon : initial(icon_state) + icon_state = occupant ? init_icon_state : "[init_icon_state]-open" + + #undef OCCUPANT_LOGGING diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 4834eda4b1b..d126c34ea6c 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -14,7 +14,7 @@ var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new var/datum/action/innate/mecha/mech_energywall/energywall_action = new var/datum/action/innate/mecha/mech_strafe/strafe_action = new - var/list/select_actions = list() + var/list/module_actions = list() /obj/mecha/proc/GrantActions(mob/living/user, human_occupant = 0) if(human_occupant) @@ -117,10 +117,10 @@ button_icon_state = "mech_defense_mode_[chassis.defence_mode ? "on" : "off"]" if(chassis.defence_mode) chassis.deflect_chance = chassis.defence_mode_deflect_chance - chassis.occupant_message("You enable [chassis] defence mode.") + chassis.occupant_message(span_notice("You enable [chassis] defence mode.")) else chassis.deflect_chance = initial(chassis.deflect_chance) - chassis.occupant_message("You disable [chassis] defence mode.") + chassis.occupant_message(span_danger("You disable [chassis] defence mode.")) chassis.log_message("Toggled defence mode.") UpdateButtonIcon() @@ -132,7 +132,7 @@ if(!owner || !chassis || chassis.occupant != owner) return if(chassis.obj_integrity < chassis.max_integrity - chassis.max_integrity / 3) - chassis.occupant_message("The leg actuators are too damaged to overload!") + chassis.occupant_message(span_danger("The leg actuators are too damaged to overload!")) return // Can't activate them if the mech is too damaged if(!isnull(forced_state)) chassis.leg_overload_mode = forced_state @@ -145,13 +145,13 @@ // chassis.bumpsmash = 1 chassis.step_in = min(1, round(chassis.step_in / 2)) chassis.step_energy_drain = max(chassis.overload_step_energy_drain_min, chassis.step_energy_drain * chassis.leg_overload_coeff) - chassis.occupant_message("You enable leg actuators overload.") + chassis.occupant_message(span_danger("You enable leg actuators overload.")) else chassis.leg_overload_mode = 0 // chassis.bumpsmash = 0 chassis.step_in = initial(chassis.step_in) chassis.step_energy_drain = chassis.normal_step_energy_drain - chassis.occupant_message("You disable leg actuators overload.") + chassis.occupant_message(span_notice("You disable leg actuators overload.")) UpdateButtonIcon() /datum/action/innate/mecha/mech_toggle_thrusters @@ -181,11 +181,10 @@ if(chassis.smoke_ready && chassis.smoke > 0) chassis.smoke_system.start() chassis.smoke-- - chassis.smoke_ready = 0 - spawn(chassis.smoke_cooldown) - chassis.smoke_ready = 1 + chassis.smoke_ready = FALSE + addtimer(CALLBACK(chassis, TYPE_PROC_REF(/obj/mecha, set_smoke_ready)), chassis.smoke_cooldown) else - chassis.occupant_message("You are either out of smoke, or the smoke isn't ready yet.") + chassis.occupant_message(span_warning("You are either out of smoke, or the smoke isn't ready yet.")) /datum/action/innate/mecha/mech_zoom name = "Zoom" @@ -258,11 +257,10 @@ else new chassis.wall_type(get_step(chassis, NORTH), chassis) new chassis.wall_type(get_step(chassis, SOUTH), chassis) - chassis.wall_ready = 0 - spawn(chassis.wall_cooldown) - chassis.wall_ready = 1 + chassis.wall_ready = FALSE + addtimer(CALLBACK(chassis, TYPE_PROC_REF(/obj/mecha, set_wall_ready)), chassis.wall_cooldown) else - chassis.occupant_message("Energy wall is not ready yet!") + chassis.occupant_message(span_warning("Energy wall is not ready yet!")) /////////////////////////////////// STRAFE PROCS //////////////////////////////////////////////// /datum/action/innate/mecha/mech_strafe @@ -315,7 +313,20 @@ /datum/action/innate/mecha/select_module/Activate() if(!owner || !chassis || chassis.occupant != owner) return - chassis.selected = equipment - chassis.occupant_message("You switch to [equipment.name].") - chassis.visible_message("[chassis] raises [equipment.name]") - send_byjax(chassis.occupant, "exosuit.browser", "eq_list", chassis.get_equipment_list()) + equipment.select_module() +/datum/action/innate/mecha/toggle_module + var/obj/item/mecha_parts/mecha_equipment/equipment + +/datum/action/innate/mecha/toggle_module/Grant(mob/living/L, obj/mecha/M, obj/item/mecha_parts/mecha_equipment/_equipment) + if(!_equipment) + return FALSE + equipment = _equipment + name = "Toggles [equipment.name] module" + icon_icon = equipment.icon + button_icon_state = equipment.icon_state + . = ..() + +/datum/action/innate/mecha/toggle_module/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + equipment.toggle_module() diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index 43cbd59c916..192da8f919c 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -76,23 +76,34 @@ var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown" var/tank_temperature_c = internal_tank ? internal_tank.return_temperature() - T0C : "Unknown" var/cabin_pressure = round(return_pressure(),0.01) - . = "[report_internal_damage()]" - . += "[integrity<30?"DAMAGE LEVEL CRITICAL
    ":null]" - . += "Integrity: [integrity]%
    " - . += "Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
    " - . += "Air source: [use_internal_tank?"Internal Airtank":"Environment"]
    " - . += "Airtank pressure: [tank_pressure]kPa
    " - . += "Airtank temperature: [tank_temperature]°K|[tank_temperature_c]°C
    " - . += "Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
    " - . += "Cabin temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
    " - . += "Lights: [lights?"on":"off"]
    " - . += "[dna ? "DNA-locked:
    [dna] \[Reset\]
    " : ""]" - . += "[defense_action.owner ? "Defence Mode: [defence_mode ? "Enabled" : "Disabled"]
    " : ""]" - . += "[overload_action.owner ? "Leg Actuators Overload: [leg_overload_mode ? "Enabled" : "Disabled"]
    " : ""]" - . += "[thrusters_action.owner ? "Thrusters: [thrusters_active ? "Enabled" : "Disabled"]
    " : ""]" - . += "[smoke_action.owner ? "Smoke: [smoke]
    " : ""]" - . += "[zoom_action.owner ? "Zoom: [zoom_mode ? "Enabled" : "Disabled"]
    " : ""]" - . += "[phasing_action.owner ? "Phase Modulator: [phasing ? "Enabled" : "Disabled"]
    " : ""]" + var/list/stats_part_list = list() + stats_part_list += "[report_internal_damage()]" + stats_part_list += "[integrity<30?"DAMAGE LEVEL CRITICAL
    ":null]" + stats_part_list += "Integrity: [integrity]%
    " + stats_part_list += "Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
    " + stats_part_list += "Air source: [use_internal_tank?"Internal Airtank":"Environment"]
    " + stats_part_list += "Airtank pressure: [tank_pressure]kPa
    " + stats_part_list += "Airtank temperature: [tank_temperature]°K|[tank_temperature_c]°C
    " + stats_part_list += "Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
    " + stats_part_list += "Cabin temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
    " + stats_part_list += "Lights: [lights?"on":"off"]
    " + stats_part_list += "[dna ? "DNA-locked:
    [dna] \[Reset\]
    " : ""]" + stats_part_list += "[defense_action.owner ? "Defence Mode: [defence_mode ? "Enabled" : "Disabled"]
    " : ""]" + stats_part_list += "[overload_action.owner ? "Leg Actuators Overload: [leg_overload_mode ? "Enabled" : "Disabled"]
    " : ""]" + stats_part_list += "[thrusters_action.owner ? "Thrusters: [thrusters_active ? "Enabled" : "Disabled"]
    " : ""]" + stats_part_list += "[smoke_action.owner ? "Smoke: [smoke]
    " : ""]" + stats_part_list += "[zoom_action.owner ? "Zoom: [zoom_mode ? "Enabled" : "Disabled"]
    " : ""]" + stats_part_list += "[phasing_action.owner ? "Phase Modulator: [phasing ? "Enabled" : "Disabled"]
    " : ""]" + stats_part_list += "Cargo Compartment Contents:
    " + if(length(cargo)) + for(var/obj/O in cargo) + stats_part_list += "Unload : [O]
    " + for(var/mob/living/L in cargo) + stats_part_list += "Unload : [L]
    " + else + stats_part_list += "Nothing" + stats_part_list += "
    " + return stats_part_list.Join("") /obj/mecha/proc/get_commands() . = "
    " @@ -260,10 +271,7 @@ if(usr != occupant) return var/obj/item/mecha_parts/mecha_equipment/equip = afilter.getObj("select_equip") if(equip) - selected = equip - occupant_message("You switch to [equip]") - visible_message("[src] raises [equip]") - send_byjax(occupant, "exosuit.browser", "eq_list", get_equipment_list()) + equip.select_module() return if(href_list["eject"]) if(usr != occupant) return @@ -378,7 +386,7 @@ return if(href_list["finish_req_access"]) if(!in_range(src, usr)) return - add_req_access = 0 + add_req_access = FALSE var/mob/user = afilter.getMob("user") user << browse(null,"window=exosuit_add_access") return @@ -386,7 +394,7 @@ if(usr != occupant) return if(occupant && !iscarbon(occupant)) - to_chat(occupant, "You do not have any DNA!") + to_chat(occupant, span_danger("You do not have any DNA!")) return dna = occupant.dna.unique_enzymes occupant_message("You feel a prick as the needle takes your DNA sample.") @@ -408,6 +416,14 @@ occupant_message("Recalibration failed.") log_message("Recalibration of coordination system failed with 1 error.",1) + if(href_list["drop_from_cargo"]) + var/atom/movable/cargo_thing = locateUID(href_list["drop_from_cargo"]) + if(istype(cargo_thing) && (cargo_thing in cargo)) + occupant_message(span_notice("You unload [cargo_thing].")) + cargo_thing.forceMove(loc) + cargo -= cargo_thing + log_message("Unloaded [cargo_thing]. Cargo compartment capacity: [cargo_capacity - length(cargo)]") + //debug /* if(href_list["debug"]) diff --git a/code/game/mecha/paintkits.dm b/code/game/mecha/paintkits.dm index 977b5f27560..e486b9488e6 100644 --- a/code/game/mecha/paintkits.dm +++ b/code/game/mecha/paintkits.dm @@ -309,3 +309,39 @@ new_name = "Pirate Mauler" new_icon = "piratmauler" allowed_types = list("mauler") + +/obj/item/paintkit/lockermech_nt + name = "NT Special Locker Mech customisation kit" + icon_state = "paintkit_nt1" + desc = "A kit containing all the needed tools and parts to show that Locker Mech it is the property of NT." + + new_name = "NT Special Locker Mech" + new_icon = "ntlockermech" + allowed_types = list("lockermech") + +/obj/item/paintkit/durand_nt + name = "NT Special Durand customisation kit" + icon_state = "paintkit_nt" + desc = "A kit containing all the needed tools and parts to show that Durand it is the property of NT" + + new_name = "NT Special Durand" + new_icon = "ntdurand" + allowed_types = list("durand") + +/obj/item/paintkit/ripley_nt + name = "NT Special APLU customisation kit" + icon_state = "paintkit_nt" + desc = "A kit containing all the needed tools and parts to show that APLU it is the property of NT" + + new_name = "NT Special APLU" + new_icon = "ntripley" + allowed_types = list("ripley", "firefighter") + +/obj/item/paintkit/phazon_nt + name = "NT Special Phazon customisation kit" + icon_state = "paintkit_nt" + desc = "A kit containing all the needed tools and parts to show that Phazon it is the property of NT" + + new_name = "NT Special Phazon" + new_icon = "ntphazon" + allowed_types = list("phazon") diff --git a/code/game/mecha/working/gigadrill.dm b/code/game/mecha/working/gigadrill.dm index ff3dfd01821..6f1f6a02e95 100644 --- a/code/game/mecha/working/gigadrill.dm +++ b/code/game/mecha/working/gigadrill.dm @@ -25,14 +25,14 @@ turnsound = null // wreckage = /obj/effect/decal/mecha_wreckage/gigadrill // no dmi :( -/obj/mecha/working/gigadrill/New() - ..() +/obj/mecha/working/gigadrill/Initialize() + . = ..() soundloop = new(list(src), FALSE) pixel_x = -16 pixel_y = -16 var/obj/item/mecha_parts/mecha_equipment/drill/giga/drill = new drill.attach(src) - cargo.Add(new /obj/structure/ore_box(src)) + LAZYADD(cargo, new /obj/structure/ore_box(src)) var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/clamp = new clamp.integrated = TRUE diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index fdd9c96bb96..a2e0f66a4c6 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -16,49 +16,69 @@ var/hides = 0 var/plates = 0 -/obj/mecha/working/ripley/update_icon() - ..() + +/obj/mecha/working/ripley/Destroy() + for(var/i=1, i <= hides, i++) + new /obj/item/stack/sheet/animalhide/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop + return ..() + + +/obj/mecha/working/ripley/update_overlays() + . = ..() + if(hides && !plates) + if(hides < 3) + . += occupant ? "ripley-g" : "ripley-g-open" + else + . += occupant ? "ripley-g-full" : "ripley-g-full-open" + + else if(plates && !hides) + if(plates < 3) + . += occupant ? "ripley-a" : "ripley-a-open" + else + . += occupant ? "ripley-a-full" : "ripley-a-full-open" + + else if(plates && hides) + if(plates < 3 && hides >= 3) + . += occupant ? "ripley-g-full" : "ripley-g-full-open" + . += occupant ? "ripley-a" : "ripley-a-open" + + else if(plates < 3 && hides < 3) + . += occupant ? "ripley-a-full" : "ripley-a-full-open" + . += occupant ? "ripley-g" : "ripley-g-open" + + else if(plates >= 3 && hides < 3) + . += occupant ? "ripley-a-full" : "ripley-a-full-open" + . += occupant ? "ripley-g" : "ripley-g-open" + + else if(plates >= 3 && hides >= 3) + . += occupant ? "ripley-g-full" : "ripley-g-full-open" + . += occupant ? "ripley-a" : "ripley-a-open" + + +/obj/mecha/working/ripley/update_desc(updates = ALL) + . = ..() + if(hides && !plates) - cut_overlays() if(hides < 3) - add_overlay(occupant ? "ripley-g" : "ripley-g-open") desc = "Autonomous Power Loader Unit. You see reinforcements made of plates of goliath hide attached to the armor." else - add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open") desc = "Autonomous Power Loader Unit. It has an intimidating carapace composed entirely of plates of goliath hide - its pilot must be an experienced monster hunter." - if(plates && !hides) - cut_overlays() + else if(plates && !hides) if(plates < 3) - add_overlay(occupant ? "ripley-a" : "ripley-a-open") desc = "Autonomous Power Loader Unit. You can see the pieces of homemade armor on the hull." else - add_overlay(occupant ? "ripley-a-full" : "ripley-a-full-open") desc = "Autonomous Power Loader Unit. Completely encrusted with reinforced debris, this shiny lump of metal looks incredibly durable." - if(plates && hides) - cut_overlays() - if(plates < 3 && hides == 3) - cut_overlays() - add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open") - add_overlay(occupant ? "ripley-a" : "ripley-a-open") + else if(plates && hides) + if(plates < 3 && hides >= 3) desc = "Autonomous Power Loader Unit. Not only is the goliath hide armor intimidating, it's additionally covered in pieces of homemade armor. How do you kill that?!" - if(plates < 3 && hides < 3) - cut_overlays() - add_overlay(occupant ? "ripley-a-full" : "ripley-a-full-open") - add_overlay(occupant ? "ripley-g" : "ripley-g-open") + else if(plates < 3 && hides < 3) desc = "Autonomous Power Loader Unit. The owner of the mech decided to go all out - clad in pieces of homemade armor and goliath skins." - if(plates == 3 && hides < 3) - cut_overlays() - add_overlay(occupant ? "ripley-a-full" : "ripley-a-full-open") - add_overlay(occupant ? "ripley-g" : "ripley-g-open") + else if(plates >= 3 && hides < 3) + desc = "Autonomous Power Loader Unit. Fully covered with homemade armor and few goliath hides on top." + else if(plates >= 3 && hides >= 3) desc = "Autonomous Power Loader Unit. Clad in homemade armor from ear to toe, with Goliath plates on top - a real tank, no other way." - if(plates == 3 && hides == 3) - cut_overlays() - add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open") - add_overlay(occupant ? "ripley-a" : "ripley-a-open") - - /obj/mecha/working/ripley/firefighter @@ -119,7 +139,7 @@ P.attach(src) //Add ore box to cargo - cargo.Add(new /obj/structure/ore_box(src)) + LAZYADD(cargo, new /obj/structure/ore_box(src)) //Attach hydraulic clamp var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new @@ -129,18 +149,6 @@ var/obj/item/mecha_parts/mecha_equipment/mining_scanner/scanner = new scanner.attach(src) -/obj/mecha/working/ripley/Exit(atom/movable/O) - if(O in cargo) - return 0 - return ..() - -/obj/mecha/working/ripley/ex_act(severity) - ..() - for(var/X in cargo) - var/obj/O = X - if(prob(30 / severity)) - cargo -= O - O.forceMove(drop_location()) /obj/mecha/working/ripley/emag_act(mob/user) if(!emagged) diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm index 51c9a6fe2de..823f305f897 100644 --- a/code/game/mecha/working/working.dm +++ b/code/game/mecha/working/working.dm @@ -1,12 +1,11 @@ /obj/mecha/working internal_damage_threshold = 60 - var/list/cargo = new - var/cargo_capacity = 15 + cargo_capacity = 15 var/fast_pressure_step_in = 2 var/slow_pressure_step_in = 2 -/obj/mecha/working/New() - ..() +/obj/mecha/working/Initialize() + . = ..() if(!ruin_mecha) trackers += new /obj/item/mecha_parts/mecha_tracking(src) @@ -18,20 +17,6 @@ if(ore.Adjacent(src) && ((get_dir(src, ore) & dir) || ore.loc == loc)) //we can reach it and it's in front of us? grab it! ore.forceMove(ore_box) -/obj/mecha/working/Topic(href, href_list) - ..() - if(href_list["drop_from_cargo"]) - var/obj/O = locate(href_list["drop_from_cargo"]) - if(O && (O in cargo)) - occupant_message("You unload [O].") - O.loc = get_turf(src) - cargo -= O - var/turf/T = get_turf(O) - if(T) - T.Entered(O) - log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - cargo.len]") - return - /obj/mecha/working/Move() . = ..() if(.) @@ -52,53 +37,12 @@ /obj/mecha/working/go_out() ..() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/mecha/working/moved_inside(mob/living/carbon/human/H) ..() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/mecha/working/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user) ..() - update_icon() - -/obj/mecha/working/Exit(atom/movable/O) - if(O in cargo) - return 0 - return ..() - -/obj/mecha/working/get_stats_part() - var/output = ..() - output += "Cargo Compartment Contents:
    " - if(cargo.len) - for(var/obj/O in cargo) - output += "Unload : [O]
    " - for(var/mob/living/L in cargo) - output += "Unload : [L]
    " - else - output += "Nothing" - output += "
    " - return output - -/obj/mecha/working/Destroy() - for(var/mob/M in src) - if(M == occupant) - continue - M.loc = get_turf(src) - M.loc.Entered(M) - step_rand(M) - for(var/atom/movable/A in cargo) - A.loc = get_turf(src) - var/turf/T = get_turf(A) - if(T) - T.Entered(A) - step_rand(A) - return ..() - -/obj/mecha/working/ex_act(severity) - ..() - for(var/X in cargo) - var/obj/O = X - if(prob(30 / severity)) - cargo -= O - O.forceMove(drop_location()) + update_icon(UPDATE_OVERLAYS) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 8e81c35e4e9..dc9fae405c7 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -23,11 +23,11 @@ return TRUE -/atom/movable/MouseDrop_T(mob/living/M, mob/living/user) +/atom/movable/MouseDrop_T(mob/living/dropping, mob/living/user, params) . = ..() - if(can_buckle && istype(M) && istype(user)) - if(user_buckle_mob(M, user)) - return TRUE + if(can_buckle && istype(dropping) && istype(user) && user_buckle_mob(dropping, user)) + return TRUE + /atom/movable/proc/has_buckled_mobs() return length(buckled_mobs) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 617ebf6d62b..535dc6d88ab 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -1,7 +1,5 @@ #define DRYING_TIME 5 * 60 * 10 //for 1 unit of depth in puddle (amount var) -GLOBAL_LIST_EMPTY(splatter_cache) - /obj/effect/decal/cleanable/blood name = "blood" var/dryname = "dried blood" @@ -47,10 +45,13 @@ GLOBAL_LIST_EMPTY(splatter_cache) deltimer(dry_timer) return ..() -/obj/effect/decal/cleanable/blood/update_icon() +/obj/effect/decal/cleanable/blood/update_icon(updates = ALL) + if(!updates) + return if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" color = basecolor + . = ..() /obj/effect/decal/cleanable/blood/proc/dry() name = dryname @@ -144,21 +145,27 @@ GLOBAL_LIST_EMPTY(splatter_cache) random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") no_clear = TRUE mergeable_decal = FALSE - + var/image/giblets var/fleshcolor = "#FFFFFF" -/obj/effect/decal/cleanable/blood/gibs/update_icon() - var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) + +/obj/effect/decal/cleanable/blood/gibs/update_icon(updates = ALL) + if(!updates) + return + giblets = new(base_icon, "[icon_state]_flesh", dir) if(!fleshcolor || fleshcolor == "rainbow") fleshcolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" giblets.color = fleshcolor var/icon/blood = new(base_icon,"[icon_state]",dir) - icon = blood - overlays.Cut() - overlays += giblets . = ..() + +/obj/effect/decal/cleanable/blood/gibs/update_overlays() + . = ..() + . += giblets + + /obj/effect/decal/cleanable/blood/gibs/ex_act(severity) return diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index 4537beeb4fb..fca8e26ff43 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -11,7 +11,7 @@ /obj/effect/decal/cleanable/blood/gibs/robot/can_bloodcrawl_in() return FALSE -/obj/effect/decal/cleanable/blood/gibs/robot/update_icon() +/obj/effect/decal/cleanable/blood/gibs/robot/update_icon(updates = ALL) color = "#FFFFFF" . = ..(NONE) diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm index eb09fe2599d..ecb8ef0743d 100644 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -84,8 +84,8 @@ GLOBAL_LIST_EMPTY(fluidtrack_cache) update_icon() -/obj/effect/decal/cleanable/blood/footprints/update_icon() - overlays.Cut() +/obj/effect/decal/cleanable/blood/footprints/update_overlays() + . = ..() for(var/Ddir in GLOB.cardinal) if(entered_dirs & Ddir) @@ -97,7 +97,7 @@ GLOBAL_LIST_EMPTY(fluidtrack_cache) GLOB.fluidtrack_cache["entered-[blood_state]-[Ddir]"] = I if(I) I.color = basecolor - overlays += I + . += I if(exited_dirs & Ddir) var/image/I if(GLOB.fluidtrack_cache["exited-[blood_state]-[Ddir]"]) @@ -107,9 +107,10 @@ GLOBAL_LIST_EMPTY(fluidtrack_cache) GLOB.fluidtrack_cache["exited-[blood_state]-[Ddir]"] = I if(I) I.color = basecolor - overlays += I + . += I + + alpha = BLOODY_FOOTPRINT_BASE_ALPHA + bloodiness - alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness /proc/createFootprintsFrom(atom/movable/A, dir, turf/T) var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T) diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 135cbffaeba..dc6a00595f1 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -37,7 +37,7 @@ var/obj/structure/foamedmetal/M = new(src.loc) M.metal = metal - M.updateicon() + M.update_state() flick("[icon_state]-disolve", src) sleep(5) @@ -194,15 +194,20 @@ /obj/structure/foamedmetal/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) playsound(src.loc, 'sound/weapons/tap.ogg', 100, TRUE) -/obj/structure/foamedmetal/proc/updateicon() + +/obj/structure/foamedmetal/proc/update_state() if(metal == MFOAM_ALUMINUM) - icon_state = "metalfoam" max_integrity = 20 obj_integrity = max_integrity else - icon_state = "ironfoam" max_integrity = 50 obj_integrity = max_integrity + update_icon(UPDATE_ICON_STATE) + + +/obj/structure/foamedmetal/update_icon_state() + icon_state = (metal == MFOAM_ALUMINUM) ? "metalfoam" : "ironfoam" + /obj/structure/foamedmetal/attack_hand(mob/user) user.changeNext_move(CLICK_CD_MELEE) diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index 0a8de954cab..ca9060aba80 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -121,3 +121,19 @@ . = ..() if(!ismob(loc)) return INITIALIZE_HINT_QDEL + +/obj/effect/frosty_breath //used only for unathi firebreath, so... yeah.. + icon = 'icons/effects/effects.dmi' + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + layer = ABOVE_MOB_LAYER + anchored = TRUE + +/obj/effect/frosty_breath/Initialize(mapload, mob/living/carbon/C) + . = ..() + dir = C.dir + if(C.buckled) + pixel_y = (C.buckled.buckle_offset + 10) + if(dir == NORTH) + layer = BELOW_MOB_LAYER + flick("breath_[C.lying_prev]", src) + QDEL_IN(src, 2 SECONDS) diff --git a/code/game/objects/effects/temporary_visuals/cult.dm b/code/game/objects/effects/temporary_visuals/cult.dm index a1b2d4320a9..6ee3c867931 100644 --- a/code/game/objects/effects/temporary_visuals/cult.dm +++ b/code/game/objects/effects/temporary_visuals/cult.dm @@ -44,6 +44,12 @@ icon_state = "space" duration = 600 layer = ABOVE_OBJ_LAYER + var/from_lava = FALSE + + +/obj/effect/temp_visual/cult/portal/update_icon_state() + icon_state = from_lava ? "lava" : "space" + /obj/effect/temp_visual/emp/cult name = "cult emp sparks" diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index e8ba25e2089..f9bd9c9a0ff 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -292,6 +292,14 @@ duration = 12 shrink = FALSE + +/obj/effect/temp_visual/gib + name = "gib" + icon = 'icons/mob/mob.dmi' + icon_state = "gibbed-h" + duration = 1.5 SECONDS + + /obj/effect/temp_visual/small_smoke icon_state = "smoke" duration = 50 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 66b816090af..f78054226c0 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -267,7 +267,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/g msg += "No tech origins detected.
    " - if(materials.len) + if(length(materials)) msg += "Extractable materials:
    " for(var/mat in materials) msg += "[CallMaterialName(mat)]
    " //Capitize first word, remove the "$" @@ -532,6 +532,12 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/g if((src == user.l_ear || src == user.r_ear) && (user.head.flags_inv & HIDEHEADSETS)) return TRUE + if(user.wear_mask) + if(src == user.glasses && (user.wear_mask.flags_inv & HIDEGLASSES)) + return TRUE + if((src == user.l_ear || src == user.r_ear) && (user.wear_mask.flags_inv & HIDEHEADSETS)) + return TRUE + return FALSE @@ -1153,12 +1159,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/g /obj/item/update_atom_colour() . = ..() - if(!is_equipped()) - return update_equipped_item() - for(var/action in actions) - var/datum/action/myaction = action - myaction.UpdateButtonIcon() /obj/item/proc/add_tape() diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index 251b95fdadc..31c0cdee0c7 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -49,47 +49,73 @@ pixel_y = rand(-5, 5) pixel_x = rand(-6, 6) + /obj/item/storage/ashtray/attackby(obj/item/I, mob/user, params) if(!can_be_inserted(I)) return - handle_item_insertion(I) - if(istype(I, /obj/item/clothing/mask/cigarette)) - var/obj/item/clothing/mask/cigarette/cig = I - if(cig.lit == TRUE) - visible_message("[user] crushes [cig] in [src], putting it out.") - var/obj/item/butt = new cig.type_butt(src) - cig.transfer_fingerprints_to(butt) - qdel(cig) - if(cig.lit == FALSE) - visible_message("[user] places [cig] in [src] without even smoking it. Why did [user.p_they()] do that?") - return - visible_message("[user] places [I] in [src].") -/obj/item/storage/ashtray/update_icon() - if(contents.len == storage_slots) + var/is_cig = istype(I, /obj/item/clothing/mask/cigarette) + if(is_cig || istype(I, /obj/item/cigbutt) || istype(I, /obj/item/match)) + if(!user.drop_item_ground(I)) + return + + handle_item_insertion(I) + + var/message_done = FALSE + if(is_cig) + var/obj/item/clothing/mask/cigarette/cig = I + if(cig.lit) + message_done = TRUE + visible_message("[user] crushes [cig] in [src], putting it out.") + var/obj/item/butt = new cig.type_butt(src) + cig.transfer_fingerprints_to(butt) + qdel(cig) + else + to_chat(user, "You place [cig] in [src] without even smoking it. Why would you do that?") + + if(!message_done) + visible_message("[user] places [I] in [src].") + add_fingerprint(user) + update_appearance(UPDATE_DESC|UPDATE_ICON_STATE) + + +/obj/item/storage/ashtray/update_icon_state() + if(length(contents) == storage_slots) icon_state = icon_full - desc = initial(desc) + " It's stuffed full." - return - if(contents.len >= storage_slots * 0.5) + else if(length(contents) > storage_slots * 0.5) icon_state = icon_half - desc = initial(desc) + " It's half-filled." - return - if(contents.len < storage_slots * 0.5) + else icon_state = initial(icon_state) + + +/obj/item/storage/ashtray/update_desc(updates = ALL) + . = ..() + if(length(contents) == storage_slots) + desc = initial(desc) + " It's stuffed full." + else if(length(contents) > storage_slots * 0.5) + desc = initial(desc) + " It's half-filled." + else desc = initial(desc) + +/obj/item/storage/ashtray/proc/empty_tray() + for(var/obj/item/I in contents) + I.forceMove(loc) + update_appearance(UPDATE_DESC|UPDATE_ICON_STATE) + + /obj/item/storage/ashtray/deconstruct() var/obj/item/trash/broken_ashtray/shards = new(get_turf(src)) - shards.icon_state = src.icon_broken + shards.icon_state = icon_broken visible_message("Oops, [src] broke into a lot of pieces!") return ..() + /obj/item/storage/ashtray/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(contents.len) - for(var/obj/item/I in contents) - I.forceMove(loc) - update_icon() + if(length(contents)) visible_message("[src] slams into [hit_atom] spilling its contents!") + empty_tray() if(rand(1,20) > max_integrity) deconstruct() return ..() + diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index da89819b411..6a8f6d0fece 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -23,45 +23,55 @@ close_sound = 'sound/items/zip.ogg' open_sound_volume = 15 close_sound_volume = 15 + density = FALSE + integrity_failure = FALSE var/item_path = /obj/item/bodybag - density = 0 - integrity_failure = 0 -/obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob, params) - if(istype(W, /obj/item/pen)) - var/t = rename_interactive(user, W) +/obj/structure/closet/body_bag/attackby(obj/item/I, mob/user, params) + if(is_pen(I)) + var/t = rename_interactive(user, I) if(isnull(t)) return - cut_overlays() if(t) - add_fingerprint(user) - add_overlay(image(icon, "bodybag_label")) + update_icon(UPDATE_OVERLAYS) return - if(istype(W, /obj/item/wirecutters)) - add_fingerprint(user) - to_chat(user, "You cut the tag off the bodybag") - name = "body bag" - cut_overlays() + if(I.tool_behaviour == TOOL_WIRECUTTER) + to_chat(user, "You cut the tag off the bodybag.") + name = initial(name) + update_icon(UPDATE_OVERLAYS) return return ..() /obj/structure/closet/body_bag/close() if(..()) - density = 0 - return 1 - return 0 + density = FALSE + return TRUE + return FALSE -/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location) - . = ..() - if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src)))) - if(!ishuman(usr) || opened || length(contents)) - return FALSE - visible_message("[usr] folds up the [name]") +/obj/structure/closet/body_bag/update_icon_state() + icon_state = opened ? icon_opened : icon_closed + + +/obj/structure/closet/body_bag/update_overlays() + . = list() + if(name != initial(name)) + . += "bodybag_label" + + +/obj/structure/closet/body_bag/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(over_object == usr && ishuman(usr) && !usr.incapacitated() && !opened && !length(contents) && usr.Adjacent(src)) + usr.visible_message( + span_notice("[usr] folds up [src]."), + span_notice("You fold up [src]."), + ) new item_path(get_turf(src)) qdel(src) + return FALSE + return ..() + /obj/structure/closet/body_bag/relaymove(mob/user as mob) if(user.stat) @@ -72,8 +82,3 @@ if(!open()) to_chat(user, "It won't budge!") -/obj/structure/closet/body_bag/update_icon() - if(!opened) - icon_state = icon_closed - else - icon_state = icon_opened diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index d25e23e1b0f..cb50ac08180 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -1,3 +1,7 @@ +#define TALL_CANDLE 1 +#define MID_CANDLE 2 +#define SHORT_CANDLE 3 + /obj/item/candle name = "red candle" desc = "In Greek myth, Prometheus stole fire from the Gods and gave it to humankind. The jewelry he kept for himself." @@ -6,36 +10,40 @@ item_state = "candle1" w_class = WEIGHT_CLASS_TINY var/wax = 200 - var/lit = 0 - var/infinite = 0 - var/start_lit = 0 + /// Index for the icon state + var/wax_index = TALL_CANDLE + var/lit = FALSE + var/infinite = FALSE + var/start_lit = FALSE + var/flickering = FALSE light_color = "#E09D37" -/obj/item/candle/New() - ..() + +/obj/item/candle/Initialize(mapload) + . = ..() if(start_lit) // No visible message light(show_message = 0) + /obj/item/candle/Destroy() STOP_PROCESSING(SSobj, src) return ..() -/obj/item/candle/update_icon() - var/i - if(wax>150) - i = 1 - else if(wax>80) - i = 2 - else i = 3 - icon_state = "candle[i][lit ? "_lit" : ""]" + +/obj/item/candle/update_icon_state() + if(flickering) + icon_state = "candle[wax_index]_flicker" + else + icon_state = "candle[wax_index][lit ? "_lit" : ""]" + /obj/item/candle/can_enter_storage(obj/item/storage/S, mob/user) if(lit) to_chat(user, "[S] can't hold [src] while it's lit!") return FALSE - else - return TRUE + return TRUE + /obj/item/candle/attackby(obj/item/W, mob/user, params) if(is_hot(W)) @@ -43,16 +51,19 @@ return return ..() + /obj/item/candle/welder_act(mob/user, obj/item/I) . = TRUE if(I.tool_use_check(user, 0)) //Don't need to flash eyes because you are a badass light("[user] casually lights the [name] with [I], what a badass.") + /obj/item/candle/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) if(!lit) light() //honk return ..() + /obj/item/candle/proc/light(show_message) if(!lit) lit = 1 @@ -60,7 +71,32 @@ usr.visible_message(show_message) set_light(CANDLE_LUM) START_PROCESSING(SSobj, src) - update_icon() + update_icon(UPDATE_ICON_STATE) + + +/obj/item/candle/proc/update_wax_index() + var/new_wax_index + if(wax > 150) + new_wax_index = TALL_CANDLE + else if(wax > 80) + new_wax_index = MID_CANDLE + else + new_wax_index = SHORT_CANDLE + if(wax_index != new_wax_index) + wax_index = new_wax_index + return TRUE + return FALSE + + +/obj/item/candle/proc/start_flickering() + flickering = TRUE + update_icon(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, PROC_REF(stop_flickering)), 4 SECONDS, TIMER_UNIQUE) + + +/obj/item/candle/proc/stop_flickering() + flickering = FALSE + update_icon(UPDATE_ICON_STATE) /obj/item/candle/process() @@ -68,28 +104,49 @@ return if(!infinite) wax-- + if(wax_index != SHORT_CANDLE) // It's not at its shortest + if(update_wax_index()) + update_icon(UPDATE_ICON_STATE) if(!wax) - new/obj/item/trash/candle(src.loc) - if(istype(src.loc, /mob)) - var/mob/M = src.loc - M.temporarily_remove_item_from_inventory(src, force = TRUE) //src is being deleted anyway + new/obj/item/trash/candle(loc) + if(ismob(loc)) + var/mob/holder = loc + holder.drop_item_ground(src, force = TRUE) //src is being deleted anyway qdel(src) - update_icon() if(isturf(loc)) //start a fire if possible var/turf/T = loc T.hotspot_expose(700, 5) +/obj/item/candle/proc/unlight() + if(lit) + lit = FALSE + update_icon(UPDATE_ICON_STATE) + set_light(0) + + /obj/item/candle/attack_self(mob/user) if(lit) user.visible_message("[user] snuffs out [src].") - lit = 0 - update_icon() - set_light(0) + unlight() + + +/obj/item/candle/get_spooked() + if(lit) + start_flickering() + playsound(src, 'sound/effects/candle_flicker.ogg', 15, TRUE) + return TRUE + return FALSE + /obj/item/candle/eternal desc = "A candle. This one seems to have an odd quality about the wax." - infinite = 1 + infinite = TRUE + + +/obj/item/candle/eternal/wizard + desc = "A candle. It smells like magic, so that would explain why it burns brighter." + start_lit = TRUE /obj/item/candle/extinguish_light(force = FALSE) @@ -97,3 +154,9 @@ return infinite = FALSE wax = 1 // next process will burn it out + + +#undef TALL_CANDLE +#undef MID_CANDLE +#undef SHORT_CANDLE + diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 95abc042be1..c8cc639f123 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -271,8 +271,7 @@ switch(choice) if("Toggle Cap") to_chat(user, "You [capped ? "Remove" : "Replace"] the cap of the [src]") - capped = capped ? 0 : 1 - icon_state = "spraycan[capped ? "_cap" : ""]" + capped = !capped update_icon() if("Change Drawing") ..() @@ -304,8 +303,13 @@ playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) ..() -/obj/item/toy/crayon/spraycan/update_icon() - overlays.Cut() - var/image/I = image('icons/obj/crayons.dmi',icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]") + +/obj/item/toy/crayon/spraycan/update_icon_state() + icon_state = "spraycan[capped ? "_cap" : ""]" + + +/obj/item/toy/crayon/spraycan/update_overlays() + . = ..() + var/image/I = image('icons/obj/crayons.dmi', icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]") I.color = colour - overlays += I + . += I diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm index 4cb4a70f3ef..6a95632094f 100644 --- a/code/game/objects/items/devices/autopsy.dm +++ b/code/game/objects/items/devices/autopsy.dm @@ -145,7 +145,7 @@ var/obj/item/paper/P = new(drop_location()) P.name = "Autopsy Data ([target_name])" P.info = "[scan_data]" - P.overlays += "paper_words" + P.update_icon() user.put_in_hands(P, ignore_anim = FALSE) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 71c180ccdcb..edb3a437360 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -21,15 +21,27 @@ var/can_overcharge = TRUE //set this to FALSE if you don't want your flash to be overcharge capable var/use_sound = 'sound/weapons/flash.ogg' + +/obj/item/flash/update_icon_state() + icon_state = "[initial(icon_state)][broken ? "burnt" : ""]" + + +/obj/item/flash/update_overlays() + . = ..() + if(overcharged) + . += "overcharge" + + /obj/item/flash/proc/clown_check(mob/user) if(user && (CLUMSY in user.mutations) && prob(50)) flash_carbon(user, user, 30 SECONDS, 0) return FALSE return TRUE + /obj/item/flash/attackby(obj/item/W, mob/user, params) if(can_overcharge) - if(istype(W, /obj/item/screwdriver)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) if(battery_panel) to_chat(user, "You close the battery compartment on the [src].") battery_panel = FALSE @@ -41,17 +53,18 @@ to_chat(user, "You jam the cell into battery compartment on the [src].") qdel(W) overcharged = TRUE - overlays += "overcharge" + update_icon(UPDATE_OVERLAYS) + /obj/item/flash/random/New() ..() if(prob(25)) broken = TRUE - icon_state = "[initial(icon_state)]burnt" + update_icon(UPDATE_ICON_STATE) /obj/item/flash/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. broken = TRUE - icon_state = "[initial(icon_state)]burnt" + update_icon(UPDATE_ICON_STATE) visible_message("The [src.name] burns out!") diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index f11ad4b7d4f..65a5885b425 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -13,38 +13,39 @@ var/brightness_on = 4 //luminosity when on var/togglesound = 'sound/weapons/empty.ogg' + /obj/item/flashlight/Initialize() . = ..() + update_brightness() + + +/obj/item/flashlight/update_icon_state() if(on) icon_state = "[initial(icon_state)]-on" - set_light(brightness_on) else - icon_state = initial(icon_state) - set_light(0) + icon_state = "[initial(icon_state)]" + -/obj/item/flashlight/proc/update_brightness(var/mob/user = null) +/obj/item/flashlight/proc/update_brightness() if(on) - icon_state = "[initial(icon_state)]-on" set_light(brightness_on) else - icon_state = initial(icon_state) set_light(0) + update_icon() + /obj/item/flashlight/attack_self(mob/user) if(!isturf(user.loc)) - to_chat(user, "You cannot turn the light on while in this [user.loc].")//To prevent some lighting anomalities. - - return 0 + to_chat(user, "You cannot turn the light on while in this [user.loc].") //To prevent some lighting anomalities. + return FALSE on = !on playsound(user, togglesound, 100, 1) - update_brightness(user) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - return 1 + update_brightness() + update_equipped_item() + return TRUE -/obj/item/flashlight/attack(mob/living/M as mob, mob/living/user as mob) +/obj/item/flashlight/attack(mob/living/M, mob/living/user) add_fingerprint(user) if(on && user.zone_selected == BODY_ZONE_PRECISE_EYES) @@ -88,6 +89,7 @@ if(on) on = FALSE update_brightness() + update_equipped_item() /obj/item/flashlight/pen name = "penlight" @@ -173,10 +175,29 @@ var/fuel_lower = 800 var/fuel_upp = 1000 -/obj/item/flashlight/flare/New() + +/obj/item/flashlight/flare/Initialize() fuel = rand(fuel_lower, fuel_upp) + . = ..() + + +/obj/item/flashlight/flare/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + + +/obj/item/flashlight/flare/update_icon_state() + if(on) + item_state = "[initial(item_state)]-on" + else + item_state = "[initial(item_state)]" + + if(!fuel) + icon_state = "[initial(icon_state)]-empty" + return ..() + /obj/item/flashlight/flare/process() var/turf/pos = get_turf(src) if(pos && produce_heat) @@ -184,33 +205,17 @@ fuel = max(fuel - 1, 0) if(!fuel || !on) turn_off() - if(!fuel) - src.icon_state = "[initial(icon_state)]-empty" STOP_PROCESSING(SSobj, src) -/obj/item/flashlight/flare/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() /obj/item/flashlight/flare/proc/turn_off() - on = 0 - src.force = initial(src.force) - src.damtype = initial(src.damtype) - if(ismob(loc)) - var/mob/U = loc - update_brightness(U) - else - update_brightness(null) + on = FALSE + force = initial(force) + damtype = initial(damtype) + update_brightness() -/obj/item/flashlight/flare/update_brightness(var/mob/user = null) - ..() - if(on) - item_state = "[initial(item_state)]-on" - else - item_state = "[initial(item_state)]" /obj/item/flashlight/flare/attack_self(mob/user) - // Usual checks if(!fuel) to_chat(user, "[src] is out of fuel.") @@ -223,10 +228,12 @@ // All good, turn it on. if(.) user.visible_message("[user] activates [src].", "You activate [src].") - src.force = on_damage - src.damtype = "fire" + if(produce_heat) + force = on_damage + damtype = BURN START_PROCESSING(SSobj, src) + // GLOWSTICKS /obj/item/flashlight/flare/glowstick @@ -241,27 +248,26 @@ produce_heat = 0 fuel_lower = 1600 fuel_upp = 2000 + blocks_emissive = FALSE + /obj/item/flashlight/flare/glowstick/Initialize() light_color = color ..() -/obj/item/flashlight/flare/glowstick/update_icon() - item_state = "glowstick" - cut_overlays() + +/obj/item/flashlight/flare/glowstick/update_icon_state() if(!fuel) icon_state = "glowstick-empty" - cut_overlays() - update_brightness(0) - else if(on) + + +/obj/item/flashlight/flare/glowstick/update_overlays() + . = ..() + if(on) var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow") glowstick_overlay.color = color - add_overlay(glowstick_overlay) - item_state = "glowstick-on" - update_brightness(brightness_on) - else - icon_state = "glowstick" - cut_overlays() + . += glowstick_overlay + /obj/item/flashlight/flare/glowstick/red name = "red glowstick" @@ -334,12 +340,10 @@ materials = list() on = TRUE //Bio-luminesence has one setting, on. -/obj/item/flashlight/slime/New() - ..() - set_light(brightness_on) - spawn(1) //Might be sloppy, but seems to be necessary to prevent further runtimes and make these work as intended... don't judge me! - update_brightness() - icon_state = initial(icon_state) + +/obj/item/flashlight/slime/update_icon_state() + return + /obj/item/flashlight/slime/attack_self(mob/user) return //Bio-luminescence does not toggle. @@ -359,10 +363,11 @@ var/charge_tick = 0 -/obj/item/flashlight/emp/New() - ..() +/obj/item/flashlight/emp/Initialize() + . = ..() START_PROCESSING(SSobj, src) + /obj/item/flashlight/emp/Destroy() STOP_PROCESSING(SSobj, src) return ..() @@ -375,13 +380,15 @@ emp_cur_charges = min(emp_cur_charges+1, emp_max_charges) return TRUE -/obj/item/flashlight/emp/attack(mob/living/M as mob, mob/living/user as mob) +/obj/item/flashlight/emp/attack(mob/living/M, mob/living/user) if(on && user.zone_selected == BODY_ZONE_PRECISE_EYES) // call original attack proc only if aiming at the eyes ..() return -/obj/item/flashlight/emp/afterattack(atom/A as mob|obj, mob/user, proximity) - if(!proximity) return + +/obj/item/flashlight/emp/afterattack(atom/A, mob/user, proximity) + if(!proximity) + return if(emp_cur_charges > 0) emp_cur_charges -= 1 if(ismob(A)) @@ -391,7 +398,7 @@ A.emp_act(1) else to_chat(user, "\The [src] needs time to recharge!") - return + /obj/item/flashlight/spotlight //invisible lighting source name = "disco light" diff --git a/code/game/objects/items/devices/handheld_defib.dm b/code/game/objects/items/devices/handheld_defib.dm index 0f604428fca..dbf0e4c7b6d 100644 --- a/code/game/objects/items/devices/handheld_defib.dm +++ b/code/game/objects/items/devices/handheld_defib.dm @@ -12,6 +12,15 @@ var/cooldown = FALSE var/charge_time = 100 var/emagged = FALSE + var/shocking = FALSE + + +/obj/item/handheld_defibrillator/update_icon_state() + if(shocking) + icon_state = "[icon_base]-shock" + return + icon_state = "[icon_base][cooldown ? "-off" : "-on"]" + /obj/item/handheld_defibrillator/emag_act(mob/user) if(!emagged) @@ -83,19 +92,22 @@ else to_chat(user, span_danger("[H] has a hardsuit!")) cooldown = TRUE - icon_state = "[icon_base]-shock" - addtimer(CALLBACK(src, PROC_REF(short_charge)), 10) + shocking = TRUE + update_icon(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, PROC_REF(short_charge)), 1 SECONDS) addtimer(CALLBACK(src, PROC_REF(recharge)), charge_time) else to_chat(user, span_notice("[src]'s on board medical scanner indicates that no shock is required.")) /obj/item/handheld_defibrillator/proc/short_charge() - icon_state = "[icon_base]-off" + shocking = FALSE + update_icon(UPDATE_ICON_STATE) + /obj/item/handheld_defibrillator/proc/recharge() cooldown = FALSE - icon_state = "[icon_base]-on" + update_icon(UPDATE_ICON_STATE) playsound(loc, "sound/weapons/flash.ogg", 75, 1) /obj/item/handheld_defibrillator/syndie diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index f06b2e28add..0d4eb278382 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -16,6 +16,7 @@ var/recharging = 0 var/recharge_locked = 0 var/obj/item/stock_parts/micro_laser/diode //used for upgrading! + var/is_pointing = FALSE /obj/item/laser_pointer/red @@ -42,6 +43,9 @@ diode = new /obj/item/stock_parts/micro_laser/ultra +/obj/item/laser_pointer/update_icon_state() + icon_state = "pointer[is_pointing ? "_[pointer_icon_state]" : ""]" + /obj/item/laser_pointer/attack(mob/living/M, mob/user) laser_act(M, user) @@ -55,7 +59,7 @@ else to_chat(user, "[src] already has a cell.") - else if(istype(W, /obj/item/screwdriver)) + else if(W.tool_behaviour == TOOL_SCREWDRIVER) if(diode) to_chat(user, "You remove the [diode.name] from the [src].") diode.loc = get_turf(src.loc) @@ -64,12 +68,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) @@ -135,11 +139,9 @@ outmsg = "You missed the lens of [C] with [src]." //laser pointer image - icon_state = "pointer_[pointer_icon_state]" - var/list/showto = list() - for(var/mob/M in viewers(7,targloc)) - if(M.client) - showto.Add(M.client) + is_pointing = TRUE + update_icon(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, PROC_REF(stop_pointing)), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_NO_HASH_WAIT) var/image/I = image('icons/obj/weapons/projectiles.dmi',targloc,pointer_icon_state,10) var/list/click_params = params2list(params) if(click_params) @@ -165,8 +167,13 @@ to_chat(user, "You've overused the battery of [src], now it needs time to recharge!") recharge_locked = 1 - flick_overlay(I, showto, 10) - icon_state = "pointer" + flick_overlay_view(I, 1 SECONDS) + + +/obj/item/laser_pointer/proc/stop_pointing() + is_pointing = FALSE + update_icon(UPDATE_ICON_STATE) + /obj/item/laser_pointer/process() if(prob(20 - recharge_locked*5)) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index dc75d59db96..a2c3066ccc7 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -115,7 +115,7 @@ qdel(L) return - if(istype(I, /obj/item/storage)) + if(isstorage(I)) var/obj/item/storage/S = I var/found_lightbulbs = FALSE var/replaced_something = TRUE @@ -154,16 +154,29 @@ /obj/item/lightreplacer/emag_act(mob/user) if(!emagged) + emagged = TRUE add_attack_logs(user, src, "emagged") - Emag() + playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) + + +/obj/item/lightreplacer/update_name(updates = ALL) + . = ..() + if(emagged) + name = "shortcircuited [initial(name)]" + else + name = initial(name) + + +/obj/item/lightreplacer/update_icon_state() + icon_state = "lightreplacer[emagged]" + /obj/item/lightreplacer/attack_self(mob/user) for(var/obj/machinery/light/target in user.loc) ReplaceLight(target, user) to_chat(user, status_string()) -/obj/item/lightreplacer/update_icon() - icon_state = "lightreplacer[emagged]" /obj/item/lightreplacer/proc/status_string() return "It has [uses] light\s remaining (plus [bulb_shards] fragment\s)." @@ -229,14 +242,6 @@ to_chat(U, "There is a working [target.fitting] already inserted!") return -/obj/item/lightreplacer/proc/Emag() - emagged = !emagged - playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - if(emagged) - name = "shortcircuited [initial(name)]" - else - name = initial(name) - update_icon() /obj/item/lightreplacer/proc/CanUse(mob/living/user) add_fingerprint(user) diff --git a/code/game/objects/items/devices/memorizer.dm b/code/game/objects/items/devices/memorizer.dm index a58b541cb8f..b894e9c7967 100644 --- a/code/game/objects/items/devices/memorizer.dm +++ b/code/game/objects/items/devices/memorizer.dm @@ -18,6 +18,17 @@ var/can_overcharge = FALSE //set this to FALSE if you don't want your flash to be overcharge capable var/use_sound = 'sound/weapons/flash.ogg' + +/obj/item/memorizer/update_icon_state() + icon_state = "memorizer[broken ? "burnt" : ""]" + + +/obj/item/memorizer/update_overlays() + . = ..() + if(overcharged) + . += "overcharge" + + /obj/item/memorizer/proc/clown_check(mob/user) if(user && (CLUMSY in user.mutations) && prob(50)) memorize_carbon(user, user, 15, FALSE) @@ -27,7 +38,7 @@ /obj/item/memorizer/attackby(obj/item/W, mob/user, params) if(!can_overcharge) return - if(istype(W, /obj/item/screwdriver)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) battery_panel = !battery_panel if(battery_panel) to_chat(user, "You open the battery compartment on the [src].") @@ -39,12 +50,13 @@ to_chat(user, "You jam the cell into battery compartment on the [src].") qdel(W) overcharged = TRUE - overlays += "overcharge" + update_icon(UPDATE_OVERLAYS) + /obj/item/memorizer/proc/burn_out() //Made so you can override it if you want to have an invincible flash from R&D or something. broken = TRUE - icon_state = "[initial(icon_state)]burnt" - visible_message("The [src.name] burns out!") + update_icon(UPDATE_ICON_STATE) + visible_message("The [name] burns out!") /obj/item/memorizer/proc/flash_recharge(var/mob/user) @@ -163,7 +175,7 @@ custom_objective.owner = fucking_target.mind fucking_target.mind.objectives += custom_objective fucking_target.mind.lost_memory = TRUE - var/list/messages = list(fucking_target.mind.prepare_announce_objectives()) + var/list/messages = list(fucking_target.mind.prepare_announce_objectives()) to_chat(fucking_target, chat_box_red(chat_box_red(messages.Join("
    ")))) last_used = world.time if(fucking_target.weakeyes) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index ca05f5d7173..69cc00a81b3 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -523,7 +523,7 @@ /obj/item/paper/pai_upgrade name = "Инструкция по применению" - icon_state = "paper" + icon_state = "paper_words" info = {"
    Инструкция по применению СпИИ

    В набор СпИИ входит:
    @@ -548,7 +548,7 @@ 5.Термальное зрение для пИИ
    "} -/obj/item/paper/pai_upgrade/update_icon() +/obj/item/paper/pai_upgrade/update_icon_state() return /obj/item/storage/box/syndie_kit/pai diff --git a/code/game/objects/items/devices/pizza_bomb.dm b/code/game/objects/items/devices/pizza_bomb.dm index b49b1012c89..481b8a83772 100644 --- a/code/game/objects/items/devices/pizza_bomb.dm +++ b/code/game/objects/items/devices/pizza_bomb.dm @@ -5,22 +5,53 @@ icon_state = "pizzabox1" throw_range = 1 var/timer = 10 //Adjustable timer - var/timer_set = 0 - var/primed = 0 - var/disarmed = 0 + var/timer_set = FALSE + var/primed = FALSE + var/disarmed = FALSE var/wires = list("orange", "green", "blue", "yellow", "aqua", "purple") var/correct_wire var/armer //Used for admin purposes + +/obj/item/pizza_bomb/update_icon_state() + if(disarmed) + icon_state = "pizzabox_bomb_[correct_wire]" + return + if(primed || !timer_set) + icon_state = "pizzabox_bomb" + return + icon_state = "pizzabox1" + + +/obj/item/pizza_bomb/update_name(updates) + . = ..() + if(timer_set && !disarmed) + name = "pizza box" + else + name = "pizza bomb" + + +/obj/item/pizza_bomb/update_desc(updates) + . = ..() + if(disarmed) + desc = "A devious contraption, made of a small explosive payload hooked up to pressure-sensitive wires. It's disarmed." + return + if(primed) + desc = "OH GOD THAT'S NOT A PIZZA" + return + if(timer_set) + desc = "A box suited for pizzas." + else + desc = "It seems inactive." + + /obj/item/pizza_bomb/attack_self(mob/user) if(disarmed) to_chat(user, "\The [src] is disarmed.") return + if(!timer_set) - name = "pizza bomb" - desc = "It seems inactive." - icon_state = "pizzabox_bomb" - timer_set = 1 + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) timer = (input(user, "Set a timer, from one second to ten seconds.", "Timer", "[timer]") as num) * 10 if(!in_range(src, usr) || issilicon(usr) || !usr.canmove || usr.restrained()) timer_set = 0 @@ -29,25 +60,23 @@ icon_state = "pizzabox1" return timer = clamp(timer, 10, 100) - icon_state = "pizzabox1" + timer_set = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) to_chat(user, "You set the timer to [timer / 10] before activating the payload and closing \the [src].") message_admins("[key_name_admin(usr)] has set a timer on a pizza bomb to [timer/10] seconds at [ADMIN_COORDJMP(loc)].") add_game_logs("has set the timer on a pizza bomb to [timer/10] seconds [COORD(loc)].", usr) armer = usr - name = "pizza box" - desc = "A box suited for pizzas." return + if(!primed) - name = "pizza bomb" - desc = "OH GOD THAT'S NOT A PIZZA" - icon_state = "pizzabox_bomb" audible_message("[bicon(src)] *beep* *beep*") to_chat(user, "That's no pizza! That's a bomb!") message_admins("[key_name_admin(usr)] has triggered a pizza bomb armed by [armer] at [ADMIN_COORDJMP(loc)].") add_game_logs("has triggered a pizza bomb armed by [armer] [COORD(loc)].", usr) - primed = 1 - sleep(timer) - return go_boom() + primed = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + addtimer(CALLBACK(src, PROC_REF(go_boom)), timer) + /obj/item/pizza_bomb/proc/go_boom() if(disarmed) @@ -58,8 +87,9 @@ 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) - if(istype(I, /obj/item/wirecutters) && primed) + +/obj/item/pizza_bomb/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_WIRECUTTER && primed) to_chat(user, "Oh God, what wire do you cut?!") var/chosen_wire = input(user, "OH GOD OH GOD", "WHAT WIRE?!") in wires if(!in_range(src, usr) || issilicon(usr) || !usr.canmove || usr.restrained()) @@ -68,19 +98,17 @@ user.visible_message("[user] cuts the [chosen_wire] wire!", "You cut the [chosen_wire] wire!") sleep(5) if(chosen_wire == correct_wire) - src.audible_message("[bicon(src)] \The [src] suddenly stops beeping and seems lifeless.") + audible_message("[bicon(src)] \The [src] suddenly stops beeping and seems lifeless.") to_chat(user, "You did it!") - icon_state = "pizzabox_bomb_[correct_wire]" - name = "pizza bomb" - desc = "A devious contraption, made of a small explosive payload hooked up to pressure-sensitive wires. It's disarmed." - disarmed = 1 - primed = 0 + disarmed = TRUE + primed = FALSE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) return else to_chat(user, "WRONG WIRE!") go_boom() return - if(istype(I, /obj/item/wirecutters) && disarmed) + if(I.tool_behaviour == TOOL_WIRECUTTER && disarmed) if(!in_range(user, src)) to_chat(user, "You can't see the box well enough to cut the wires out.") return diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 60260b00bbb..6d471e726bd 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -30,7 +30,7 @@ attached = null return ..() -/obj/item/powersink/update_icon() +/obj/item/powersink/update_icon_state() icon_state = "powersink[mode == OPERATING]" /obj/item/powersink/proc/set_mode(value) @@ -60,7 +60,7 @@ density = TRUE mode = value - update_icon() + update_icon(UPDATE_ICON_STATE) set_light(0) /obj/item/powersink/screwdriver_act(mob/user, obj/item/I) @@ -135,8 +135,8 @@ if(A.operating && A.cell) A.cell.charge = max(0, A.cell.charge - 50) power_drained += 50 - if(A.charging == 2) // If the cell was full - A.charging = 1 // It's no longer full + if(A.charging == APC_FULLY_CHARGED) // If the cell was full + A.charging = APC_IS_CHARGING // It's no longer full if(drained >= drain_rate) break diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 5ffd2ae7b7d..5f5ea340c48 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -2,14 +2,16 @@ name = "station intercom (General)" desc = "Talk through this." icon_state = "intercom" - anchored = 1 + anchored = TRUE w_class = WEIGHT_CLASS_BULKY canhear_range = 2 flags = CONDUCT - var/circuitry_installed = 1 + blocks_emissive = FALSE + var/circuitry_installed = TRUE var/buildstage = 0 dog_fashion = null + /obj/item/radio/intercom/custom name = "station intercom (Custom)" broadcasting = 0 @@ -53,8 +55,8 @@ if(direction) setDir(direction) set_pixel_offsets_from_dir(28, -28, 28, -28) - b_stat=1 - on = 0 + b_stat = TRUE + on = FALSE GLOB.global_intercoms.Add(src) update_icon() @@ -66,7 +68,7 @@ ..() internal_channels = list( num2text(PUB_FREQ) = list(), - num2text(SEC_I_FREQ) = list(ACCESS_SECURITY) + num2text(SEC_I_FREQ) = list(ACCESS_SECURITY), ) /obj/item/radio/intercom/syndicate @@ -173,12 +175,12 @@ return if(!I.use_tool(src, user, 10, volume = I.tool_volume) || buildstage != 2) return - update_icon() - on = 1 - b_stat = 0 + update_icon(UPDATE_ICON_STATE) + on = TRUE + b_stat = FALSE buildstage = 3 to_chat(user, "You secure the electronics!") - update_icon() + update_icon(UPDATE_ICON_STATE) update_operating_status() for(var/i, i<= 5, i++) wires.on_cut(i, 1) @@ -191,8 +193,8 @@ return WIRECUTTER_SNIP_MESSAGE new /obj/item/stack/cable_coil(get_turf(src),5) - on = 0 - b_stat = 1 + on = FALSE + b_stat = TRUE buildstage = 1 update_icon() update_operating_status(FALSE) @@ -209,12 +211,18 @@ new /obj/item/mounted/frame/intercom(get_turf(src)) qdel(src) -/obj/item/radio/intercom/update_icon() +/obj/item/radio/intercom/update_icon_state() if(!circuitry_installed) icon_state="intercom-frame" return icon_state = "intercom[!on?"-p":""][b_stat ? "-open":""]" +/obj/item/radio/intercom/update_overlays() + . = ..() + underlays.Cut() + if(on && buildstage == 3) + underlays += emissive_appearance(icon, "intercom_lightmask") + /obj/item/radio/intercom/proc/update_operating_status(on = TRUE) var/area/current_area = get_area(src) if(!current_area) @@ -236,8 +244,10 @@ var/area/current_area = get_area(src) if(!current_area) on = FALSE + set_light(0) else on = current_area.powered(EQUIP) // set "on" to the equipment power status of our area. + set_light(1, LIGHTING_MINIMUM_POWER) update_icon() /obj/item/intercom_electronics diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 49de0c3c080..928bb79a3a1 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -11,21 +11,22 @@ REAGENT SCANNER desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes." icon = 'icons/obj/device.dmi' icon_state = "t-ray0" - var/on = 0 + base_icon_state = "t-ray" + var/on = FALSE slot_flags = SLOT_BELT - w_class = 2 w_class = WEIGHT_CLASS_SMALL item_state = "electronic" materials = list(MAT_METAL=150) origin_tech = "magnets=1;engineering=1" var/scan_range = 1 - var/pulse_duration = 10 + var/pulse_duration = 1 SECONDS /obj/item/t_scanner/extended_range name = "T-ray сканер расширенной дальности" desc = "Излучатель и сканер терагерцевого излучения, используемый для обнаружения скрытых объектов и объектов под полом, таких как кабели и трубы. \ \nДанная модель обладает расширенным радиусом действия." icon_state = "t-ray-range0" + base_icon_state = "t-ray-range" scan_range = 3 origin_tech = "magnets=3;engineering=3" materials = list(MAT_METAL=300) @@ -35,7 +36,8 @@ REAGENT SCANNER desc = "Излучатель и сканер терагерцевого излучения, используемый для обнаружения скрытых объектов и объектов под полом, таких как кабели и трубы. \ \nДанная модель способна генерировать более продолжительные импульсы." icon_state = "t-ray-pulse0" - pulse_duration = 50 + base_icon_state = "t-ray-pulse" + pulse_duration = 5 SECONDS origin_tech = "magnets=5;engineering=3" materials = list(MAT_METAL=300) @@ -44,8 +46,9 @@ REAGENT SCANNER desc = "Излучатель и сканер терагерцевого излучения, используемый для обнаружения скрытых объектов и объектов под полом, таких как кабели и трубы. \ \nДанная модель способна генерировать более продолжительные импульсы и обладает расширенным радиусом действия." icon_state = "t-ray-advanced0" + base_icon_state = "t-ray-advanced" scan_range = 3 - pulse_duration = 50 + pulse_duration = 5 SECONDS origin_tech = "magnets=7;engineering=3" materials = list(MAT_METAL=300) @@ -54,8 +57,9 @@ REAGENT SCANNER desc = "Излучатель и сканер терагерцевого излучения, используемый для обнаружения скрытых объектов и объектов под полом, таких как кабели и трубы. \ \nВысокотехнологичная модель, способная генерировать очень продолжительные импульсы в пределах большого радиуса." icon_state = "t-ray-science0" + base_icon_state = "t-ray-science" scan_range = 5 - pulse_duration = 100 + pulse_duration = 10 SECONDS origin_tech = "magnets=8;engineering=5" materials = list(MAT_METAL=500) @@ -65,8 +69,9 @@ REAGENT SCANNER \nЭкспериментальный образец, обладающий расширенным радиусом действия и более продолжительным импульсом. \ \nСудя по его виду, эта вещь была собрана безумными учеными в ходе спонтанных экспериментов." icon_state = "t-ray-experimental0" + base_icon_state = "t-ray-experimental" scan_range = 3 - pulse_duration = 80 + pulse_duration = 8 SECONDS origin_tech = null materials = list() resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -76,14 +81,19 @@ REAGENT SCANNER STOP_PROCESSING(SSobj, src) return ..() -/obj/item/t_scanner/attack_self(mob/user) +/obj/item/t_scanner/update_icon_state() + icon_state = "[base_icon_state][on]" +/obj/item/t_scanner/proc/toggle_mode() on = !on - icon_state = copytext(icon_state, 1, length(icon_state))+"[on]" - + update_icon(UPDATE_ICON_STATE) if(on) START_PROCESSING(SSobj, src) + else + STOP_PROCESSING(SSobj, src) +/obj/item/t_scanner/attack_self(mob/user) + toggle_mode() /obj/item/t_scanner/process() if(!on) @@ -92,48 +102,41 @@ REAGENT SCANNER scan() /obj/item/t_scanner/proc/scan() + t_ray_scan(loc, pulse_duration, scan_range) - for(var/turf/scan_turf in range(scan_range, src.loc) ) - - if(!scan_turf.intact) +/proc/t_ray_scan(mob/viewer, flick_time, distance) + if(!ismob(viewer) || !viewer.client) + return + var/list/t_ray_images = list() + for(var/atom/movable/in_turf_atom in orange(distance, viewer)) + if(!isobj(in_turf_atom) && !isliving(in_turf_atom)) continue - for(var/obj/in_turf_object in scan_turf.contents) - + if(isobj(in_turf_atom)) + var/obj/in_turf_object = in_turf_atom if(in_turf_object.level != 1) continue - var/temp_invisibility = in_turf_object.invisibility - var/temp_alpha = in_turf_object.alpha - if(temp_invisibility == INVISIBILITY_ABSTRACT || temp_invisibility == INVISIBILITY_ANOMALY) - in_turf_object.invisibility = 0 - in_turf_object.alpha = 128 - in_turf_object.drain_act_protected = TRUE - if(in_turf_object.layer < TURF_LAYER) - in_turf_object.layer += TRAY_SCAN_LAYER_OFFSET - spawn(pulse_duration) - in_turf_object.plane = GAME_PLANE - if(in_turf_object) - var/turf/objects_turf = in_turf_object.loc - if(objects_turf && objects_turf.intact) - in_turf_object.invisibility = temp_invisibility - in_turf_object.alpha = temp_alpha - in_turf_object.drain_act_protected = FALSE - for(var/mob/living/in_turf_mob in scan_turf.contents) - var/oldalpha = in_turf_mob.alpha - if(in_turf_mob.alpha < 255 && istype(in_turf_mob)) - in_turf_mob.alpha = 255 - spawn(10) - if(in_turf_mob) - in_turf_mob.alpha = oldalpha - - var/mob/living/in_turf_mob = locate() in scan_turf - - if(in_turf_mob && in_turf_mob.invisibility == INVISIBILITY_LEVEL_TWO) - in_turf_mob.invisibility = 0 - spawn(2) - if(in_turf_mob) - in_turf_mob.invisibility = INVISIBILITY_LEVEL_TWO + if(in_turf_object.invisibility != INVISIBILITY_MAXIMUM && in_turf_object.invisibility != INVISIBILITY_ANOMALY) + continue + + if(isliving(in_turf_atom)) + var/mob/living/in_turf_living = in_turf_atom + if(!(in_turf_living.alpha < 255 || in_turf_living.invisibility == INVISIBILITY_LEVEL_TWO)) + continue + + var/image/I = new(loc = get_turf(in_turf_atom)) + var/mutable_appearance/MA = new(in_turf_atom) + MA.alpha = isliving(in_turf_atom) ? 255 : 128 + MA.dir = in_turf_atom.dir + if(MA.layer < TURF_LAYER) + MA.layer += TRAY_SCAN_LAYER_OFFSET + MA.plane = GAME_PLANE + I.appearance = MA + t_ray_images += I + + if(length(t_ray_images)) + flick_overlay(t_ray_images, list(viewer.client), flick_time) /obj/item/t_scanner/security name = "Противо-маскировочное ТГц устройство" @@ -143,13 +146,14 @@ REAGENT SCANNER righthand_file = 'icons/mob/inhands/items_righthand.dmi' item_state = "sb_t-ray" icon_state = "sb_t-ray0" + base_icon_state = "sb_t-ray" scan_range = 2 - pulse_duration = 30 var/was_alerted = FALSE // Protection against spam alerts from this scanner var/burnt = FALSE // Did emp break us? var/datum/effect_system/spark_spread/spark_system //The spark system, used for generating... sparks? origin_tech = "combat=3;magnets=5;biotech=5" + /obj/item/t_scanner/security/Initialize() . = ..() //Sets up a spark system @@ -157,43 +161,67 @@ REAGENT SCANNER spark_system.set_up(5, 0, src) spark_system.attach(src) + +/obj/item/t_scanner/security/update_icon_state() + if(burnt) + icon_state = "[base_icon_state]_burnt" + return + icon_state = "[base_icon_state][on]" + + +/obj/item/t_scanner/security/update_desc(updates = ALL) + . = ..() + if(!burnt) + desc = initial(desc) + return + desc = "Излучатель терагерцевого типа используемый для сканирования области на наличие замаскированных биоорганизмов. Устройство сгорело, теперь можно обнаружить разве что крошки от пончика оставшиеся на нём..." + + /obj/item/t_scanner/security/attack_self(mob/user) if(!burnt) on = !on - icon_state = copytext(icon_state, 1, length(icon_state))+"[on]" + update_icon(UPDATE_ICON_STATE) if(on) - START_PROCESSING(SSobj, src) + START_PROCESSING(SSprocessing, src) + else + STOP_PROCESSING(SSprocessing, src) + /obj/item/t_scanner/security/emp_act(severity) . = ..() if(prob(25) && !burnt) burnt = TRUE - on = FALSE; - icon_state = copytext(icon_state, 1, length(icon_state))+"_burnt" - desc = "Излучатель терагерцевого типа используемый для сканирования области на наличие замаскированных биоорганизмов. Устройство сгорело, теперь можно обнаружить разве что крошки от пончика оставшиеся на нём..." + on = FALSE + update_appearance(UPDATE_ICON_STATE|UPDATE_DESC) playsound(loc, "sparks", 50, TRUE, 5) spark_system.start() -/obj/item/t_scanner/security/scan() +/obj/item/t_scanner/security/scan() + var/mob/viewer = loc + if(!ismob(viewer) || !viewer.client) + return new /obj/effect/temp_visual/scan(get_turf(src)) - var/list/mobs_in_range = viewers(scan_range, get_turf(src)) - for(var/mob/living/in_turf_mob in mobs_in_range) - var/oldalpha = in_turf_mob.alpha - if(in_turf_mob.alpha < 255 && istype(in_turf_mob)) - in_turf_mob.alpha = 255 - alert_searchers(in_turf_mob) - spawn(pulse_duration) - if(in_turf_mob) - in_turf_mob.alpha = oldalpha - if(in_turf_mob && in_turf_mob.invisibility == INVISIBILITY_LEVEL_TWO) - in_turf_mob.invisibility = 0 - alert_searchers(in_turf_mob) - spawn(pulse_duration) - if(in_turf_mob) - in_turf_mob.invisibility = INVISIBILITY_LEVEL_TWO + var/list/t_ray_images = list() + for(var/mob/living/in_turf_living in viewers(scan_range, get_turf(src))) + if(!(in_turf_living.alpha < 255 || in_turf_living.invisibility == INVISIBILITY_LEVEL_TWO)) + continue + + var/image/I = new(loc = get_turf(in_turf_living)) + var/mutable_appearance/MA = new(in_turf_living) + MA.alpha = 255 + MA.dir = in_turf_living.dir + if(MA.layer < TURF_LAYER) + MA.layer += TRAY_SCAN_LAYER_OFFSET + MA.plane = GAME_PLANE + I.appearance = MA + t_ray_images += I + alert_searchers(in_turf_living) + + if(length(t_ray_images)) + flick_overlay(t_ray_images, list(viewer.client), pulse_duration) /obj/item/t_scanner/security/proc/alert_searchers(mob/living/found_mob) var/list/alerted = viewers(7, found_mob) @@ -601,6 +629,13 @@ REAGENT SCANNER if(0) to_chat(usr, "Сканер больше не показывает повреждения конечностей.") + +/obj/item/healthanalyzer/update_overlays() + . = ..() + if(advanced) + . += "advanced" + + /obj/item/healthanalyzer/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/healthupgrade)) if(advanced) @@ -608,9 +643,9 @@ REAGENT SCANNER else if(user.drop_transfer_item_to_loc(I, src)) to_chat(user, "Вы установили модуль обновления на [src].") - add_overlay("advanced") playsound(loc, I.usesound, 50, 1) advanced = TRUE + update_icon(UPDATE_OVERLAYS) qdel(I) return return ..() @@ -620,7 +655,7 @@ REAGENT SCANNER /obj/item/healthanalyzer/advanced/Initialize(mapload) . = ..() - add_overlay("advanced") + update_icon(UPDATE_OVERLAYS) /obj/item/healthupgrade @@ -787,6 +822,7 @@ REAGENT SCANNER var/obj/item/stock_parts/cell/cell var/cell_type = /obj/item/stock_parts/cell/upgraded var/ready = TRUE // Ready to scan + var/printing = FALSE var/time_to_use = 0 // How much time remaining before next scan is available. var/usecharge = 750 var/scan_time = 10 SECONDS //how long does it take to scan @@ -817,17 +853,24 @@ REAGENT SCANNER playsound(src, 'sound/machines/defib_saftyon.ogg', 50, 0) update_icon() -/obj/item/bodyanalyzer/update_icon(printing = FALSE) - overlays.Cut() - var/percent = cell.percent() + +/obj/item/bodyanalyzer/update_icon_state() + if(!cell) + icon_state = "bodyanalyzer_0" + return if(ready) icon_state = "bodyanalyzer_1" else icon_state = "bodyanalyzer_2" + +/obj/item/bodyanalyzer/update_overlays() + . = ..() + var/percent = cell.percent() var/overlayid = round(percent / 10) - overlayid = "bodyanalyzer_charge[overlayid]" - overlays += icon(icon, overlayid) + . += "bodyanalyzer_charge[overlayid]" + if(printing) + . += "bodyanalyzer_printing" /obj/item/bodyanalyzer/attack(mob/living/M, mob/living/carbon/human/user) @@ -845,6 +888,7 @@ REAGENT SCANNER to_chat(user, "The scanner beeps angrily at you! It's out of charge!") playsound(user.loc, 'sound/machines/buzz-sigh.ogg', 50, 1) + /obj/item/bodyanalyzer/borg/attack(mob/living/M, mob/living/silicon/robot/user) if(user.incapacitated() || !user.Adjacent(M)) return @@ -858,6 +902,7 @@ REAGENT SCANNER else to_chat(user, "You need to recharge before you can use [src]") + /obj/item/bodyanalyzer/proc/mobScan(mob/living/M, mob/user) if(ishuman(M)) var/report = generate_printing_text(M, user) @@ -867,8 +912,6 @@ REAGENT SCANNER printout.info = report printout.name = "Scan report - [M.name]" playsound(user.loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1) - flick("bodyanalyzer_anim", src) - sleep(3 SECONDS) user.put_in_hands(printout, ignore_anim = FALSE) time_to_use = world.time + scan_cd if(isrobot(user)) @@ -877,14 +920,16 @@ REAGENT SCANNER else cell.use(usecharge) ready = FALSE - update_icon(TRUE) + printing = TRUE + update_icon() addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/bodyanalyzer, setReady)), scan_cd) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 20) - + addtimer(VARSET_CALLBACK(src, printing, FALSE), 1.4 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon), UPDATE_OVERLAYS), 1.5 SECONDS) else if(iscorgi(M) && M.stat == DEAD) to_chat(user, "You wonder if [M.p_they()] was a good dog. [src] tells you they were the best...") // :'( playsound(loc, 'sound/machines/ping.ogg', 50, 0) ready = FALSE + update_icon(UPDATE_ICON_STATE) addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/bodyanalyzer, setReady)), scan_cd) time_to_use = world.time + scan_cd else diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index d0a65408d5b..4a81ccd38d1 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -17,23 +17,20 @@ QDEL_NULL(crew_monitor) return ..() -/obj/item/sensor_device/attack_self(mob/user as mob) +/obj/item/sensor_device/attack_self(mob/user) ui_interact(user) -/obj/item/sensor_device/MouseDrop(atom/over) +/obj/item/sensor_device/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() if(!.) return FALSE var/mob/user = usr - if(istype(over, /obj/screen)) - return FALSE - if(user.incapacitated() || !ishuman(user)) return FALSE - if(over == user) + if(over_object == user) attack_self(user) return TRUE diff --git a/code/game/objects/items/devices/signmaker.dm b/code/game/objects/items/devices/signmaker.dm index 64da2cfc406..6d163a7105e 100644 --- a/code/game/objects/items/devices/signmaker.dm +++ b/code/game/objects/items/devices/signmaker.dm @@ -29,22 +29,25 @@ return qdel(sign) sign = null - update_icon() + update_icon(UPDATE_ICON_STATE) + /obj/item/signmaker/proc/icon_flick() set waitfor = FALSE - icon_state = "signmaker_clown_on" pointer_busy = TRUE - sleep(10) + update_icon(UPDATE_ICON_STATE) + sleep(1 SECONDS) pointer_busy = FALSE - icon_state = "signmaker_clown_off" + update_icon(UPDATE_ICON_STATE) + -/obj/item/signmaker/update_icon() - if(sign) - icon_state = "signmaker_clown_on" - else +/obj/item/signmaker/update_icon_state() + if(pointer_busy) icon_state = "signmaker_clown_off" + return + icon_state = "signmaker_clown_[sign ? "on" : "off"]]" + /obj/item/signmaker/emag_act(mob/user) add_attack_logs(user, src, "emagged") diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 98c77e2f95a..218f4d6e7b3 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -36,7 +36,7 @@ ..() if(starts_with_tape) mytape = new /obj/item/tape/random(src) - update_icon() + update_icon(UPDATE_ICON_STATE) soundloop = new(list(src)) @@ -60,7 +60,7 @@ . += span_notice("[mytape] has [mytape.remaining_capacity] seconds remaining.") // to avoid having 0 minutes else . += span_notice("[mytape] has [seconds_to_time(mytape.remaining_capacity)] remaining.") - . += span_notice("Alt-Click to access the tape.") + . += span_info("Alt-Click to access the tape.") /obj/item/taperecorder/proc/update_sound() @@ -70,7 +70,7 @@ soundloop.start() -/obj/item/taperecorder/update_icon() +/obj/item/taperecorder/update_icon_state() if(!mytape) icon_state = "taperecorder_empty" else if(recording) @@ -82,7 +82,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 ..() @@ -91,7 +91,7 @@ mytape = I to_chat(user, span_notice("You insert [I] into [src].")) playsound(src, 'sound/items/taperecorder/taperecorder_close.ogg', 50, FALSE) - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/taperecorder/attack_hand(mob/user) @@ -150,7 +150,7 @@ mytape.forceMove_turf() user.put_in_hands(mytape, ignore_anim = FALSE) mytape = null - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/taperecorder/proc/record() @@ -167,7 +167,7 @@ recording = TRUE recorder_say("Запись началась.") update_sound() - update_icon() + update_icon(UPDATE_ICON_STATE) mytape.timestamp += mytape.used_capacity var/datum/tape_piece/piece = new() piece.time = mytape.used_capacity @@ -209,7 +209,7 @@ if(!playback_override) recorder_say("Проигрывание остановлено.") playing = FALSE - update_icon() + update_icon(UPDATE_ICON_STATE) update_sound() @@ -229,7 +229,7 @@ return playing = TRUE - update_icon() + update_icon(UPDATE_ICON_STATE) update_sound() recorder_say("Проигрывание началось.") playsound(src, 'sound/items/taperecorder/taperecorder_play.ogg', 50, FALSE) @@ -317,18 +317,18 @@ var/obj/item/paper/transcript = new /obj/item/paper(drop_location()) - var/t1 = "Transcript:

    " + var/list/paper_info = list("Transcript:

    ") for(var/i = 1, length(mytape.storedinfo) >= i, i++) var/datum/tape_piece/piece = mytape.storedinfo[i] - t1 += "\[[time2text(piece.time * 10,"mm:ss")]\] " + paper_info += "\[[time2text(piece.time * 10,"mm:ss")]\] " if(piece.speaker_name) - t1 += "[piece.speaker_name] " + paper_info += "[piece.speaker_name] " if(piece.message_verb) - t1 += "[piece.message_verb], \"[piece.message]\"
    " + paper_info += "[piece.message_verb], \"[replace_characters(piece.message, list("+"))]\"
    " else - t1 += "[piece.message]
    " + paper_info += "[replace_characters(piece.message, list("+"))]
    " - transcript.info = t1 + transcript.info = paper_info.Join("") transcript.name = "paper- 'Transcript'" cooldown = world.time + 3 SECONDS @@ -377,6 +377,12 @@ . += span_notice("It has [seconds_to_time(remaining_capacity)] remaining.") +/obj/item/tape/update_overlays() + . = ..() + if(ruined) + . += "ribbonoverlay" + + /obj/item/tape/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) ..() ruin() @@ -414,14 +420,14 @@ to_chat(user, span_notice("You pull the tape out of [src].")) if(!ruined) - overlays += "ribbonoverlay" ruined = TRUE + update_icon(UPDATE_OVERLAYS) /obj/item/tape/proc/fix() if(ruined) - overlays -= "ribbonoverlay" ruined = FALSE + update_icon(UPDATE_OVERLAYS) /obj/item/tape/verb/wipe() diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 43f06e5b5dd..c0d5b223e9d 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -29,15 +29,17 @@ effective or pretty fucking useless. var/charges = 3 + /obj/item/batterer/examine(mob/user) . = ..() - . += "[src] has [charges] charges left." + . += span_notice("[src] has [charges] charges left.") + /obj/item/batterer/attack_self(mob/living/carbon/user, flag = 0, emp = 0) if(!user) return if(charges == 0) - to_chat(user, "The mind batterer is out of charge!") + to_chat(user, span_danger("The mind batterer is out of charge!")) return @@ -46,17 +48,18 @@ effective or pretty fucking useless. M.Weaken(rand(2,6) SECONDS) M.adjustStaminaLoss(rand(35, 60)) add_attack_logs(user, M, "Stunned with [src]") - to_chat(M, "You feel a tremendous, paralyzing wave flood your mind.") + to_chat(M, span_danger("You feel a tremendous, paralyzing wave flood your mind.")) else - to_chat(M, "You feel a sudden, electric jolt travel through your head.") + to_chat(M, span_danger("You feel a sudden, electric jolt travel through your head.")) M.Slowed(10 SECONDS) M.Confused(6 SECONDS) playsound(loc, 'sound/misc/interference.ogg', 50, 1) charges-- - to_chat(user, "You trigger [src]. It has [charges] charges left.") + to_chat(user,span_notice("You trigger [src]. It has [charges] charges left.")) addtimer(CALLBACK(src, PROC_REF(recharge)), 3 MINUTES) + /obj/item/batterer/proc/recharge() charges++ @@ -92,31 +95,43 @@ effective or pretty fucking useless. var/wavelength = 10 // time it takes for the radiation to kick in, in seconds var/used = 0 // is it cooling down? -/obj/item/rad_laser/attack(mob/living/M, mob/living/user) - if(!used) - add_attack_logs(user, M, "Irradiated by [src]") - user.visible_message("[user] analyzes [M]'s vitals.") - var/cooldown = round(max(100,(((intensity*8)-(wavelength/2))+(intensity*2))*10)) - used = 1 - icon_state = "health1" - handle_cooldown(cooldown) // splits off to handle the cooldown while handling wavelength - spawn((wavelength+(intensity*4))*10) - if(M) - if(intensity >= 5) - M.Paralyse(intensity * 40/3 SECONDS) - M.apply_effect(intensity * 10, IRRADIATE) - else - to_chat(user, "The radioactive microlaser is still recharging.") -/obj/item/rad_laser/proc/handle_cooldown(cooldown) - spawn(cooldown) - used = 0 - icon_state = "health2" +/obj/item/rad_laser/update_icon_state() + icon_state = used ? "health1" : "health2" + + +/obj/item/rad_laser/attack(mob/living/target, mob/living/user) + if(used) + to_chat(user, span_warning("The radioactive microlaser is still recharging.")) + return + + add_attack_logs(user, target, "Irradiated by [src]") + user.visible_message(span_notice("[user] analyzes [target]'s vitals.")) + var/cooldown = round(max(100,(((intensity*8)-(wavelength/2))+(intensity*2))*10)) + used = TRUE + update_icon(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), cooldown) + addtimer(CALLBACK(src, PROC_REF(delayed_effect), target), (wavelength + (intensity * 4)) SECONDS) + + +/obj/item/rad_laser/proc/reset_cooldown() + used = FALSE + update_icon(UPDATE_ICON_STATE) + + +/obj/item/rad_laser/proc/delayed_effect(mob/living/target) + if(QDELETED(target)) + return + if(intensity >= 5) + target.Paralyse((intensity * 40 / 3) SECONDS) + target.apply_effect(intensity * 10, IRRADIATE) + /obj/item/rad_laser/attack_self(mob/user) ..() interact(user) + /obj/item/rad_laser/interact(mob/user) user.set_machine(src) @@ -131,6 +146,7 @@ effective or pretty fucking useless. popup.set_content(dat) popup.open() + /obj/item/rad_laser/Topic(href, href_list) if(..()) return 1 @@ -149,7 +165,8 @@ effective or pretty fucking useless. attack_self(usr) add_fingerprint(usr) - return + + /obj/item/jammer name = "radio jammer" @@ -159,12 +176,14 @@ effective or pretty fucking useless. var/active = FALSE var/range = 12 + /obj/item/jammer/Destroy() GLOB.active_jammers -= src return ..() + /obj/item/jammer/attack_self(mob/user) - to_chat(user,"You [active ? "deactivate" : "activate"] the [src].") + to_chat(user, span_notice("You [active ? "deactivate" : "activate"] the [src].")) active = !active if(active) GLOB.active_jammers |= src @@ -175,7 +194,8 @@ effective or pretty fucking useless. name = "Syndicate teleporter" desc = "A strange syndicate version of a cult veil shifter. Warranty voided if exposed to EMP." icon = 'icons/obj/device.dmi' - icon_state = "syndi-tele" + icon_state = "syndi-tele-4" + base_icon_state = "syndi-tele" throwforce = 5 w_class = WEIGHT_CLASS_SMALL throw_speed = 4 @@ -190,87 +210,122 @@ effective or pretty fucking useless. var/saving_throw_distance = 3 var/flawless = FALSE -/obj/item/teleporter/Initialize(mapload, ...) - . = ..() - START_PROCESSING(SSobj, src) /obj/item/teleporter/Destroy() - STOP_PROCESSING(SSobj, src) + if(isprocessing) + STOP_PROCESSING(SSobj, src) return ..() + /obj/item/teleporter/examine(mob/user) . = ..() - . += "[src] has [charges] out of [max_charges] charges left." + . += span_notice("[src] has [charges] out of [max_charges] charges left.") + + +/obj/item/teleporter/update_icon_state() + icon_state = "[base_icon_state]-[charges]" + /obj/item/teleporter/attack_self(mob/user) attempt_teleport(user, FALSE) + /obj/item/teleporter/process() - if(prob(10) && charges < max_charges) + if(charges >= max_charges) + return PROCESS_KILL + + if(prob(10)) charges++ + update_icon(UPDATE_ICON_STATE) + /obj/item/teleporter/emp_act(severity) - if(prob(50 / severity)) - if(istype(loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/user = loc - to_chat(user, "The [src] buzzes and activates!") - attempt_teleport(user, TRUE) - else - visible_message(" The [src] activates and blinks out of existence!") - do_sparks(2, 1, src) - qdel(src) + if(!prob(50 / severity)) + return + + if(ishuman(loc)) + var/mob/living/carbon/human/user = loc + to_chat(user, span_danger("The [src] buzzes and activates!")) + attempt_teleport(user, TRUE) + return + + // Well, it either is on a floor / locker, and won't teleport someone, + // OR it's in someones bag. As such, we need to check the turf to see if people are there. + var/teleported_something = FALSE + var/turf/teleport_turf = get_turf(src) + for(var/mob/living/user in teleport_turf) + teleported_something = TRUE + attempt_teleport(user, TRUE) + + if(teleported_something) + teleport_turf.visible_message(span_danger("[src] activates sporadically, teleporting everyone around it!")) + return + + visible_message(span_warning("The [src] activates and blinks out of existence!")) + do_sparks(2, TRUE, src) + qdel(src) + -/obj/item/teleporter/proc/attempt_teleport(mob/user, EMP_D = FALSE) +/obj/item/teleporter/proc/attempt_teleport(mob/living/user, EMP_D = FALSE) + for(var/obj/item/grab/G in user) + qdel(G) dir_correction(user) - if(!charges) - to_chat(user, "The [src] is recharging still.") + if(!charges && !EMP_D) //If it's empd, you are moving no matter what. + to_chat(user, span_warning("[src] is still recharging.")) return - var/mob/living/carbon/C = user - var/turf/mobloc = get_turf(C) - var/list/turfs = new/list() + var/turf/mobloc = get_turf(user) + var/list/turfs = list() var/found_turf = FALSE var/list/bagholding = user.search_contents_for(/obj/item/storage/backpack/holding) - for(var/turf/T in range(user, tp_range)) - if(!is_teleport_allowed(T.z)) + for(var/turf/check in range(user, tp_range)) + if(!is_teleport_allowed(check.z)) break if(!(length(bagholding) && !flawless)) //Chaos if you have a bag of holding - if(get_dir(C, T) != C.dir) + if(get_dir(user, check) != user.dir) continue - if(T in range(user, inner_tp_range)) + if(check in range(user, inner_tp_range)) continue - if(T.x > world.maxx-tp_range || T.x < tp_range) + if(check.x > world.maxx-tp_range || check.x < tp_range) continue //putting them at the edge is dumb - if(T.y > world.maxy-tp_range || T.y < tp_range) + if(check.y > world.maxy-tp_range || check.y < tp_range) continue - turfs += T + turfs += check found_turf = TRUE - if(found_turf) - if(user.loc != mobloc) // No locker / mech / sleeper teleporting, that breaks stuff - to_chat(C, "The [src] will not work here!") + if(!found_turf) + to_chat(user, span_danger("[src] will not work here!")) + return + + if(user.loc != mobloc) // No locker / mech / sleeper teleporting, that breaks stuff + to_chat(user, span_danger("[src] will not work here!")) + + if(charges > 0) //While we want EMP triggered teleports to drain charge, we also do not want it to go negative charge, as such we need this check here charges-- - var/turf/destination = pick(turfs) - if(tile_check(destination) || flawless) // Why is there so many bloody floor types - var/turf/fragging_location = destination - telefrag(fragging_location, user) - C.forceMove(destination) - playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) - playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - 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) - panic_teleport(user, destination, direction) - else // Emp activated? Bag of holding? No saving throw for you - get_fragged(user, destination) - else - to_chat(C, "The [src] will not work here!") + update_icon(UPDATE_ICON_STATE) + if(!isprocessing) + START_PROCESSING(SSobj, src) + + var/turf/destination = pick(turfs) + if(tile_check(destination) || flawless) // Why is there so many bloody floor types + var/turf/fragging_location = destination + telefrag(fragging_location, user) + user.forceMove(destination) + playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) + playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(destination) + else if(EMP_D == FALSE && !(length(bagholding) && !flawless)) // This is where the fun begins + var/direction = get_dir(user, destination) + panic_teleport(user, destination, direction) + else // Emp activated? Bag of holding? No saving throw for you + get_fragged(user, destination) + + +/obj/item/teleporter/proc/tile_check(turf/check_turf) + return isfloorturf(check_turf) || isspaceturf(check_turf) -/obj/item/teleporter/proc/tile_check(turf/T) - if(istype(T, /turf/simulated/floor) || istype(T, /turf/space) || istype(T, /turf/simulated/floor/shuttle) || istype(T, /turf/simulated/floor/shuttle/objective_check) || istype(T, /turf/simulated/floor/shuttle/plating)) - return TRUE /obj/item/teleporter/proc/dir_correction(mob/user) //Direction movement, screws with teleport distance and saving throw, and thus must be removed first var/temp_direction = user.dir @@ -280,7 +335,8 @@ effective or pretty fucking useless. if(NORTHWEST, SOUTHWEST) user.dir = WEST -/obj/item/teleporter/proc/panic_teleport(mob/user, turf/destination, direction = NORTH) + +/obj/item/teleporter/proc/panic_teleport(mob/living/user, turf/destination, direction = NORTH) var/saving_throw switch(direction) if(NORTH, SOUTH) @@ -296,33 +352,33 @@ effective or pretty fucking useless. else saving_throw = NORTH // just in case - var/mob/living/carbon/C = user - var/turf/mobloc = get_turf(C) + var/turf/mobloc = get_turf(user) var/list/turfs = list() var/found_turf = FALSE - for(var/turf/T in range(destination, saving_throw_distance)) - if(get_dir(destination, T) != saving_throw) + for(var/turf/check in range(destination, saving_throw_distance)) + if(get_dir(destination, check) != saving_throw) continue - if(T.x > world.maxx-saving_throw_distance || T.x < saving_throw_distance) + if(check.x > world.maxx-saving_throw_distance || check.x < saving_throw_distance) continue //putting them at the edge is dumb - if(T.y > world.maxy-saving_throw_distance || T.y < saving_throw_distance) + if(check.y > world.maxy-saving_throw_distance || check.y < saving_throw_distance) continue - if(!tile_check(T)) + if(!tile_check(check)) continue // We are only looking for safe tiles on the saving throw, since we are nice - turfs += T + turfs += check found_turf = TRUE - if(found_turf) - var/turf/new_destination = pick(turfs) - var/turf/fragging_location = new_destination - telefrag(fragging_location, user) - C.forceMove(new_destination) - playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) - new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(new_destination) - playsound(new_destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - else //We tried to save. We failed. Death time. - get_fragged(user, destination) + if(!found_turf) + get_fragged(user, destination) //We tried to save. We failed. Death time. + return + + var/turf/new_destination = pick(turfs) + var/turf/fragging_location = new_destination + telefrag(fragging_location, user) + user.forceMove(new_destination) + playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) + new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(new_destination) + playsound(new_destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) /obj/item/teleporter/proc/get_fragged(mob/user, turf/destination) @@ -334,19 +390,19 @@ effective or pretty fucking useless. playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) playsound(destination, "sound/magic/disintegrate.ogg", 50, TRUE) destination.ex_act(rand(1,2)) - for(var/obj/item/W in user) - if(istype(W, /obj/item/organ)|| istype(W, /obj/item/implant)) - continue - if(!user.drop_item_ground(W)) - qdel(W) - to_chat(user, "You teleport into the wall, the teleporter tries to save you, but--") + for(var/obj/item/thing as anything in user.get_equipped_items(TRUE, TRUE)) + if(!user.drop_item_ground(thing)) + qdel(thing) + to_chat(user, span_dangerbigger("You teleport into the wall, the teleporter tries to save you, but--")) user.gib() + /obj/item/teleporter/proc/telefrag(turf/fragging_location, mob/user) - for(var/mob/living/M in fragging_location)//Hit everything in the turf - M.apply_damage(20, BRUTE) - M.Weaken(6 SECONDS) - to_chat(M, "[user] teleports into you, knocking you to the floor with the bluespace wave!
    ") + for(var/mob/living/target in fragging_location)//Hit everything in the turf + target.apply_damage(20, BRUTE) + target.Weaken(6 SECONDS) + to_chat(target, span_warning("[user] teleports into you, knocking you to the floor with the bluespace wave!")) + /obj/item/paper/teleporter name = "Teleporter Guide" @@ -361,18 +417,25 @@ effective or pretty fucking useless.
    Do not expose the teleporter to electromagnetic pulses or attempt to use with a bag of holding, unwanted malfunctions may occur. "} + + /obj/item/storage/box/syndie_kit/teleporter name = "syndicate teleporter kit" + /obj/item/storage/box/syndie_kit/teleporter/populate_contents() new /obj/item/teleporter(src) new /obj/item/paper/teleporter(src) new /obj/item/clothing/glasses/chameleon/meson(src) + + /obj/effect/temp_visual/teleport_abductor/syndi_teleporter duration = 5 + /obj/item/teleporter/admin desc = "A strange syndicate version of a cult veil shifter. \n This one seems EMP proof, and with much better saftey protocols." charges = 8 max_charges = 8 flawless = TRUE + diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 57fa49d5bf4..ad810bee5e0 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -110,7 +110,8 @@ if(tank_one) split_gases() valve_open = FALSE - tank_one.forceMove(get_turf(src)) + tank_one.forceMove_turf() + usr?.put_in_hands(tank_one, ignore_anim = FALSE) tank_one = null update_icon() if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) @@ -119,7 +120,8 @@ if(tank_two) split_gases() valve_open = FALSE - tank_two.forceMove(get_turf(src)) + tank_two.forceMove_turf() + usr?.put_in_hands(tank_two, ignore_anim = FALSE) tank_two = null update_icon() if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) @@ -131,7 +133,8 @@ attached_device.attack_self(usr) if("remove_device") if(attached_device) - attached_device.forceMove(get_turf(src)) + attached_device.forceMove_turf() + usr?.put_in_hands(attached_device, ignore_anim = FALSE) attached_device.holder = null attached_device = null qdel(GetComponent(/datum/component/proximity_monitor)) @@ -145,28 +148,32 @@ /obj/item/transfer_valve/proc/process_activation(obj/item/D, normal = TRUE, special = TRUE, mob/user) if(toggle) - toggle = 0 + toggle = FALSE toggle_valve(user) - spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever - toggle = 1 + addtimer(VARSET_CALLBACK(src, toggle, TRUE), 5 SECONDS) // To stop a signal being spammed from a proxy sensor constantly going off or whatever -/obj/item/transfer_valve/update_icon() - overlays.Cut() - underlays = null +/obj/item/transfer_valve/update_icon_state() if(!tank_one && !tank_two && !attached_device) icon_state = "valve_1" - return - icon_state = "valve" + else + icon_state = "valve" + +/obj/item/transfer_valve/update_overlays() + . = ..() + underlays.Cut() + if(!tank_one && !tank_two && !attached_device) + return if(tank_one) - overlays += "[tank_one.icon_state]" + . += "[tank_one.icon_state]" if(tank_two) var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") J.Shift(WEST, 13) underlays += J if(attached_device) - overlays += "device" + . += "device" + /obj/item/transfer_valve/proc/merge_gases() tank_two.air_contents.volume += tank_one.air_contents.volume @@ -190,7 +197,7 @@ /obj/item/transfer_valve/proc/toggle_valve(mob/user) if(!valve_open && tank_one && tank_two) - valve_open = 1 + valve_open = TRUE var/turf/bombturf = get_turf(src) @@ -202,13 +209,17 @@ if(user) add_attack_logs(user, src, "Bomb valve opened with [attached_device ? attached_device : "no device"], attached by [key_name_log(attacher)]. Last touched by: [key_name_log(mob)]", ATKLOG_FEW) merge_gases() - spawn(20) // In case one tank bursts - for(var/i in 1 to 5) - update_icon() - sleep(10) - update_icon() + addtimer(CALLBACK(src, PROC_REF(toggle_process)), 2 SECONDS) // In case one tank bursts else if(valve_open && tank_one && tank_two) split_gases() - valve_open = 0 + valve_open = FALSE update_icon() + + +/obj/item/transfer_valve/proc/toggle_process() + for(var/i in 1 to 5) + update_icon() + sleep(1 SECONDS) + update_icon() + diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 32341ad3b27..7d369dbb619 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -246,7 +246,8 @@ GLOBAL_LIST_EMPTY(world_uplinks) "age" = html_encode(L.fields["age"]), "species" = html_encode(L.fields["species"]), "rank" = html_encode(L.fields["rank"]), - "fingerprint" = html_encode(L.fields["fingerprint"]) + "fingerprint" = html_encode(L.fields["fingerprint"]), + "exploit_record" = html_encode(L.fields["exploit_record"]), )) data["exploitable"] = exploitable diff --git a/code/game/objects/items/devices/window_painter.dm b/code/game/objects/items/devices/window_painter.dm index a44f0d13a09..8aa104f4cd8 100644 --- a/code/game/objects/items/devices/window_painter.dm +++ b/code/game/objects/items/devices/window_painter.dm @@ -11,9 +11,10 @@ /obj/structure/window/full/basic, /obj/machinery/door/window) -/obj/item/pipe_painter/window_painter/New() + +/obj/item/pipe_painter/window_painter/Initialize(mapload) . = ..() - update_icon() + update_icon(UPDATE_OVERLAYS) mode = "paint" @@ -25,11 +26,12 @@ if("Choose Color") mode = "paint" colour = input(user,"Choose Color") as color - update_icon() + update_icon(UPDATE_OVERLAYS) if("Color Presets") mode = "paint" colour = input("Which color do you want to use?", name, colour) in GLOB.pipe_colors - update_icon() + update_icon(UPDATE_OVERLAYS) + /obj/item/pipe_painter/window_painter/afterattack(atom/A, mob/user as mob) if(!is_type_in_list(A, paintable_windows) || !in_range(user, A)) @@ -43,10 +45,10 @@ colour = W.color mode = "paint" to_chat(user, span_notice("You copy color of this window.")) - update_icon() + update_icon(UPDATE_OVERLAYS) + + +/obj/item/pipe_painter/window_painter/update_overlays() + . = ..() + . += mutable_appearance(icon, icon_state = "window_painter_colour", color = colour) -/obj/item/pipe_painter/window_painter/update_icon() - overlays.Cut() - var/image/colour_image = image('icons/obj/device.dmi', "window_painter_colour") - colour_image.color = colour - overlays += colour_image diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index acbd3fc6722..6e1d9a05e4d 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -9,6 +9,7 @@ w_class = WEIGHT_CLASS_BULKY max_integrity = 40 resistance_flags = FLAMMABLE + custom_fire_overlay = "fire" var/rolled = FALSE /obj/item/flag/attackby(obj/item/W, mob/user, params) @@ -20,36 +21,34 @@ /obj/item/flag/attack_self(mob/user) rolled = !rolled user.visible_message("[user] [rolled ? "rolls up" : "unfurls"] [src].", "You [rolled ? "roll up" : "unfurl"] [src].", "You hear fabric rustling.") - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/flag/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = FALSE) ..() - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/flag/extinguish() ..() - update_icon() + update_icon(UPDATE_ICON_STATE) -/obj/item/flag/update_icon() - overlays.Cut() + +/obj/item/flag/update_icon_state() updateFlagIcon() item_state = icon_state if(rolled) icon_state = "[icon_state]_rolled" + custom_fire_overlay = "fire_rolled" + else + custom_fire_overlay = initial(custom_fire_overlay) if(resistance_flags & ON_FIRE) item_state = "[item_state]_fire" - if((resistance_flags & ON_FIRE) && rolled) - overlays += image('icons/obj/flag.dmi', src , "fire_rolled") - else if((resistance_flags & ON_FIRE) && !rolled) - overlays += image('icons/obj/flag.dmi', src , "fire") - if(ismob(loc)) - var/mob/M = loc - M.update_inv_r_hand() - M.update_inv_l_hand() + update_equipped_item() + /obj/item/flag/proc/updateFlagIcon() icon_state = initial(icon_state) + /obj/item/flag/nt name = "Nanotrasen flag" desc = "A flag proudly boasting the logo of NT." @@ -219,9 +218,16 @@ var/obj/item/grenade/boobytrap = null var/mob/trapper = null -/obj/item/flag/chameleon/New() + +/obj/item/flag/chameleon/Initialize(mapload) updated_icon_state = icon_state - ..() + . = ..() + + +/obj/item/flag/chameleon/Destroy() + QDEL_NULL(boobytrap) + return ..() + /obj/item/flag/chameleon/attack_self(mob/user) if(used) diff --git a/code/game/objects/items/hourglass.dm b/code/game/objects/items/hourglass.dm index 0dc486cc5c2..410b6efd85c 100644 --- a/code/game/objects/items/hourglass.dm +++ b/code/game/objects/items/hourglass.dm @@ -29,9 +29,10 @@ to_chat(user,span_notice("You stop the [src].")) //Sand magically flows back because that's more convinient to use. stop() -/obj/item/hourglass/update_icon() + +/obj/item/hourglass/update_icon_state() icon_state = "hourglass_[timing_id ? "active" : "idle"]" - return ..() + /obj/item/hourglass/proc/start() finish_time = world.time + time @@ -52,7 +53,7 @@ countdown.stop() finish_time = null animate(src) - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/hourglass/proc/finish() visible_message(span_notice("[src] stops.")) diff --git a/code/game/objects/items/mixing_bowl.dm b/code/game/objects/items/mixing_bowl.dm index 8eed9480fb6..c29b18236f0 100644 --- a/code/game/objects/items/mixing_bowl.dm +++ b/code/game/objects/items/mixing_bowl.dm @@ -155,12 +155,12 @@ if(prob(chance)) dirty = TRUE flags = null - icon_state = dirty_icon + update_icon(UPDATE_ICON_STATE) /obj/item/mixing_bowl/proc/clean() dirty = FALSE flags = OPENCONTAINER - icon_state = clean_icon + update_icon(UPDATE_ICON_STATE) /obj/item/mixing_bowl/wash(mob/user, atom/source) if(..()) @@ -187,3 +187,8 @@ ffuu.reagents.add_reagent("carbon", amount) ffuu.reagents.add_reagent("????", amount/10) make_dirty(75) + + +/obj/item/mixing_bowl/update_icon_state() + icon_state = dirty ? dirty_icon : clean_icon + diff --git a/code/game/objects/items/mountable_frames/frames.dm b/code/game/objects/items/mountable_frames/frames.dm index 179684139fc..66b185f4148 100644 --- a/code/game/objects/items/mountable_frames/frames.dm +++ b/code/game/objects/items/mountable_frames/frames.dm @@ -9,7 +9,7 @@ /obj/item/mounted/frame/attackby(obj/item/W, mob/user) ..() - if(istype(W, /obj/item/wrench) && sheets_refunded) + if(W.tool_behaviour == TOOL_WRENCH && sheets_refunded) new /obj/item/stack/sheet/metal(get_turf(src), sheets_refunded) qdel(src) diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index 3b9caa6fed6..adb72017165 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -31,7 +31,16 @@ /obj/item/stack/sheet/animalhide/random/New() ..() - var/htype = pick(/obj/item/stack/sheet/animalhide/cat,/obj/item/stack/sheet/animalhide/corgi,/obj/item/stack/sheet/animalhide/human,/obj/item/stack/sheet/animalhide/lizard,/obj/item/stack/sheet/animalhide/monkey) + var/htype = pick(/obj/item/stack/sheet/animalhide/cat, \ + /obj/item/stack/sheet/animalhide/corgi, \ + /obj/item/stack/sheet/animalhide/human, \ + /obj/item/stack/sheet/animalhide/lizard, \ + /obj/item/stack/sheet/animalhide/monkey, \ + /obj/item/stack/sheet/animalhide/wolpin, \ + /obj/item/stack/sheet/animalhide/stok, \ + /obj/item/stack/sheet/animalhide/neara, \ + /obj/item/stack/sheet/animalhide/farwa \ + ) new htype(loc, amount) qdel(src) @@ -262,7 +271,7 @@ desc = "What could it be?" /obj/structure/largecrate/evil/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/crowbar)) + if(W.tool_behaviour == TOOL_CROWBAR) var/list/menace = pick( /mob/living/simple_animal/hostile/carp,/mob/living/simple_animal/hostile/faithless,/mob/living/simple_animal/hostile/pirate, /mob/living/simple_animal/hostile/creature,/mob/living/simple_animal/hostile/pirate/ranged, /mob/living/simple_animal/hostile/hivebot,/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/pirate) @@ -294,7 +303,7 @@ desc = "What happens if you open it?" /obj/structure/largecrate/schrodinger/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/crowbar)) + if(W.tool_behaviour == TOOL_CROWBAR) add_fingerprint(user) sleep(2) var/mob/living/simple_animal/pet/cat/Cat = new(loc) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index caf8c3b9b69..2bf19296d14 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -204,7 +204,7 @@ else to_chat(user, "You need to attach a flash to it first!") - if(istype(W, /obj/item/multitool)) + if(W.tool_behaviour == TOOL_MULTITOOL) if(check_completion()) Interact(user) else @@ -366,7 +366,7 @@ if(living_user.lying || living_user.stat || living_user.IsStunned() || !Adjacent(living_user)) return var/obj/item/item_in_hand = living_user.get_active_hand() - if(!istype(item_in_hand, /obj/item/multitool)) + if(item_in_hand.tool_behaviour != TOOL_MULTITOOL) to_chat(living_user, "You need a multitool!") return diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index ee05a126338..ded789270b3 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -46,12 +46,10 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ . = ..() recipes = GLOB.rod_recipes -/obj/item/stack/rods/update_icon() +/obj/item/stack/rods/update_icon_state() var/amount = get_amount() - if((amount <= 5) && (amount > 0)) - icon_state = "rods-[amount]" - else - icon_state = "rods" + icon_state = "rods-[clamp(amount, 1, 5)]" + /obj/item/stack/rods/welder_act(mob/user, obj/item/I) if(get_amount() < 2) @@ -79,8 +77,8 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ is_cyborg = 1 cyborg_construction_stack = /obj/item/stack/rods -/obj/item/stack/rods/cyborg/update_icon() - return +/obj/item/stack/rods/cyborg/update_icon_state() + return // icon_state should always be a full stack of rods. /obj/item/stack/fireproof_rods name = "fireproof rods" @@ -103,10 +101,12 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ toolspeed = 1 usesound = 'sound/items/deconstruct.ogg' -/obj/item/stack/fireproof_rods/update_icon() + +/obj/item/stack/fireproof_rods/twentyfive + amount = 25 + + +/obj/item/stack/fireproof_rods/update_icon_state() var/amount = get_amount() - if((amount <= 5) && (amount > 0)) - icon_state = "f_rods-[amount]" - else - icon_state = "f_rods" + icon_state = "f_rods-[clamp(amount, 1, 5)]" diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index a7401ef97ee..6dde09bc9d8 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -42,6 +42,30 @@ GLOBAL_LIST_INIT(human_recipes, list( \ singular_name = "monkey hide piece" icon_state = "sheet-monkey" +/obj/item/stack/sheet/animalhide/wolpin + name = "wolpin hide" + desc = "The by-product of wolpin farming." + singular_name = "wolpin hide piece" + icon_state = "sheet-wolpin" + +/obj/item/stack/sheet/animalhide/stok + name = "stok hide" + desc = "The by-product of stok farming." + singular_name = "stok hide piece" + icon_state = "sheet-lizzard" + +/obj/item/stack/sheet/animalhide/neara + name = "neara hide" + desc = "The by-product of neara farming." + singular_name = "neara hide piece" + icon_state = "sheet-neara" + +/obj/item/stack/sheet/animalhide/farwa + name = "farwa hide" + desc = "The by-product of farwa farming." + singular_name = "farwa hide piece" + icon_state = "sheet-farwa" + /obj/item/stack/sheet/animalhide/lizard name = "lizard skin" desc = "Sssssss..." @@ -168,17 +192,18 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ /obj/item/clothing/head/hooded/explorer, /obj/item/clothing/head/helmet/space/plasmaman/mining, )) + /obj/item/stack/sheet/animalhide/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) if(!proximity_flag) return - if(is_type_in_typecache(target, goliath_platable_armor_typecache) || is_type_in_typecache(target, goliath_platable_armor_with_icon_typecache)) + var/platable_armor_with_icon = is_type_in_typecache(target, goliath_platable_armor_with_icon_typecache) + if(is_type_in_typecache(target, goliath_platable_armor_typecache) || platable_armor_with_icon) var/obj/item/clothing/C = target var/datum/armor/current_armor = C.armor - - if(current_armor.getRating("melee") < 60) - C.armor = current_armor.setRating(melee_value = min(current_armor.getRating("melee") + 10, 60)) - if(is_type_in_typecache(target, goliath_platable_armor_with_icon_typecache)) - switch(C.armor.getRating("melee")) + if(current_armor.getRating(MELEE) < 60) + C.armor = current_armor.setRating(melee_value = min(current_armor.getRating(MELEE) + 10, 60)) + if(platable_armor_with_icon) + switch(C.armor.getRating(MELEE)) if(40, 50) C.icon_state = "[initial(C.icon_state)]_reinf" C.item_color = "[initial(C.item_color)]_reinf" @@ -200,11 +225,11 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ var/obj/mecha/working/ripley/D = target if(D.hides < 3) D.hides++ - D.armor = D.armor.setRating(melee_value = min(D.armor.getRating("melee") + 10, 70)) - D.armor = D.armor.setRating(bullet_value = min(D.armor.getRating("bullet") + 5, 50)) - D.armor = D.armor.setRating(laser_value = min(D.armor.getRating("laser") + 5, 50)) + D.armor = D.armor.setRating(melee_value = min(D.armor.getRating(MELEE) + 10, 70)) + D.armor = D.armor.setRating(bullet_value = min(D.armor.getRating(BULLET) + 5, 50)) + D.armor = D.armor.setRating(laser_value = min(D.armor.getRating(LASER) + 5, 50)) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") - D.update_icon() + D.update_appearance(UPDATE_DESC|UPDATE_OVERLAYS) use(1) else to_chat(user, "You can't improve [D] any further!") @@ -230,7 +255,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ D.armor = D.armor.setRating(bullet_value = min(D.armor.getRating("bullet") + 5, 50)) D.armor = D.armor.setRating(laser_value = min(D.armor.getRating("laser") + 5, 50)) to_chat(user, "Вы нашли куда суется [name] и пихнули её на экзокостюм, усиливая защиту против атак.") - D.update_icon() + D.update_appearance(UPDATE_DESC|UPDATE_OVERLAYS) use(1) else to_chat(user, "Вы больше не можете найти куда [name] пристраивается!") diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 0c035c6161b..e735f797078 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -275,6 +275,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list( new /datum/stack_recipe("Bio bag", /obj/item/storage/bag/bio, 4), new /datum/stack_recipe("Book bag", /obj/item/storage/bag/books, 4), new /datum/stack_recipe("Chemistry bag", /obj/item/storage/bag/chemistry, 4), + new /datum/stack_recipe("Construction bag", /obj/item/storage/bag/construction, 4), new /datum/stack_recipe("Fish bag", /obj/item/storage/bag/fish, 4), new /datum/stack_recipe("Mining satchel", /obj/item/storage/bag/ore, 4), new /datum/stack_recipe("Plant bag", /obj/item/storage/bag/plants, 4), diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 9a5f7cf8d49..3c4757454f6 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -202,7 +202,7 @@ to_chat(usr, "This area already has beacon!") return FALSE if(R.result_type == /obj/structure/clockwork/functional/cogscarab_fabricator) - if(MAX_COG_FABRICATORS >= GLOB.clockwork_fabricators.len) + if(GLOB.clockwork_fabricators.len >= MAX_COG_FABRICATORS) to_chat(usr, "You can't build more than [MAX_COG_FABRICATORS] fabricators!") return FALSE if(usr.type == /mob/living/silicon/robot/cogscarab) diff --git a/code/game/objects/items/stacks/stack_recipe.dm b/code/game/objects/items/stacks/stack_recipe.dm index 3a5f5ba019a..47061ddc8c1 100644 --- a/code/game/objects/items/stacks/stack_recipe.dm +++ b/code/game/objects/items/stacks/stack_recipe.dm @@ -37,25 +37,7 @@ /datum/stack_recipe/cable_restraints/post_build(obj/item/stack/S, obj/result) var/obj/item/restraints/handcuffs/cable/cable_restraints = result if(istype(cable_restraints)) - var/color = "white" - - switch(S.color) - if(WIRE_COLOR_BLUE) - color = "blue" - if(WIRE_COLOR_CYAN) - color = "cyan" - if(WIRE_COLOR_GREEN) - color = "green" - if(WIRE_COLOR_ORANGE) - color = "orange" - if(WIRE_COLOR_PINK) - color = "pink" - if(WIRE_COLOR_RED) - color = "red" - if(WIRE_COLOR_YELLOW) - color = "yellow" - - cable_restraints.icon_state = "cuff_[color]" + cable_restraints.cable_color(S.color) ..() diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 40e6d1947fa..1f146003c3d 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -40,8 +40,8 @@ /obj/item/stack/telecrystal/twenty_five amount = 25 -/obj/item/stack/telecrystal/hundread +/obj/item/stack/telecrystal/hundred amount = 100 -/obj/item/stack/telecrystal/twohundread_fifty +/obj/item/stack/telecrystal/twohundred_fifty amount = 250 diff --git a/code/game/objects/items/theft_items.dm b/code/game/objects/items/theft_items.dm index 898ceb055b5..3c0f7d84752 100644 --- a/code/game/objects/items/theft_items.dm +++ b/code/game/objects/items/theft_items.dm @@ -82,6 +82,17 @@ else // Not cracked or dented. . += "Fine print on the box reads \"Cybersun Industries secure container, guaranteed thermite proof, assistant proof, and explosive resistant.\"" + +/obj/item/nuke_core_container/update_icon_state() + if(sealed) + icon_state = "core_container_sealed" + return + if(core) + icon_state = cracked ? "core_container_cracked_loaded" : "core_container_loaded" + else + icon_state = cracked ? "core_container_cracked_empty" : "core_container_empty" + + /obj/item/nuke_core_container/attack_hand(mob/user) if(cracked && core) unload(user) @@ -93,7 +104,7 @@ return new_core.forceMove(src) core = new_core - icon_state = "core_container_loaded" + update_icon(UPDATE_ICON_STATE) to_chat(user, "Container is sealing...") addtimer(CALLBACK(src, PROC_REF(seal)), 10 SECONDS) @@ -101,14 +112,14 @@ core.add_fingerprint(user) user.put_in_active_hand(core) core = null - icon_state = "core_container_cracked_empty" + update_icon(UPDATE_ICON_STATE) /obj/item/nuke_core_container/proc/seal() if(!QDELETED(core)) STOP_PROCESSING(SSobj, core) ADD_TRAIT(core, TRAIT_BLOCK_RADIATION, src) - icon_state = "core_container_sealed" sealed = TRUE + update_icon(UPDATE_ICON_STATE) playsound(src, 'sound/items/deconstruct.ogg', 60, TRUE) if(ismob(loc)) to_chat(loc, "[src] is permanently sealed, [core]'s radiation is contained.") @@ -116,7 +127,6 @@ /obj/item/nuke_core_container/attackby(obj/item/nuke_core/plutonium/core, mob/user) if(!istype(core) || cracked) return ..() - if(!user.drop_item_ground(core)) to_chat(user, "[core] is stuck to your hand!") return @@ -128,11 +138,8 @@ if(core) START_PROCESSING(SSobj, core) REMOVE_TRAIT(core, TRAIT_BLOCK_RADIATION, src) - icon_state = "core_container_cracked_loaded" - else - icon_state = "core_container_cracked_empty" - icon_state = "core_container_cracked_empty" cracked = TRUE + update_icon(UPDATE_ICON_STATE) /obj/item/paper/guides/antag/nuke_instructions info = "Как вскрыть ядерную боеголовку Нанотрейзен и вытащить из нее плутониевое ядро:
    \ @@ -182,8 +189,8 @@ return FALSE forceMove(tongs) tongs.sliver = src - tongs.icon_state = "supermatter_tongs_loaded" - tongs.item_state = "supermatter_tongs_loaded" + tongs.update_icon(UPDATE_ICON_STATE) + to_chat(user, "You carefully pick up [src] with [tongs].") else if(istype(I, /obj/item/scalpel/supermatter) || istype(I, /obj/item/nuke_core_container/supermatter)) // we don't want it to dust return @@ -243,15 +250,30 @@ QDEL_NULL(sliver) return ..() + +/obj/item/nuke_core_container/supermatter/update_name(updates = ALL) + . = ..() + name = cracked ? "broken supermatter bin" : initial(name) + + +/obj/item/nuke_core_container/supermatter/update_icon_state() + if(sealed) + icon_state = "supermatter_container_sealed" + return + if(sliver) + icon_state = cracked ? "core_container_cracked_loaded" : "core_container_loaded" + else + icon_state = "core_container_cracked_empty" + + /obj/item/nuke_core_container/supermatter/load(obj/item/retractor/supermatter/I, mob/user) if(!istype(I) || !I.sliver || sliver) return I.sliver.forceMove(src) sliver = I.sliver I.sliver = null - I.icon_state = "supermatter_tongs" - I.item_state = "supermatter_tongs" - icon_state = "supermatter_container_loaded" + I.update_icon(UPDATE_ICON_STATE) + update_icon(UPDATE_ICON_STATE) to_chat(user, "Container is sealing...") addtimer(CALLBACK(src, PROC_REF(seal)), 10 SECONDS) @@ -259,9 +281,9 @@ if(!QDELETED(sliver)) STOP_PROCESSING(SSobj, sliver) ADD_TRAIT(sliver, TRAIT_BLOCK_RADIATION, src) - icon_state = "supermatter_container_sealed" playsound(src, 'sound/items/deconstruct.ogg', 60, TRUE) sealed = TRUE + update_icon(UPDATE_ICON_STATE) if(ismob(loc)) to_chat(loc, "[src] is permanently sealed, [sliver] is safely contained.") @@ -271,9 +293,8 @@ sliver.forceMove(I) I.sliver = sliver sliver = null - I.icon_state = "supermatter_tongs_loaded" - I.item_state = "supermatter_tongs_loaded" - icon_state = "core_container_cracked_empty" + I.update_icon(UPDATE_ICON_STATE) + update_icon(UPDATE_ICON_STATE) to_chat(user, "You carefully pick up [I.sliver] with [I].") /obj/item/nuke_core_container/supermatter/attackby(obj/item/retractor/supermatter/tongs, mob/user) @@ -300,9 +321,8 @@ message_admins("[sliver] has consumed [key_name_admin(user)] [ADMIN_JMP(src)].") investigate_log("has consumed [key_name(user)].", "supermatter") user.gib() - icon_state = "core_container_cracked_empty" - qdel(sliver) - sliver = null + QDEL_NULL(sliver) + update_icon(UPDATE_ICON_STATE) else return ..() @@ -312,11 +332,8 @@ if(sliver) START_PROCESSING(SSobj, sliver) REMOVE_TRAIT(sliver, TRAIT_BLOCK_RADIATION, src) - icon_state = "supermatter_container_cracked_loaded" - else - icon_state = "core_container_cracked_empty" - name = "broken supermatter bin" cracked = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) /obj/item/scalpel/supermatter name = "supermatter scalpel" @@ -348,6 +365,12 @@ QDEL_NULL(sliver) return ..() + +/obj/item/retractor/supermatter/update_icon_state() + icon_state = "supermatter_tongs[sliver ? "_loaded" : ""]" + item_state = "supermatter_tongs[sliver ? "_loaded" : ""]" + + /obj/item/retractor/supermatter/afterattack(atom/O, mob/user, proximity) . = ..() if(!sliver) @@ -360,8 +383,7 @@ sliver.forceMove(loc) visible_message("[sliver] falls out of [src] as it hits the ground.") sliver = null - icon_state = "supermatter_tongs" - item_state = "supermatter_tongs" + update_icon(UPDATE_ICON_STATE) return ..() /obj/item/retractor/supermatter/proc/Consume(atom/movable/AM, mob/living/user) @@ -393,5 +415,5 @@ L.apply_effect(60, IRRADIATE) playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) QDEL_NULL(sliver) - icon_state = "supermatter_tongs" - item_state = "supermatter_tongs" + update_icon(UPDATE_ICON_STATE) + diff --git a/code/game/objects/items/tools/multitool.dm b/code/game/objects/items/tools/multitool.dm index c02177c1463..e8748f77bdb 100644 --- a/code/game/objects/items/tools/multitool.dm +++ b/code/game/objects/items/tools/multitool.dm @@ -74,12 +74,17 @@ STOP_PROCESSING(SSobj, src) return ..() + +/obj/item/multitool/ai_detect/update_icon_state() + icon_state = "[initial(icon_state)][detect_state]" + + /obj/item/multitool/ai_detect/process() if(track_cooldown > world.time) return detect_state = PROXIMITY_NONE multitool_detect() - icon_state = "[initial(icon_state)][detect_state]" + update_icon(UPDATE_ICON_STATE) track_cooldown = world.time + track_delay /obj/item/multitool/ai_detect/proc/multitool_detect() diff --git a/code/game/objects/items/tools/tool_behaviour.dm b/code/game/objects/items/tools/tool_behaviour.dm index b68de693855..c0afaafb462 100644 --- a/code/game/objects/items/tools/tool_behaviour.dm +++ b/code/game/objects/items/tools/tool_behaviour.dm @@ -43,7 +43,7 @@ return tool_use_check(user, amount) // A check called by tool_start_check once, and by use_tool on every tick of delay. -/obj/item/proc/tool_use_check(mob/living/user, amount) +/obj/item/proc/tool_use_check(mob/living/user, amount, silent = FALSE) return !amount /obj/item/proc/play_tool_sound(atom/target, volume = tool_volume) diff --git a/code/game/objects/items/tools/welder.dm b/code/game/objects/items/tools/welder.dm index 2e75f52fbdf..7fcc4f70406 100644 --- a/code/game/objects/items/tools/welder.dm +++ b/code/game/objects/items/tools/welder.dm @@ -115,14 +115,16 @@ M.update_inv_l_hand() // If welding tool ran out of fuel during a construction task, construction fails. -/obj/item/weldingtool/tool_use_check(mob/living/user, amount) +/obj/item/weldingtool/tool_use_check(mob/living/user, amount, silent = FALSE) if(!tool_enabled) - to_chat(user, "[src] has to be on to complete this task!") + if(!silent) + to_chat(user, "[src] has to be on to complete this task!") return FALSE if(GET_FUEL >= amount * requires_fuel) return TRUE else - to_chat(user, "You need more welding fuel to complete this task!") + if(!silent) + to_chat(user, "You need more welding fuel to complete this task!") return FALSE // When welding is about to start, run a normal tool_use_check, then flash a mob if it succeeds. @@ -174,15 +176,8 @@ else to_chat(user, "There's not enough fuel in [A] to refuel [src]!") -/obj/item/weldingtool/proc/update_torch() - overlays.Cut() - if(tool_enabled) - overlays += "[initial(icon_state)]-on" - item_state = "[initial(item_state)]1" - else - item_state = "[initial(item_state)]" -/obj/item/weldingtool/update_icon() +/obj/item/weldingtool/update_icon_state() if(low_fuel_changes_icon) var/ratio = GET_FUEL / maximum_fuel ratio = CEILING(ratio*4, 1) * 25 @@ -190,8 +185,16 @@ icon_state = initial(icon_state) else icon_state = "[initial(icon_state)][ratio]" - update_torch() - ..() + if(tool_enabled) + item_state = "[initial(item_state)]1" + else + item_state = "[initial(item_state)]" + + +/obj/item/weldingtool/update_overlays() + . = ..() + if(tool_enabled) + . += "[initial(icon_state)]-on" /obj/item/weldingtool/largetank diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index b9b13cbc6cc..77db10a3288 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -53,13 +53,16 @@ icon_state = "waterballoon-e" item_state = "waterballoon-e" + /obj/item/toy/balloon/New() ..() create_reagents(10) + /obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob) return + /obj/item/toy/balloon/afterattack(atom/A, mob/user, proximity) if(!proximity) return @@ -73,17 +76,18 @@ A.reagents.trans_to(src, 10) to_chat(user, "You fill the balloon with the contents of [A].") desc = "A translucent balloon with some form of liquid sloshing around in it." - update_icon() + update_icon(UPDATE_ICON_STATE) + /obj/item/toy/balloon/wash(mob/user, atom/source) if(reagents.total_volume < 10) reagents.add_reagent("water", min(10-reagents.total_volume, 10)) to_chat(user, "You fill the balloon from the [source].") desc = "A translucent balloon with some form of liquid sloshing around in it." - update_icon() - return + update_icon(UPDATE_ICON_STATE) + -/obj/item/toy/balloon/attackby(obj/O as obj, mob/user as mob, params) +/obj/item/toy/balloon/attackby(obj/O, mob/user, params) if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks/drinkingglass)) if(O.reagents) if(O.reagents.total_volume < 1) @@ -97,8 +101,8 @@ desc = "A translucent balloon with some form of liquid sloshing around in it." to_chat(user, "You fill the balloon with the contents of [O].") O.reagents.trans_to(src, 10) - update_icon() - return + update_icon(UPDATE_ICON_STATE) + /obj/item/toy/balloon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(reagents.total_volume >= 1) @@ -110,16 +114,17 @@ spawn(5) if(src) qdel(src) - return -/obj/item/toy/balloon/update_icon() - if(src.reagents.total_volume >= 1) + +/obj/item/toy/balloon/update_icon_state() + if(reagents.total_volume >= 1) icon_state = "waterballoon" item_state = "waterballoon" else icon_state = "waterballoon-e" item_state = "waterballoon-e" + /obj/item/toy/syndicateballoon name = "syndicate balloon" desc = "There is a tag on the back that reads \"FUK NT!11!\"." @@ -420,12 +425,6 @@ desc = "Mini-Mecha action figure! Collect them all! 11/11. This one is the mysterious Phazon combat mecha! Nobody's safe!" icon_state = "phazonprize" - - -/* -|| A Deck of Cards for playing various games of chance || -*/ - /obj/item/toy/nuke name = "\improper Nuclear Fission Explosive toy" desc = "A plastic model of a Nuclear Fission Explosive." @@ -433,22 +432,41 @@ icon_state = "nuketoyidle" w_class = WEIGHT_CLASS_SMALL var/cooldown = 0 + var/animation_stage = 0 + + +/obj/item/toy/nuke/update_icon_state() + switch(animation_stage) + if(1) + icon_state = "nuketoy" + if(2) + icon_state = "nuketoycool" + else + icon_state = initial(icon_state) + /obj/item/toy/nuke/attack_self(mob/user) if(cooldown < world.time) - cooldown = world.time + 1800 //3 minutes + cooldown = world.time + 3 MINUTES user.visible_message("[user] presses a button on [src]", "You activate [src], it plays a loud noise!", "You hear the click of a button.") - spawn(5) //gia said so - icon_state = "nuketoy" - playsound(src, 'sound/machines/alarm.ogg', 100, 0, 0) - sleep(135) - icon_state = "nuketoycool" - sleep(cooldown - world.time) - icon_state = "nuketoyidle" + INVOKE_ASYNC(src, PROC_REF(async_animation)) else var/timeleft = (cooldown - world.time) to_chat(user, "Nothing happens, and '[round(timeleft/10)]' appears on a small display.") + +/obj/item/toy/nuke/proc/async_animation() + animation_stage++ + update_icon(UPDATE_ICON_STATE) + playsound(src, 'sound/machines/alarm.ogg', 100, FALSE, 0) + sleep(13 SECONDS) + animation_stage++ + update_icon(UPDATE_ICON_STATE) + sleep(cooldown - world.time) + animation_stage = 0 + update_icon(UPDATE_ICON_STATE) + + /obj/item/toy/therapy name = "therapy doll" desc = "A toy for therapeutic and recreational purposes." @@ -949,25 +967,39 @@ icon_state = "ninja_plushie_green" item_state = "ninja_plushie_green" var/cooldown = 0 + var/plushie_color + + +/obj/item/toy/plushie/ninja/update_icon_state() + switch(plushie_color) + if("green") + icon_state = "ninja_plushie_green" + item_state = "ninja_plushie_green" + if("blue") + icon_state = "ninja_plushie_blue" + item_state = "ninja_plushie_blue" + if("red") + icon_state = "ninja_plushie_red" + item_state = "ninja_plushie_red" + else + icon_state = initial(icon_state) + item_state = initial(item_state) + /obj/item/toy/plushie/ninja/attack_self(mob/user as mob) . = ..() if(cooldown < world.time) cooldown = (world.time + 30) //3 second cooldown var/plushie_color = pick("green","blue","red") - switch (plushie_color) + update_icon(UPDATE_ICON_STATE) + switch(plushie_color) if("green") - icon_state = "ninja_plushie_green" - item_state = "ninja_plushie_green" user.visible_message(span_notice("[bicon(src)] The [name] says \"I am not afraid of the darkness! I am the darkness!\"")) if("blue") - icon_state = "ninja_plushie_blue" - item_state = "ninja_plushie_blue" user.visible_message(span_notice("[bicon(src)] The [name] says \"Your simple light won't stop me!\"")) if("red") - icon_state = "ninja_plushie_red" - item_state = "ninja_plushie_red" user.visible_message(span_notice("[bicon(src)] The [name] says \"You can run, but you can't hide!\"")) + plushie_color = null //New toys from another builds /obj/item/toy/plushie/nianplushie/beeplushie @@ -1038,9 +1070,6 @@ /obj/item/toy/plushie/blahaj/twohanded/Initialize(mapload) . = ..() - apply_twohanded_component() - -/obj/item/toy/plushie/blahaj/twohanded/proc/apply_twohanded_component() AddComponent(/datum/component/two_handed, require_twohands = TRUE) /obj/item/toy/plushie/blahaj/twohanded/attack_self(mob/user) @@ -1175,13 +1204,13 @@ desc = "Watch out for angry voxes!" -/obj/item/toy/plushie/pig/MouseDrop(atom/over) +/obj/item/toy/plushie/pig/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() if(!.) return FALSE var/mob/user = usr - if(over != user || user.incapacitated() || !ishuman(user)) + if(over_object != user || user.incapacitated() || !ishuman(user)) return FALSE if(user.put_in_hands(src, ignore_anim = FALSE)) @@ -1541,22 +1570,33 @@ w_class = WEIGHT_CLASS_SMALL bubble_icon = "alien" var/cooldown = 0 + var/animating = FALSE + + +/obj/item/toy/toy_xeno/update_icon_state() + icon_state = animating ? "[initial(icon_state)]_used" : initial(icon_state) + /obj/item/toy/toy_xeno/attack_self(mob/user) if(cooldown <= world.time) cooldown = (world.time + 50) //5 second cooldown user.visible_message("[user] pulls back the string on [src].") - icon_state = "[initial(icon_state)]_used" - sleep(5) - atom_say("Hiss!") - var/list/possible_sounds = list('sound/voice/hiss1.ogg', 'sound/voice/hiss2.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss4.ogg') - playsound(get_turf(src), pick(possible_sounds), 50, 1) - spawn(45) - if(src) - icon_state = "[initial(icon_state)]" + INVOKE_ASYNC(src, PROC_REF(async_animation)) else to_chat(user, "The string on [src] hasn't rewound all the way!") - return + + +/obj/item/toy/toy_xeno/proc/async_animation() + animating = TRUE + update_icon(UPDATE_ICON_STATE) + sleep(0.5 SECONDS) + atom_say("Hiss!") + var/list/possible_sounds = list('sound/voice/hiss1.ogg', 'sound/voice/hiss2.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss4.ogg') + playsound(get_turf(src), pick(possible_sounds), 50, TRUE) + sleep(4.5 SECONDS) + animating = FALSE + update_icon(UPDATE_ICON_STATE) + /obj/item/toy/russian_revolver name = "russian revolver" @@ -1669,11 +1709,8 @@ wieldsound = 'sound/weapons/chainsawstart.ogg' attack_verb = list("sawed", "cut", "hacked", "carved", "cleaved", "butchered", "felled", "timbered") -/obj/item/twohanded/toy/chainsaw/update_icon() - if(wielded) - icon_state = "chainsaw[wielded]" - else - icon_state = "chainsaw0" +/obj/item/twohanded/toy/chainsaw/update_icon_state() + icon_state = "chainsaw[HAS_TRAIT(src, TRAIT_WIELDED)]" /* * Cat Toy @@ -1994,7 +2031,7 @@ var/on = 0 var/activation_sound = 'sound/items/buttonclick.ogg' -/obj/item/toy/desk/update_icon() +/obj/item/toy/desk/update_icon_state() if(on) icon_state = "[initial(icon_state)]-on" else @@ -2004,8 +2041,8 @@ on = !on if(activation_sound) playsound(src.loc, activation_sound, 75, 1) - update_icon() - return 1 + update_icon(UPDATE_ICON_STATE) + return TRUE /obj/item/toy/desk/verb/rotate() set name = "Rotate" @@ -2046,7 +2083,7 @@ /obj/item/toy/desk/newtoncradle/attack_self(mob/user) on = !on - update_icon() + update_icon(UPDATE_ICON_STATE) if(on) soundloop.start() else @@ -2064,7 +2101,7 @@ /obj/item/toy/desk/fan/attack_self(mob/user) on = !on - update_icon() + update_icon(UPDATE_ICON_STATE) if(on) soundloop.start() else diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 8558fe64716..7d66c8d6d30 100755 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -35,7 +35,7 @@ AI MODULES to_chat(usr, "You haven't selected an AI to transmit laws to!") return - if(comp.current.stat == DEAD || comp.current.control_disabled == 1) + if(comp.current.stat == DEAD || comp.current.control_disabled) to_chat(usr, "Upload failed. No signal is being detected from the AI.") else if(comp.current.see_in_dark == 0) to_chat(usr, "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power.") diff --git a/code/game/objects/items/weapons/RCL.dm b/code/game/objects/items/weapons/RCL.dm index 48d606cabc7..08cdb091a93 100644 --- a/code/game/objects/items/weapons/RCL.dm +++ b/code/game/objects/items/weapons/RCL.dm @@ -34,7 +34,7 @@ loaded.amount = amount else return - update_icon() + update_icon(UPDATE_ICON_STATE) to_chat(user, "You add the cables to the [src]. It now contains [loaded.amount].") else ..() @@ -58,7 +58,7 @@ loaded.forceMove(user.loc) user.put_in_hands(loaded) loaded = null - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/twohanded/rcl/examine(mob/user) . = ..() @@ -71,7 +71,8 @@ active = 0 return ..() -/obj/item/twohanded/rcl/update_icon() + +/obj/item/twohanded/rcl/update_icon_state() if(!loaded) icon_state = "rcl-0" item_state = "rcl-0" @@ -89,10 +90,10 @@ else icon_state = "rcl-0" item_state = "rcl-0" - ..() + /obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1) - update_icon() + update_icon(UPDATE_ICON_STATE) if(!loaded || !loaded.amount) if(loud) to_chat(user, "The last of the cables unreel from [src].") @@ -151,4 +152,4 @@ loaded = new() loaded.max_amount = max_amount loaded.amount = max_amount - update_icon() + update_icon(UPDATE_ICON_STATE) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index f28abbee5e6..14eef7e85fb 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -31,7 +31,7 @@ RSF list("Deck of cards", 50, /obj/item/deck/cards), list("Prize ticket", 250, /obj/item/stack/tickets/five) ) - update_desc() + update_appearance(UPDATE_DESC) /obj/item/rsf/rff name = "\improper Rapid-Food-Fabricator" @@ -50,7 +50,7 @@ RSF list("Chimichanga", 3000, /obj/item/reagent_containers/food/snacks/chimichanga), list("Ikura sushi", 3000, /obj/item/reagent_containers/food/snacks/sushi_Ikura) ) - update_desc() + update_appearance(UPDATE_DESC) /obj/item/rsf/attackby(obj/item/W as obj, mob/user as mob, params) ..() @@ -72,9 +72,9 @@ RSF else mode++ to_chat(user, "Changed dispensing mode to '" + configured_items[mode][1] + "'") - update_desc() + update_appearance(UPDATE_DESC) -/obj/item/rsf/update_desc() +/obj/item/rsf/update_desc(updates = ALL) . = ..() desc = initial(desc) + " Currently set to dispense '[configured_items[mode][1]]'." diff --git a/code/game/objects/items/weapons/anomaly_extract.dm b/code/game/objects/items/weapons/anomaly_extract.dm index db8ce528f67..3ef0cf4d80d 100644 --- a/code/game/objects/items/weapons/anomaly_extract.dm +++ b/code/game/objects/items/weapons/anomaly_extract.dm @@ -1,3 +1,5 @@ +#define COOLDOWN_TO_SLIMEPERSON (10 SECONDS) +#define COOLDOWN_TO_SLIME_MOB (40 SECONDS) /obj/item/anomaly_extract name = "Strange syringe" desc = "Syringe with a blunt needle." @@ -41,7 +43,7 @@ sound = 'sound/effects/mob_effects/slime_squish.ogg' human_req = FALSE clothes_req = FALSE - base_cooldown = 1 MINUTES + base_cooldown = COOLDOWN_TO_SLIMEPERSON var/is_transformed = FALSE var/mob/living/carbon/human/original_body @@ -84,9 +86,9 @@ /obj/effect/proc_holder/spell/slime_degradation/before_cast(list/targets, mob/user) . = ..() if(is_transformed) - cooldown_handler.recharge_duration = 10 MINUTES + cooldown_handler.recharge_duration = COOLDOWN_TO_SLIME_MOB else - cooldown_handler.recharge_duration = 1 MINUTES + cooldown_handler.recharge_duration = COOLDOWN_TO_SLIMEPERSON /obj/effect/proc_holder/spell/slime_degradation/cast(list/targets, mob/living/carbon/human/user = usr) @@ -142,7 +144,7 @@ var/self_message = death_provoked ? span_userdanger("You can't take the strain of sustaining [user]'s shape in this condition, it begins to fall apart!") : span_notice("You start to transform back into human.") user.visible_message(span_warning("[user] shape becomes fuzzy before it takes human form!"), self_message, span_notice("You hear something squishing...")) if(death_provoked) - cooldown_handler.recharge_duration = 10 MINUTES + cooldown_handler.recharge_duration = COOLDOWN_TO_SLIME_MOB cooldown_handler.start_recharge() playsound(get_turf(usr), sound, 50, TRUE) user.density = FALSE @@ -237,3 +239,6 @@ M.mind.RemoveSpell(/obj/effect/proc_holder/spell/slime_degradation) M.mind.RemoveSpell(/obj/effect/proc_holder/spell/slime_selfheat) . = ..() + +#undef COOLDOWN_TO_SLIMEPERSON +#undef COOLDOWN_TO_SLIME_MOB diff --git a/code/game/objects/items/weapons/cash.dm b/code/game/objects/items/weapons/cash.dm index 02482326efa..0e3ab7cd767 100644 --- a/code/game/objects/items/weapons/cash.dm +++ b/code/game/objects/items/weapons/cash.dm @@ -22,8 +22,7 @@ max_amount = CASHMAX merge_type = /obj/item/stack/spacecash -/obj/item/stack/spacecash/update_icon() - ..() +/obj/item/stack/spacecash/update_icon_state() name = "[amount == CASHMAX ? "[CASHMAX]" : amount] Credit[amount > 1 ? "s" : ""]" switch(amount) if(CASH1 to CASH2 - 1) @@ -114,8 +113,7 @@ ..() update_icon() -/obj/item/stack/spacecash/ussp/update_icon() - ..() +/obj/item/stack/spacecash/ussp/update_icon_state() name = "[amount == CASHMAX ? "[CASHMAX]" : amount] Ruble[amount > 1 ? "s" : ""]" switch(amount) if(CASH1 to CASH2 - 1) diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm index 2635469cbb5..3144ffb2f15 100644 --- a/code/game/objects/items/weapons/chrono_eraser.dm +++ b/code/game/objects/items/weapons/chrono_eraser.dm @@ -63,8 +63,8 @@ TED = new(src.loc) qdel(src) -/obj/item/gun/energy/chrono_gun/update_icon() - return +/obj/item/gun/energy/chrono_gun/update_overlays() + return list() /obj/item/gun/energy/chrono_gun/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override, bonus_spread = 0) if(field) @@ -177,7 +177,7 @@ cached_icon.Insert(mob_icon, "frame[i]") mob_underlay = mutable_appearance(cached_icon, "frame1") - update_icon() + update_icon(UPDATE_ICON_STATE) desc = initial(desc) + "
    It appears to contain [target.name]." START_PROCESSING(SSobj, src) @@ -191,7 +191,7 @@ /obj/structure/chrono_field/has_prints() return FALSE -/obj/structure/chrono_field/update_icon() +/obj/structure/chrono_field/update_icon_state() var/ttk_frame = 1 - (tickstokill / initial(tickstokill)) ttk_frame = clamp(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT) if(ttk_frame != RPpos) @@ -220,7 +220,7 @@ captured.Paralyse(8 SECONDS) if(captured.loc != src) captured.forceMove(src) - update_icon() + update_icon(UPDATE_ICON_STATE) if(gun) if(gun.field_check(src)) tickstokill-- diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index f30408adbf3..be4efb96aa6 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -151,12 +151,6 @@ LIGHTERS ARE IN LIGHTERS.DM light("[user] lights [user.p_their()] [name] with [N]. Someone please give [user.p_their()] zippo..") - //can't think of any other way to update the overlays :< - user.update_inv_wear_mask() - user.update_inv_l_hand() - user.update_inv_r_hand() - - /obj/item/clothing/mask/cigarette/afterattack(obj/item/reagent_containers/glass/glass, mob/user, proximity) ..() if(!proximity) @@ -172,46 +166,59 @@ LIGHTERS ARE IN LIGHTERS.DM to_chat(user, "[src] is full.") +/obj/item/clothing/mask/cigarette/update_icon_state() + icon_state = lit ? icon_on : icon_off + item_state = lit ? icon_on : initial(item_state) + update_equipped_item() + + +/obj/item/clothing/mask/cigarette/update_name(updates = ALL) + . = ..() + name = lit ? "lit [initial(name)]" : initial(name) + + /obj/item/clothing/mask/cigarette/proc/light(flavor_text = null) - if(!lit) - lit = TRUE - name = "lit [name]" - attack_verb = list("burnt", "singed") - hitsound = 'sound/items/welder.ogg' - damtype = "fire" - force = 4 - if(reagents.get_reagent_amount("plasma")) // the plasma explodes when exposed to fire - var/datum/effect_system/reagents_explosion/e = new() - e.set_up(round(reagents.get_reagent_amount("plasma") / 2.5, 1), get_turf(src), 0, 0) - e.start() - if(ismob(loc)) - var/mob/M = loc - M.temporarily_remove_item_from_inventory(src, force = TRUE) - qdel(src) - return - if(reagents.get_reagent_amount("fuel")) // the fuel explodes, too, but much less violently - var/datum/effect_system/reagents_explosion/e = new() - e.set_up(round(reagents.get_reagent_amount("fuel") / 5, 1), get_turf(src), 0, 0) - e.start() - if(ismob(loc)) - var/mob/M = loc - M.temporarily_remove_item_from_inventory(src, force = TRUE) - qdel(src) - return - reagents.set_reacting(TRUE) - reagents.handle_reactions() - icon_state = icon_on - item_state = icon_on - if(flavor_text) - var/turf/T = get_turf(src) - T.visible_message(flavor_text) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.wear_mask == src) // Don't update if it's just in their hand - H.wear_mask_update(src) - set_light(2, 0.25, "#E38F46") - START_PROCESSING(SSobj, src) - playsound(src, 'sound/items/lighter/light.ogg', 25, TRUE) + if(lit) + return + + lit = TRUE + attack_verb = list("burnt", "singed") + hitsound = 'sound/items/welder.ogg' + damtype = FIRE + force = 4 + + if(check_reagents_explosion()) + return + + reagents.set_reacting(TRUE) + reagents.handle_reactions() + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) + if(flavor_text) + var/turf/T = get_turf(src) + T.visible_message(flavor_text) + set_light(2, 0.25, "#E38F46") + START_PROCESSING(SSobj, src) + playsound(src, 'sound/items/lighter/light.ogg', 25, TRUE) + + +/obj/item/clothing/mask/cigarette/proc/check_reagents_explosion() + var/reagent = "" + var/reagent_divisor = 2.5 + if(reagents.get_reagent_amount("plasma")) + reagent = "plasma" + else if(reagents.get_reagent_amount("fuel")) + reagent = "fuel" + reagent_divisor = 5 + if(!reagent) + return FALSE + + var/datum/effect_system/reagents_explosion/explosion = new + explosion.set_up(round(reagents.get_reagent_amount(reagent) / reagent_divisor, 1), get_turf(src), 0, 0) + if(ismob(loc)) + var/mob/user = loc + user.temporarily_remove_item_from_inventory(src, force = TRUE) + qdel(src) + return TRUE /obj/item/clothing/mask/cigarette/process() @@ -403,16 +410,11 @@ LIGHTERS ARE IN LIGHTERS.DM /obj/item/clothing/mask/cigarette/pipe/light(flavor_text = null) if(!lit) lit = TRUE - damtype = "fire" - icon_state = icon_on - item_state = icon_on + damtype = FIRE + update_icon(UPDATE_ICON_STATE) if(flavor_text) var/turf/T = get_turf(src) T.visible_message(flavor_text) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.wear_mask == src) // Don't update if it's just in their hand - H.wear_mask_update(src) START_PROCESSING(SSobj, src) /obj/item/clothing/mask/cigarette/pipe/process() @@ -420,13 +422,11 @@ LIGHTERS ARE IN LIGHTERS.DM smoketime-- if(smoketime < 1) new /obj/effect/decal/cleanable/ash(location) + lit = FALSE + update_icon(UPDATE_ICON_STATE) if(ismob(loc)) var/mob/living/M = loc to_chat(M, "Your [name] goes out, and you empty the ash.") - lit = FALSE - icon_state = icon_off - item_state = icon_off - M.update_inv_wear_mask() STOP_PROCESSING(SSobj, src) return smoke() @@ -435,8 +435,7 @@ LIGHTERS ARE IN LIGHTERS.DM if(lit) user.visible_message("[user] puts out [src].") lit = FALSE - icon_state = icon_off - item_state = icon_off + update_icon(UPDATE_ICON_STATE) STOP_PROCESSING(SSobj, src) return if(smoketime <= 0) diff --git a/code/game/objects/items/weapons/conversion_kit.dm b/code/game/objects/items/weapons/conversion_kit.dm index 4eb09ff6f6e..98d4fe87dd3 100644 --- a/code/game/objects/items/weapons/conversion_kit.dm +++ b/code/game/objects/items/weapons/conversion_kit.dm @@ -2,20 +2,19 @@ /obj/item/conversion_kit name = "\improper Revolver Conversion Kit" desc = "A professional conversion kit used to convert any knock off revolver into the real deal capable of shooting lethal .357 rounds without the possibility of catastrophic failure." - icon_state = "kit" + icon_state = "kit_0" flags = CONDUCT w_class = WEIGHT_CLASS_SMALL origin_tech = "combat=2" - var/open = 0 + var/open = FALSE -/obj/item/conversion_kit/New() - ..() - update_icon() -/obj/item/conversion_kit/update_icon() - icon_state = "[initial(icon_state)]_[open]" +/obj/item/conversion_kit/update_icon_state() + icon_state = "kit_[open]" + /obj/item/conversion_kit/attack_self(mob/user) open = !open to_chat(user, "You [open ? "open" : "close"] the conversion kit.") - update_icon() + update_icon(UPDATE_ICON_STATE) + diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 68407db2445..03e5bee0d3f 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -58,17 +58,23 @@ colour = pick(lipstick_colors) name = "[colour] lipstick" + +/obj/item/lipstick/update_icon_state() + . = ..() + icon_state = "lipstick[open ? "_uncap" : ""]" + + +/obj/item/lipstick/update_overlays() + . = ..() + if(open) + . += mutable_appearance(icon, icon_state = "lipstick_uncap_color", color = lipstick_colors[colour]) + + /obj/item/lipstick/attack_self(mob/user) - cut_overlays() to_chat(user, "You twist \the [src] [open ? "closed" : "open"].") open = !open - if(open) - var/mutable_appearance/colored = mutable_appearance('icons/obj/items.dmi', "lipstick_uncap_color") - colored.color = lipstick_colors[colour] - icon_state = "lipstick_uncap" - add_overlay(colored) - else - icon_state = "lipstick" + update_icon() + /obj/item/lipstick/attack(mob/M, mob/user) if(!open || !istype(M)) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 0a01992d56f..8a368909ce8 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -26,33 +26,41 @@ /// Type of paddles that should be attached to this defib. var/obj/item/twohanded/shockpaddles/paddle_type = /obj/item/twohanded/shockpaddles -/obj/item/defibrillator/get_cell() - return cell -/obj/item/defibrillator/New() //starts without a cell for rnd - ..() +/obj/item/defibrillator/Initialize(mapload) // Base version starts without a cell for rnd + . = ..() paddles = new paddle_type(src) - update_icon() - return + update_icon(UPDATE_OVERLAYS) -/obj/item/defibrillator/loaded/New() //starts with hicap - ..() + +/obj/item/defibrillator/Destroy() + if(!paddles_on_defib) + var/holder = get(paddles.loc, /mob/living/carbon/human) + retrieve_paddles(holder) + QDEL_NULL(paddles) + QDEL_NULL(cell) + return ..() + + +/obj/item/defibrillator/loaded/Initialize(mapload) // Loaded version starts with high-capacity cell. + . = ..() cell = new(src) - update_icon() - return + update_icon(UPDATE_OVERLAYS) + -/obj/item/defibrillator/update_icon() +/obj/item/defibrillator/get_cell() + return cell + + +/obj/item/defibrillator/update_icon(updates = ALL) update_power() - update_overlays() - update_charge() + ..() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() /obj/item/defibrillator/examine(mob/user) . = ..() - . += "Ctrl-click to remove the paddles from the defibrillator." + . += span_info("Ctrl-Click to remove the paddles from the defibrillator.") + /obj/item/defibrillator/proc/update_power() if(cell) @@ -63,190 +71,192 @@ else powered = FALSE + /obj/item/defibrillator/update_overlays() - overlays.Cut() + . = ..() if(paddles_on_defib) - overlays += "[icon_state]-paddles" + . += "[icon_state]-paddles" if(powered) - overlays += "[icon_state]-powered" - if(!cell) - overlays += "[icon_state]-nocell" + . += "[icon_state]-powered" if(!safety) - overlays += "[icon_state]-emagged" - -/obj/item/defibrillator/proc/update_charge() - if(powered && cell) //so it doesn't show charge if it's unpowered + . += "[icon_state]-emagged" + if(powered && cell) var/ratio = cell.charge / cell.maxcharge ratio = CEILING(ratio*4, 1) * 25 - overlays += "[icon_state]-charge[ratio]" + . += "[icon_state]-charge[ratio]" + if(!cell) + . += "[icon_state]-nocell" + /obj/item/defibrillator/CheckParts(list/parts_list) ..() cell = locate(/obj/item/stock_parts/cell) in contents - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/defibrillator/ui_action_click(mob/user) if(!ishuman(user) || !Adjacent(user)) return - toggle_paddles() + toggle_paddles(user) /obj/item/defibrillator/CtrlClick(mob/user) if(!ishuman(user) || !Adjacent(user)) return - toggle_paddles() + toggle_paddles(user) /obj/item/defibrillator/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/C = W if(cell) - to_chat(user, "[src] already has a cell.") + to_chat(user, span_notice("[src] already has a cell.")) else if(C.maxcharge < paddles.revivecost) - to_chat(user, "[src] requires a higher capacity cell.") + to_chat(user, span_notice("[src] requires a higher capacity cell.")) return if(!user.drop_transfer_item_to_loc(W, src)) return cell = W - to_chat(user, "You install a cell in [src].") - - else if(istype(W, /obj/item/screwdriver)) - if(cell) - cell.update_icon() - cell.loc = get_turf(loc) - cell = null - to_chat(user, "You remove the cell from the [src].") + update_icon(UPDATE_OVERLAYS) + to_chat(user, span_notice("You install a cell in [src].")) else if(W == paddles) - toggle_paddles() + toggle_paddles(user) + + else + return ..() + - update_icon() - return +/obj/item/defibrillator/screwdriver_act(mob/living/user, obj/item/I) + if(!cell) + to_chat(user, span_notice("[src] doesn't have a cell.")) + return + + // we want an infinite power cell to stay inside (used in advanced compact defib) + if(istype(cell, /obj/item/stock_parts/cell/infinite)) + to_chat(user, span_notice("[src] somehow resists your attempt to remove a cell.")) + return + + cell.update_icon() + cell.forceMove_turf() + cell = null + I.play_tool_sound(src) + to_chat(user, span_notice("You remove the cell from [src].")) + update_icon(UPDATE_OVERLAYS) + return TRUE -/obj/item/defibrillator/emag_act(mob/user) + +/obj/item/defibrillator/emag_act(user) if(safety) add_attack_logs(user, src, "emagged") safety = FALSE if(user) - to_chat(user, "You silently disable [src]'s safety protocols with the card.") + to_chat(user, span_warning("You silently disable [src]'s safety protocols with the card.")) else add_attack_logs(user, src, "un-emagged") safety = TRUE - if(user) - to_chat(user, "You silently enable [src]'s safety protocols with the card.") - update_icon() + to_chat(user, span_notice("You silently enable [src]'s safety protocols with the card.")) + update_icon(UPDATE_OVERLAYS) + /obj/item/defibrillator/emp_act(severity) if(cell) deductcharge(1000 / severity) if(safety) safety = FALSE - visible_message("[src] beeps: Safety protocols disabled!") - playsound(get_turf(src), 'sound/machines/defib_saftyoff.ogg', 50, 0) + visible_message(span_notice("[src] beeps: Safety protocols disabled!")) + playsound(get_turf(src), 'sound/machines/defib_saftyoff.ogg', 50, FALSE) else safety = TRUE - visible_message("[src] beeps: Safety protocols enabled!") - playsound(get_turf(src), 'sound/machines/defib_saftyon.ogg', 50, 0) - update_icon() + visible_message(span_notice("[src] beeps: Safety protocols enabled!")) + playsound(get_turf(src), 'sound/machines/defib_saftyon.ogg', 50, FALSE) + update_icon(UPDATE_OVERLAYS) ..() -/obj/item/defibrillator/verb/toggle_paddles() + +/obj/item/defibrillator/verb/toggle_paddles_verb() set name = "Toggle Paddles" set category = "Object" + set src in oview(1) + + toggle_paddles(usr) + +/obj/item/defibrillator/proc/toggle_paddles(mob/living/carbon/human/user = usr) if(!paddles) - to_chat(usr, span_warning("[src] has no paddles!")) + to_chat(user, span_warning("[src] has no paddles!")) return if(paddles_on_defib) - //Detach the paddles into the user's hands + dispence_paddles(user) + else + retrieve_paddles(user) - var/mob/living/carbon/human/user = usr - var/obj/item/organ/external/temp2 = user.bodyparts_by_name[BODY_ZONE_PRECISE_R_HAND] - var/obj/item/organ/external/temp = user.bodyparts_by_name[BODY_ZONE_PRECISE_L_HAND] + for(var/datum/action/action as anything in actions) + action.UpdateButtonIcon() - if(user.incapacitated()) - return - if(!temp || !temp.is_usable() && !temp2 || !temp2.is_usable()) - to_chat(user, span_warning("You can't use your hand to take out the paddles!")) - return +/obj/item/defibrillator/proc/dispence_paddles(mob/living/carbon/human/user) + if(!paddles || !paddles_on_defib || !ishuman(user) || user.incapacitated()) + return - if((user.r_hand != null && user.l_hand != null)) - to_chat(user, span_warning("You need a free hand to hold the paddles!")) - return + //Detach the paddles into the user's hands + var/obj/item/organ/external/hand_left = user.get_organ(BODY_ZONE_PRECISE_L_HAND) + var/obj/item/organ/external/hand_right = user.get_organ(BODY_ZONE_PRECISE_R_HAND) + + if((!hand_left || !hand_left.is_usable()) && (!hand_right || !hand_right.is_usable())) + to_chat(user, span_warning("You can't use your hands to take out the paddles!")) + return - //We need to do this like that since defib paddles have their own behavior on dropped() - if(!is_on_user(user)) - paddles.forceMove_turf() + paddles.loc = get_turf(src) // we need this to play animation properly + if(!user.put_in_hands(paddles, ignore_anim = FALSE)) + paddles.loc = src + to_chat(user, span_warning("You need a free hand to hold the paddles!")) + return - if(!user.put_in_hands(paddles, ignore_anim = FALSE)) - paddles.forceMove(src) - to_chat(user, span_warning("You need a free hand to hold the paddles!")) - return + paddles_on_defib = FALSE + paddles.update_icon(UPDATE_ICON_STATE) + update_icon(UPDATE_OVERLAYS) - paddles_on_defib = FALSE - else //remove in any case because some automatic shit - remove_paddles(usr) - update_icon() +/obj/item/defibrillator/proc/retrieve_paddles(mob/user) + if(!paddles || paddles_on_defib) + return + if(user?.is_in_hands(paddles)) + user.drop_item_ground(paddles) + paddles.do_pickup_animation(src) + paddles.forceMove(src) + paddles_on_defib = TRUE + update_icon(UPDATE_OVERLAYS) + paddles.update_icon(UPDATE_ICON_STATE) /obj/item/defibrillator/equipped(mob/user, slot) - ..() + . = ..() if(slot != slot_back) - remove_paddles(user) - update_icon() + retrieve_paddles(user) -/obj/item/defibrillator/item_action_slot_check(slot, mob/user) - if(slot == slot_back) - return TRUE - -/obj/item/defibrillator/proc/remove_paddles(mob/user) // from your hands - if(user.is_in_hands(paddles)) - return user.drop_item_ground(paddles) - return TRUE +/obj/item/defibrillator/item_action_slot_check(slot, mob/user) + return slot == slot_back -/obj/item/defibrillator/Destroy() - if(!paddles_on_defib) - var/M = get(paddles, /mob) - remove_paddles(M) - QDEL_NULL(paddles) - 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 - update_icon() + update_icon(UPDATE_OVERLAYS) if(cell.use(chrgdeductamt)) - update_icon() + update_icon(UPDATE_OVERLAYS) return TRUE else - update_icon() + update_icon(UPDATE_OVERLAYS) return FALSE -/obj/item/defibrillator/proc/cooldowncheck(var/mob/user) - paddles.update_icon() - spawn(50) - if(cell) - if(cell.charge >= paddles.revivecost) - user.visible_message("[src] beeps: Unit ready.") - playsound(get_turf(src), 'sound/machines/defib_ready.ogg', 50, 0) - else - user.visible_message("[src] beeps: Charge depleted.") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - paddles.cooldown = FALSE - paddles.update_icon() - update_icon() - /obj/item/defibrillator/compact name = "compact defibrillator" desc = "A belt-equipped defibrillator that can be rapidly deployed." @@ -260,11 +270,10 @@ if(slot == slot_belt) return TRUE -/obj/item/defibrillator/compact/loaded/New() - ..() +/obj/item/defibrillator/compact/loaded/Initialize(mapload) + . = ..() cell = new(src) - update_icon() - return + update_icon(UPDATE_OVERLAYS) /obj/item/defibrillator/compact/combat name = "combat defibrillator" @@ -275,11 +284,10 @@ combat = TRUE safety = FALSE -/obj/item/defibrillator/compact/combat/loaded/New() - ..() +/obj/item/defibrillator/compact/combat/loaded/Initialize(mapload) + . = ..() cell = new(src) - update_icon() - return + update_icon(UPDATE_OVERLAYS) /obj/item/defibrillator/compact/advanced name = "advanced compact defibrillator" @@ -292,15 +300,17 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //Objective item, better not have it destroyed. var/next_emp_message //to prevent spam from the emagging message on the advanced defibrillator + /obj/item/defibrillator/compact/advanced/attackby(obj/item/W, mob/user, params) if(W == paddles) - toggle_paddles() - update_icon() + toggle_paddles(user) -/obj/item/defibrillator/compact/advanced/loaded/New() - ..() + +/obj/item/defibrillator/compact/advanced/loaded/Initialize(mapload) + . = ..() cell = new /obj/item/stock_parts/cell/infinite(src) - update_icon() + update_icon(UPDATE_OVERLAYS) + /obj/item/defibrillator/compact/advanced/emp_act(severity) if(world.time > next_emp_message) @@ -339,62 +349,71 @@ icon_state = "syndiepaddles" item_state = "syndiepaddles" + /obj/item/twohanded/shockpaddles/New(mainunit) ..() - if(check_defib_exists(mainunit, src)) - defib = mainunit - loc = defib - busy = FALSE - update_icon() - return + check_defib_exists(mainunit) + /obj/item/twohanded/shockpaddles/proc/spend_charge() defib.deductcharge(revivecost) + /obj/item/twohanded/shockpaddles/proc/trigger_cooldown(mob/user) cooldown = TRUE - defib.cooldowncheck(user) + update_icon(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, PROC_REF(on_cooldown_end), user), 5 SECONDS) + + +/obj/item/twohanded/shockpaddles/proc/on_cooldown_end(mob/living/silicon/robot/user) + var/check_cell = isrobot(user) ? user.cell.charge : defib.cell.charge + if(check_cell >= revivecost) + user.visible_message(span_notice("[src] beeps: Unit ready.")) + playsound(get_turf(src), 'sound/machines/defib_ready.ogg', 50) + else + user.visible_message(span_notice("[src] beeps: Charge depleted.")) + playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50) + cooldown = FALSE + update_icon(UPDATE_ICON_STATE) + + +/obj/item/twohanded/shockpaddles/update_icon_state() + var/is_wielded = HAS_TRAIT(src, TRAIT_WIELDED) + icon_state = "[initial(icon_state)][is_wielded][cooldown ? "_cooldown" : ""]" + item_state = "[initial(icon_state)][is_wielded]" -/obj/item/twohanded/shockpaddles/update_icon() - icon_state = "[initial(icon_state)][wielded]" - item_state = "[initial(icon_state)][wielded]" - if(cooldown) - icon_state = "[initial(icon_state)][wielded]_cooldown" /obj/item/twohanded/shockpaddles/suicide_act(mob/user) - user.visible_message("[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide.") + user.visible_message(span_suicide("[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide.")) defib.deductcharge(revivecost) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) return OXYLOSS + /obj/item/twohanded/shockpaddles/dropped(mob/user, silent = FALSE) - update_icon() + . = ..() if(defib) - to_chat(user, span_notice("The paddles snap back into the main unit.")) - if(!defib.is_on_user(user)) - do_pickup_animation(defib) - forceMove(defib) - defib.paddles_on_defib = TRUE - defib.update_icon() - else - return ..() + defib.toggle_paddles(user) + if(!silent) + to_chat(user, span_notice("The paddles snap back into the main unit.")) /obj/item/twohanded/shockpaddles/equip_to_best_slot(mob/user, force = FALSE) - user.drop_item_ground(src) + user.drop_item_ground(src) /obj/item/twohanded/shockpaddles/on_mob_move(dir, mob/user) if(defib && !in_range(defib, src)) user.drop_item_ground(src, force = TRUE) -/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, var/mob/living/carbon/human/M, var/obj/O) - if(!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns - M.temporarily_remove_item_from_inventory(O, TRUE) - qdel(O) - return FALSE - else - return TRUE + +/obj/item/twohanded/shockpaddles/proc/check_defib_exists(obj/item/defibrillator/mainunit) + if(!mainunit || !istype(mainunit)) //To avoid weird issues from admin spawns + qdel(src) + return + loc = mainunit + defib = mainunit + /obj/item/twohanded/shockpaddles/attack(mob/M, mob/user) var/tobehealed @@ -411,20 +430,20 @@ if(busy) return if(!isrobot(user) && !defib.powered) - user.visible_message("[defib] beeps: Unit is unpowered.") + user.visible_message(span_notice("[defib] beeps: Unit is unpowered.")) playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) return if(!isrobot(user) && !wielded) - to_chat(user, "You need to wield the paddles in both hands before you can use them on someone!") + to_chat(user, span_boldnotice("You need to wield the paddles in both hands before you can use them on someone!")) return if(cooldown) - to_chat(user, "[defib || src] is recharging.") + to_chat(user, span_notice("[defib || src] is recharging.")) return if(!ishuman(M)) if(isrobot(user)) - to_chat(user, "This unit is only designed to work on humanoid lifeforms.") + to_chat(user, span_notice("This unit is only designed to work on humanoid lifeforms.")) else - to_chat(user, "The instructions on [defib] don't mention how to revive that...") + to_chat(user, span_notice("The instructions on [defib] don't mention how to revive that...")) return else var/can_harm @@ -436,8 +455,10 @@ if(user.a_intent == INTENT_HARM && can_harm) busy = TRUE - H.visible_message("[user] has touched [H.name] with [src]!", \ - "[user] has touched [H.name] with [src]!") + H.visible_message( + span_danger("[user] has touched [H.name] with [src]!"), + span_userdanger("[user] has touched [H.name] with [src]!"), + ) H.adjustStaminaLoss(50) H.Weaken(4 SECONDS) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) @@ -450,10 +471,16 @@ spend_charge(user) trigger_cooldown(user) return - user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest.") + user.visible_message( + span_warning("[user] begins to place [src] on [M.name]'s chest."), + span_warning("You begin to place [src] on [M.name]'s chest."), + ) busy = TRUE if(do_after(user, 30 * toolspeed * gettoolspeedmod(user), target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process - user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") + user.visible_message( + span_notice("[user] places [src] on [M.name]'s chest."), + span_warning("You place [src] on [M.name]'s chest."), + ) playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) var/mob/dead/observer/ghost = H.get_ghost(TRUE) if(ghost && !ghost.client) @@ -469,27 +496,27 @@ for(var/obj/item/carried_item in H.contents) if(istype(carried_item, /obj/item/clothing/suit/space)) if(!ignores_hardsuits) - user.visible_message("[defib || src] buzzes: Patient's chest is obscured. Operation aborted.") + user.visible_message(span_notice("[defib || src] buzzes: Patient's chest is obscured. Operation aborted.")) playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE return if(H.undergoing_cardiac_arrest()) if(!H.get_int_organ(/obj/item/organ/internal/heart) && !H.get_int_organ(/obj/item/organ/internal/brain/slime)) //prevents defibing someone still alive suffering from a heart attack attack if they lack a heart - user.visible_message("[defib || src] buzzes: Resuscitation failed - Failed to pick up any heart electrical activity.") + user.visible_message(span_boldnotice("[defib || src] buzzes: Resuscitation failed - Failed to pick up any heart electrical activity.")) playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE return else var/obj/item/organ/internal/heart/heart = H.get_int_organ(/obj/item/organ/internal/heart) if(heart.is_dead()) - user.visible_message("[defib || src] buzzes: Resuscitation failed - Heart necrosis detected.") + user.visible_message(span_boldnotice("[defib || src] buzzes: Resuscitation failed - Heart necrosis detected.")) playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE return H.set_heartattack(FALSE) H.shock_internal_organs(100) - user.visible_message("[defib || src] pings: Cardiac arrhythmia corrected.") - M.visible_message("[M]'s body convulses a bit.") + user.visible_message(span_boldnotice("[defib || src] pings: Cardiac arrhythmia corrected.")) + M.visible_message(span_warning("[M]'s body convulses a bit.")) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) playsound(get_turf(src), "bodyfall", 50, 1) playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) @@ -499,7 +526,7 @@ return if(H.stat == DEAD) var/health = H.health - M.visible_message("[M]'s body convulses a bit.") + M.visible_message(span_warning("[M]'s body convulses a bit.")) playsound(get_turf(src), "bodyfall", 50, 1) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) var/total_cloneloss = H.cloneloss @@ -513,7 +540,7 @@ 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) H.adjustToxLoss(tobehealed) - user.visible_message("[defib || src] pings: Resuscitation successful.") + user.visible_message(span_boldnotice("[defib || src] pings: Resuscitation successful.")) playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) H.update_revive(TRUE, TRUE) H.KnockOut() @@ -534,25 +561,25 @@ add_attack_logs(user, M, "Revived with [src]") else if(tplus > tlimit|| !H.get_int_organ(/obj/item/organ/internal/heart)) - user.visible_message("[defib || src] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.") + user.visible_message(span_boldnotice("[defib || src] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.")) else if(total_cloneloss > 180 || total_bruteloss > 180 || total_burnloss > 180) - user.visible_message("[defib || src] buzzes: Resuscitation failed - Severe tissue damage detected.") + user.visible_message(span_boldnotice("[defib || src] buzzes: Resuscitation failed - Severe tissue damage detected.")) else if(ghost) if(!ghost.can_reenter_corpse) // DNR or AntagHUD - user.visible_message("[defib || src] buzzes: Resucitation failed: No electrical brain activity detected.") + user.visible_message(span_notice("[defib || src] buzzes: Resucitation failed: No electrical brain activity detected.")) else - user.visible_message("[defib || src] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.") - to_chat(ghost, "Your heart is being defibrillated. Return to your body if you want to be revived! (Verbs -> Ghost -> Re-enter corpse)") + user.visible_message(span_notice("[defib || src] buzzes: Resuscitation failed: Patient's brain is unresponsive. Further attempts may succeed.")) + to_chat(ghost, "[span_ghostalert("Your heart is being defibrillated. Return to your body if you want to be revived!")] (Verbs -> Ghost -> Re-enter corpse)") window_flash(ghost.client) - ghost << sound('sound/effects/genetics.ogg') + SEND_SOUND(ghost, 'sound/effects/genetics.ogg') else - user.visible_message("[defib || src] buzzes: Resuscitation failed.") + user.visible_message(span_notice("[defib || src] buzzes: Resuscitation failed.")) playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) spend_charge(user) trigger_cooldown(user) else - user.visible_message("[defib || src] buzzes: Patient is not in a valid state. Operation aborted.") + user.visible_message(span_notice("[defib || src] buzzes: Patient is not in a valid state. Operation aborted.")) playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE /* @@ -567,8 +594,12 @@ if(electrocute_mob(affecting, defib.cell, origin)) // shock anyone touching them >:) var/obj/item/organ/internal/heart/HE = affecting.get_organ_slot(INTERNAL_ORGAN_HEART) if(HE.parent_organ_zone == BODY_ZONE_CHEST && affecting.has_both_hands()) // making sure the shock will go through their heart (drask hearts are in their head), and that they have both arms so the shock can cross their heart inside their chest - affecting.visible_message("[affecting]'s entire body shakes as a shock travels up their arm!", \ - "You feel a powerful shock travel up your [affecting.hand ? affecting.get_organ(BODY_ZONE_L_ARM) : affecting.get_organ(BODY_ZONE_R_ARM)] and back down your [affecting.hand ? affecting.get_organ(BODY_ZONE_L_ARM) : affecting.get_organ(BODY_ZONE_R_ARM)]!") + var/obj/item/organ/external/bodypart_upper = affecting.hand ? affecting.get_organ(BODY_ZONE_L_ARM) : affecting.get_organ(BODY_ZONE_R_ARM) + var/obj/item/organ/external/bodypart_lower = affecting.hand ? affecting.get_organ(BODY_ZONE_PRECISE_L_HAND) : affecting.get_organ(BODY_ZONE_PRECISE_R_HAND) + affecting.visible_message( + span_danger("[affecting]'s entire body shakes as a shock travels up their arm!"), + span_userdanger("You feel a powerful shock travel up your [bodypart_upper.name] and back down your [bodypart_lower.name]!"), + ) affecting.set_heartattack(TRUE) /obj/item/twohanded/shockpaddles/borg @@ -576,7 +607,7 @@ icon_state = "defibpaddles0" item_state = "defibpaddles0" -/obj/item/twohanded/shockpaddles/borg/check_defib_exists() +/obj/item/twohanded/shockpaddles/borg/check_defib_exists(obj/item/defibrillator/mainunit) // No-op. /obj/item/twohanded/shockpaddles/borg/dropped(mob/user, silent = FALSE) @@ -590,21 +621,6 @@ /obj/item/twohanded/shockpaddles/borg/attack_self() // Standard two-handed weapon behavior is disabled. -/obj/item/twohanded/shockpaddles/borg/trigger_cooldown(mob/user) - cooldown = TRUE - update_icon() - var/mob/living/silicon/robot/R = user - spawn(50) - if(R.cell.charge >= revivecost) - user.visible_message("[src] beeps: Unit ready.") - playsound(get_turf(src), 'sound/machines/defib_ready.ogg', 50, 0) - else - user.visible_message("[src] beeps: Charge depleted.") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - cooldown = FALSE - update_icon() +/obj/item/twohanded/shockpaddles/borg/update_icon_state() + icon_state = "[initial(icon_state)][cooldown ? "_cooldown" : ""]" -/obj/item/twohanded/shockpaddles/borg/update_icon() - icon_state = "[initial(icon_state)]" - if(cooldown) - icon_state = "[initial(icon_state)]_cooldown" diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 8e6df9cde26..e7b90a0942c 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -6,25 +6,42 @@ can_hold = list(/obj/item/dice) allow_wrap = FALSE + /obj/item/storage/pill_bottle/dice/populate_contents() + var/special_die = pick("1", "2", "fudge", "00", "100") + if(special_die == "1") + new /obj/item/dice/d1(src) + if(special_die == "2") + new /obj/item/dice/d2(src) new /obj/item/dice/d4(src) new /obj/item/dice/d6(src) + if(special_die == "fudge") + new /obj/item/dice/fudge(src) new /obj/item/dice/d8(src) new /obj/item/dice/d10(src) + if(special_die == "00") + new /obj/item/dice/d00(src) new /obj/item/dice/d12(src) new /obj/item/dice/d20(src) - var/special_die = pick("1","2","fudge","00","100") - switch(special_die) - if("1") - new /obj/item/dice/d1(src) - if("2") - new /obj/item/dice/d2(src) - if("fudge") - new /obj/item/dice/fudge(src) - if("00") - new /obj/item/dice/d00(src) - if("100") - new /obj/item/dice/d100(src) + if(special_die == "100") + new /obj/item/dice/d100(src) + + +/obj/item/storage/box/dice + name = "Коробка игральных костей" + desc = "ЕЩЁ ОДНИ!? ДА БЛЯДЬ!" + icon_state = "box" + + +/obj/item/storage/box/dice/populate_contents() + new /obj/item/dice/d2(src) + new /obj/item/dice/d4(src) + new /obj/item/dice/d8(src) + new /obj/item/dice/d10(src) + new /obj/item/dice/d00(src) + new /obj/item/dice/d12(src) + new /obj/item/dice/d20(src) + /obj/item/storage/pill_bottle/dice/suicide_act(mob/user) user.visible_message("[user] Игра[pluralize_ru(user.gender,"ет","ют")] со смертью! Похоже, он[genderize_ru(user.gender,"","а","о","и")] пыта[pluralize_ru(user.gender,"ется","ются")] покончить жизнь самоубийством!") @@ -44,11 +61,18 @@ var/rigged = DICE_NOT_RIGGED var/rigged_value + /obj/item/dice/Initialize(mapload) . = ..() if(!result) result = roll(sides) - update_icon() + update_icon(UPDATE_OVERLAYS) + + +/obj/item/dice/update_overlays() + . = ..() + . += "[icon_state][result]" + /obj/item/dice/suicide_act(mob/user) user.visible_message("[user] играет со смертью! Похоже [user.p_theyre()] пытается покончить жизнь самоубийством!") @@ -122,8 +146,10 @@ icon_state = "d100" sides = 100 -/obj/item/dice/d100/update_icon() - return + +/obj/item/dice/d100/update_overlays() + return list() + /obj/item/dice/d20/e20 var/triggered = FALSE @@ -151,7 +177,7 @@ comment = "ДВАДЦАТКА!" else if(sides == 20 && result == 1) comment = "М-да, невезуха." - update_icon() + update_icon(UPDATE_OVERLAYS) if(initial(icon_state) == "d00") result = (result - 1) * 10 if(length(special_faces) == sides) @@ -193,20 +219,190 @@ add_attack_logs(user, src, "detonated with a roll of [actual_result]", ATKLOG_FEW) explosion(epicenter, round(result * 0.25), round(result * 0.5), round(result), round(result * 1.5), TRUE, capped, cause = key_name(user)+" E20") -/obj/item/dice/update_icon() - overlays.Cut() - overlays += "[icon_state][result]" -/obj/item/storage/box/dice - name = "Коробка игральных костей" - desc = "ЕЩЁ ОДНИ!? ДА БЛЯДЬ!" - icon_state = "box" +// Die of Fate +/obj/item/dice/d20/fate + name = "\improper Die of Fate" + desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky." + icon_state = "d20" + var/reusable = TRUE + var/used = FALSE + +/obj/item/dice/d20/fate/stealth + name = "d20" + desc = "A die with twenty sides. The preferred die to throw at the GM." + +/obj/item/dice/d20/fate/one_use + reusable = FALSE + +/obj/item/dice/d20/fate/one_use/stealth + name = "d20" + desc = "A die with twenty sides. The preferred die to throw at the GM." + +/obj/item/dice/d20/fate/cursed + name = "cursed Die of Fate" + desc = "A die with twenty sides. You feel that rolling this is a REALLY bad idea." + color = "#00BB00" + + rigged = DICE_TOTALLY_RIGGED + rigged_value = 1 + +/obj/item/dice/d20/fate/diceroll(mob/user) + . = ..() + if(!used) + if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) + to_chat(user, "You feel the magic of the dice is restricted to ordinary humans!") + return + + if(!reusable) + used = TRUE + + var/turf/T = get_turf(src) + T.visible_message("[src] flares briefly.") + + addtimer(CALLBACK(src, PROC_REF(effect), user, .), 1 SECONDS) + +/obj/item/dice/d20/fate/equipped(mob/user, slot, initial) + . = ..() + + if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) + to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") + user.drop_item_ground(src) + +/obj/item/dice/d20/fate/proc/create_smoke(amount) + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(amount, 0, drop_location()) + smoke.start() + +/obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user, roll) + var/turf/T = get_turf(src) + switch(roll) + if(1) + //Dust + T.visible_message("[user] turns to dust!") + user.dust() + if(2) + //Death + T.visible_message("[user] suddenly dies!") + user.death() + if(3) + //Swarm of creatures + T.visible_message("A swarm of creatures surround [user]!") + for(var/direction in GLOB.alldirs) + new /mob/living/simple_animal/hostile/netherworld(get_step(get_turf(user),direction)) + if(4) + //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)) + continue + qdel(I) + if(5) + //Monkeying + T.visible_message("[user] transforms into a monkey!") + user.monkeyize() + if(6) + //Cut speed + T.visible_message("[user] starts moving slower!") + var/datum/species/S = user.dna.species + S.speed_mod += 1 + if(7) + //Throw + T.visible_message("Unseen forces throw [user]!") + user.Stun(12 SECONDS) + user.adjustBruteLoss(50) + var/throw_dir = GLOB.cardinal + var/atom/throw_target = get_edge_target_turf(user, throw_dir) + user.throw_at(throw_target, 200, 4) + if(8) + //Fueltank Explosion + T.visible_message("An explosion bursts into existence around [user]!") + explosion(get_turf(user),-1,0,2, flame_range = 2, cause = src) + if(9) + //Cold + T.visible_message("[user] looks a little under the weather!") + var/datum/disease/virus/cold/D = new + D.Contract(user) + if(10) + //Nothing + T.visible_message("Nothing seems to happen.") + if(11) + //Cookie + T.visible_message("A cookie appears out of thin air!") + var/obj/item/reagent_containers/food/snacks/cookie/C = new(drop_location()) + create_smoke(2) + C.name = "Cookie of Fate" + if(12) + //Healing + T.visible_message("[user] looks very healthy!") + user.revive() + if(13) + //Mad Dosh + T.visible_message("Mad dosh shoots out of [src]!") + var/turf/Start = get_turf(src) + for(var/direction in GLOB.alldirs) + var/turf/dirturf = get_step(Start,direction) + if(rand(0,1)) + new /obj/item/stack/spacecash/c1000(dirturf) + else + var/obj/item/storage/bag/money/M = new(dirturf) + for(var/i in 1 to rand(5,50)) + new /obj/item/coin/gold(M) + if(14) + //Free Gun + T.visible_message("An impressive gun appears!") + create_smoke(2) + new /obj/item/gun/projectile/revolver/mateba(drop_location()) + if(15) + //Random One-use spellbook + T.visible_message("A magical looking book drops to the floor!") + create_smoke(2) + new /obj/item/spellbook/oneuse/random(drop_location()) + if(16) + //Servant & Servant Summon + T.visible_message("A Dice Servant appears in a cloud of smoke!") + var/mob/living/carbon/human/H = new(drop_location()) + create_smoke(2) + + H.equipOutfit(/datum/outfit/butler) + var/datum/mind/servant_mind = new /datum/mind() + var/datum/objective/O = new + O.owner = servant_mind + O.target = user.mind + O.explanation_text = "Serve [user.real_name]." + servant_mind.objectives += O + servant_mind.transfer_to(H) + + var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the servant of [user.real_name]?", ROLE_WIZARD, poll_time = 30 SECONDS, source = H) + if(LAZYLEN(candidates)) + var/mob/dead/observer/C = pick(candidates) + message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Dice Servant") + H.key = C.key + to_chat(H, "You are a servant of [user.real_name]. You must do everything in your power to follow their orders.") + + var/obj/effect/proc_holder/spell/summonmob/S = new + S.target_mob = H + user.mind.AddSpell(S) + + if(17) + //Tator Kit + T.visible_message("A suspicious box appears!") + new /obj/item/storage/box/syndicate(drop_location()) + create_smoke(2) + if(18) + //Captain ID + T.visible_message("A golden identification card appears!") + new /obj/item/card/id/captains_spare(drop_location()) + create_smoke(2) + 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 + + if(20) + //Free wizard! + T.visible_message("Magic flows out of [src] and into [user]!") + user.mind.make_Wizard() -/obj/item/storage/box/dice/populate_contents() - new /obj/item/dice/d2(src) - new /obj/item/dice/d4(src) - new /obj/item/dice/d8(src) - new /obj/item/dice/d10(src) - new /obj/item/dice/d00(src) - new /obj/item/dice/d12(src) - new /obj/item/dice/d20(src) diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index a6a59400212..c2113a08ee8 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -33,6 +33,16 @@ QDEL_NULL(buf) return ..() + +/obj/item/dnainjector/update_icon_state() + icon_state = "[initial(icon_state)][used ? "0" : ""]" + + +/obj/item/dnainjector/update_desc(updates = ALL) + . = ..() + desc = used ? "[initial(desc)] This one is used up." : initial(desc) + + /obj/item/dnainjector/proc/GetRealBlock(selblock) if(selblock == 0) return block @@ -67,51 +77,62 @@ else return buf.dna.SetUIValue(real_block,val) -/obj/item/dnainjector/proc/inject(mob/living/M, mob/user) + +/obj/item/dnainjector/proc/inject(mob/living/carbon/human/target, mob/user) if(used) return - if(isliving(M)) - M.apply_effect(rand(20 / (damage_coeff ** 2), 50 / (damage_coeff ** 2)), IRRADIATE, 0, 1) - var/mob/living/carbon/human/H - if(ishuman(M)) - H = M + + if(isliving(target)) + target.apply_effect(rand(20 / (damage_coeff ** 2), 50 / (damage_coeff ** 2)), IRRADIATE, 0, 1) + + if(!ishuman(target)) + return if(!buf) - log_runtime(EXCEPTION("[src] used by [user] on [M] failed to initialize properly."), src) + log_runtime(EXCEPTION("[src] used by [user] on [target] failed to initialize properly."), src) return used = TRUE - icon_state = "[icon_state]0" - desc += " This one is used up." - - spawn(0) //Some mutations have sleeps in them, like monkey - if(!(NOCLONE in M.mutations) && !(H && (NO_DNA in H.dna.species.species_traits))) // prevents drained people from having their DNA changed - var/prev_ue = M.dna.unique_enzymes - // UI in syringe. - if(buf.types & DNA2_BUF_UI) - if(!block) //isolated block? - M.dna.UI = buf.dna.UI.Copy() - M.dna.UpdateUI() - M.UpdateAppearance() - if(buf.types & DNA2_BUF_UE) //unique enzymes? yes - - M.real_name = buf.dna.real_name - M.name = buf.dna.real_name - M.dna.real_name = buf.dna.real_name - M.dna.unique_enzymes = buf.dna.unique_enzymes - else - M.dna.SetUIValue(block,src.GetValue()) - M.UpdateAppearance() - if(buf.types & DNA2_BUF_SE) - if(!block) //isolated block? - M.dna.SE = buf.dna.SE.Copy() - M.dna.UpdateSE() - else - M.dna.SetSEValue(block,src.GetValue()) - domutcheck(M, null, forcedmutation ? MUTCHK_FORCED : 0) - M.update_mutations() - if(H) - H.sync_organ_dna(assimilate = 0, old_ue = prev_ue) + update_appearance(UPDATE_ICON_STATE|UPDATE_DESC) + INVOKE_ASYNC(src, PROC_REF(async_update), target) //Some mutations have sleeps in them, like monkey + + +/obj/item/dnainjector/proc/async_update(mob/living/carbon/human/target) + // prevents drained people from having their DNA changed + if(!target.dna || (NOCLONE in target.mutations) || (NO_DNA in target.dna.species.species_traits)) + return + + var/datum/dna/target_dna = target.dna + var/prev_UE = target_dna.unique_enzymes + + // UI in syringe + if(buf.types & DNA2_BUF_UI) + if(!block) //isolated block? + target_dna.UI = buf.dna.UI.Copy() + target_dna.UpdateUI() + target.UpdateAppearance() + + if(buf.types & DNA2_BUF_UE) //unique enzymes? yes + target.real_name = buf.dna.real_name + target.name = buf.dna.real_name + target_dna.real_name = buf.dna.real_name + target_dna.unique_enzymes = buf.dna.unique_enzymes + else + target_dna.SetUIValue(block, GetValue()) + target.UpdateAppearance() + + // SE in syringe + if(buf.types & DNA2_BUF_SE) + if(!block) //isolated block? + target_dna.SE = buf.dna.SE.Copy() + target_dna.UpdateSE() + else + target_dna.SetSEValue(block, GetValue()) + domutcheck(target, null, forcedmutation ? MUTCHK_FORCED : NONE) + target.update_mutations() + + target.sync_organ_dna(assimilate = FALSE, old_ue = prev_UE) + /obj/item/dnainjector/attack(mob/M, mob/user) if(used) diff --git a/code/game/objects/items/weapons/dna_upgrader.dm b/code/game/objects/items/weapons/dna_upgrader.dm index 3ca2bf1cdb4..4821d4d498c 100644 --- a/code/game/objects/items/weapons/dna_upgrader.dm +++ b/code/game/objects/items/weapons/dna_upgrader.dm @@ -13,6 +13,16 @@ icon_state = "dnaupgrader" var/used = FALSE + +/obj/item/dna_upgrader/update_icon_state() + icon_state = "dnaupgrader[used ? "0" : ""]" + + +/obj/item/dna_upgrader/update_name(updates = ALL) + . = ..() + name = used ? "used [initial(name)]" : initial(name) + + /obj/item/dna_upgrader/attack_self(mob/user) if(!used) ui_interact(user) @@ -79,7 +89,7 @@ H.gene_stability += 25 to_chat(H, span_notice("You feel like your body rebasing.")) used = TRUE - icon_state = "[icon_state]0" + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) return TRUE #undef VAULT_TOXIN diff --git a/code/game/objects/items/weapons/dnascrambler.dm b/code/game/objects/items/weapons/dnascrambler.dm index 1dcc4a942c2..cefe9f7abc8 100644 --- a/code/game/objects/items/weapons/dnascrambler.dm +++ b/code/game/objects/items/weapons/dnascrambler.dm @@ -4,15 +4,22 @@ icon = 'icons/obj/hypo.dmi' item_state = "syringe_0" icon_state = "lepopen" - var/used = null + var/used = FALSE -/obj/item/dnascrambler/update_icon() + +/obj/item/dnascrambler/update_icon_state() if(used) icon_state = "lepopen0" else icon_state = "lepopen" -/obj/item/dnascrambler/attack(mob/M as mob, mob/user as mob) + +/obj/item/dnascrambler/update_name(updates = ALL) + . = ..() + name = used ? "used [initial(name)]" : initial(name) + + +/obj/item/dnascrambler/attack(mob/M, mob/user) if(!M || !user) return @@ -53,6 +60,6 @@ target.update_icons() add_attack_logs(user, target, "injected with [src]") - used = 1 - update_icon() - name = "used " + name + used = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) + diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index e2478d00882..6195f927a01 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -4,89 +4,107 @@ icon_state = "plastic-explosive0" item_state = "plastic-explosive" flags = NOBLUDGEON - det_time = 10 + det_time = 10 SECONDS display_timer = 0 origin_tech = "syndicate=1" toolspeed = 1 - var/atom/target = null - var/image_overlay = null - var/obj/item/assembly_holder/nadeassembly = null + var/atom/target + var/image_overlay + var/obj/item/assembly_holder/nadeassembly var/assemblyattacher var/notify_admins = TRUE -/obj/item/grenade/plastic/New() + +/obj/item/grenade/plastic/Initialize(mapload) + . = ..() image_overlay = image('icons/obj/weapons/grenade.dmi', "[item_state]2") - ..() + /obj/item/grenade/plastic/Destroy() QDEL_NULL(nadeassembly) target = null return ..() + /obj/item/grenade/plastic/attackby(obj/item/I, mob/user, params) if(!nadeassembly && istype(I, /obj/item/assembly_holder)) - var/obj/item/assembly_holder/A = I - if(!user.drop_item_ground(I)) + var/obj/item/assembly_holder/assembly_holder = I + if(!user.drop_transfer_item_to_loc(I, src)) return ..() - nadeassembly = A - A.master = src - A.loc = src + nadeassembly = assembly_holder + assembly_holder.master = src assemblyattacher = user.ckey - to_chat(user, "You add [A] to the [name].") + to_chat(user, "You add [assembly_holder] to the [name].") playsound(src, 'sound/weapons/tap.ogg', 20, 1) - update_icon() + update_icon(UPDATE_ICON_STATE) return - if(nadeassembly && istype(I, /obj/item/wirecutters)) + if(nadeassembly && I.tool_behaviour == TOOL_WIRECUTTER) playsound(src, I.usesound, 20, 1) - nadeassembly.loc = get_turf(src) + nadeassembly.forceMove_turf() nadeassembly.master = null nadeassembly = null - update_icon() + update_icon(UPDATE_ICON_STATE) return ..() + //assembly stuff /obj/item/grenade/plastic/receive_signal() prime() + /obj/item/grenade/plastic/Crossed(atom/movable/AM, oldloc) if(nadeassembly) nadeassembly.Crossed(AM, oldloc) + /obj/item/grenade/plastic/on_found(mob/finder) if(nadeassembly) nadeassembly.on_found(finder) + /obj/item/grenade/plastic/attack_self(mob/user) if(nadeassembly) nadeassembly.attack_self(user) return - var/newtime = input(usr, "Please set the timer.", "Timer", det_time) as num + var/newtime = input(usr, "Please set the timer (in seconds).", "Timer", det_time/10) as null|num + if(isnull(newtime)) + return if(user.is_in_active_hand(src)) - newtime = clamp(newtime, initial(det_time), 60000) - det_time = newtime - to_chat(user, "Timer set for [det_time] seconds.") + newtime = round(newtime) + det_time = clamp(newtime SECONDS, initial(det_time), 10 MINUTES) + to_chat(user, "Timer set for [newtime] seconds.") + /obj/item/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag) - if (!flag) + if(!flag) + return + if(iscarbon(AM)) + to_chat(user, "You can't get the [src] to stick to [AM]!") return - if (istype(AM, /mob/living/carbon)) + if(isobserver(AM)) + to_chat(user, "Your hand just phases through [AM]!") return - to_chat(user, "You start planting the [src]. The timer is set to [det_time]...") - - if(do_after(user, 50 * toolspeed * gettoolspeedmod(user), target = AM)) - if(!user.drop_item_ground(src)) - return - src.target = AM - loc = null - if(notify_admins) - message_admins("[ADMIN_LOOKUPFLW(user)] planted [src.name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse") - add_game_logs("planted [name] on [target.name] at [COORD(target)] with [det_time] second fuse", user) - - target.overlays += image_overlay - if(!nadeassembly) - to_chat(user, "You plant the bomb. Timer counting down from [det_time].") - addtimer(CALLBACK(src, PROC_REF(prime)), det_time*10) + to_chat(user, "You start planting [src].[isnull(nadeassembly) ? " The timer is set to [det_time/10]..." : ""]") + + if(!do_after(user, 50 * toolspeed * gettoolspeedmod(user), target = AM)) + return + + if(!user.drop_item_ground(src)) + return + + target = AM + do_pickup_animation(AM) + loc = null + if(notify_admins) + message_admins("[ADMIN_LOOKUPFLW(user)] planted [src.name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time/10] second fuse") + add_game_logs("planted [name] on [target.name] at [COORD(target)] with [det_time/10] second fuse", user) + + AddComponent(/datum/component/persistent_overlay, image_overlay, target) + if(!nadeassembly) + to_chat(user, "You plant the bomb. Timer counting down from [det_time/10].") + addtimer(CALLBACK(src, PROC_REF(prime)), det_time) + /obj/item/grenade/plastic/suicide_act(mob/user) message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [src.name] at [ADMIN_COORDJMP(user)]") @@ -119,12 +137,14 @@ user.gib() return OBLITERATION -/obj/item/grenade/plastic/update_icon() + +/obj/item/grenade/plastic/update_icon_state() if(nadeassembly) icon_state = "[item_state]1" else icon_state = "[item_state]0" + ////////////////////////// ///// The Explosives ///// ////////////////////////// @@ -145,7 +165,6 @@ location = get_turf(target) // Set the explosion location to turf if planted directly on a wall or floor else location = get_atom_on_turf(target) // Otherwise, make sure we're blowing up what's on top of the turf - target.overlays -= image_overlay else location = get_atom_on_turf(src) if(location) @@ -250,7 +269,7 @@ /obj/item/grenade/plastic/x4/thermite name = "T4" desc = "A wall breaching charge, containing fuel, metal oxide and metal powder mixed in just the right way. One hell of a combination. Effective against walls, ineffective against airlocks..." - det_time = 2 + det_time = 2 SECONDS icon_state = "t4breach0" item_state = "t4breach" @@ -259,7 +278,6 @@ if(target) if(!QDELETED(target)) location = get_turf(target) - target.overlays -= image_overlay else location = get_turf(src) if(location) @@ -268,7 +286,7 @@ if(target && target.density) var/turf/T = get_step(location, aim_dir) for(var/turf/simulated/wall/W in range(1, location)) - W.thermitemelt(speed = 30) + W.thermitemelt(time = 3 SECONDS) addtimer(CALLBACK(GLOBAL_PROC, /proc/explosion, T, 0, 0, 2), 3) addtimer(CALLBACK(smoke, TYPE_PROC_REF(/datum/effect_system/smoke_spread, start)), 3) else @@ -276,7 +294,6 @@ addtimer(CALLBACK(GLOBAL_PROC, /proc/explosion, T, 0, 0, 2), 3) addtimer(CALLBACK(smoke, TYPE_PROC_REF(/datum/effect_system/smoke_spread, start)), 3) - if(isliving(target)) var/mob/living/M = target M.adjust_fire_stacks(2) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 5e41af4e072..602e834f465 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -40,21 +40,34 @@ sprite_name = "miniFE" dog_fashion = null + +/obj/item/extinguisher/Initialize(mapload) + . = ..() + if(!reagents) + create_reagents(max_water) + reagents.add_reagent("water", max_water) + + /obj/item/extinguisher/examine(mob/user) . = ..() . += "The safety is [safety ? "on" : "off"]." -/obj/item/extinguisher/New() - ..() - create_reagents(max_water) - reagents.add_reagent("water", max_water) + +/obj/item/extinguisher/update_icon_state() + icon_state = "[sprite_name][!safety]" + + +/obj/item/extinguisher/update_desc(updates = ALL) + . = ..() + desc = "The safety is [safety ? "on" : "off"]." + + /obj/item/extinguisher/attack_self(mob/user as mob) safety = !safety - src.icon_state = "[sprite_name][!safety]" - src.desc = "The safety is [safety ? "on" : "off"]." + update_appearance(UPDATE_ICON_STATE|UPDATE_DESC) to_chat(user, "The safety is [safety ? "on" : "off"].") - return + /obj/item/extinguisher/attack_obj(obj/O, mob/living/user, params) if(AttemptRefill(O, user)) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index ca0f4756b24..3a02ab76dd3 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -48,21 +48,25 @@ igniter.flamethrower_process(location) -/obj/item/flamethrower/update_icon() - cut_overlays() +/obj/item/flamethrower/update_icon(updates = ALL) + . = ..() + update_equipped_item() + + + +/obj/item/flamethrower/update_icon_state() + item_state = "flamethrower_[lit]" + + +/obj/item/flamethrower/update_overlays() + . = ..() if(igniter) - add_overlay("+igniter[status]") + . += "+igniter[status]" if(ptank) - add_overlay("+ptank") + . += "+ptank" if(lit) - add_overlay("+lit") - item_state = "flamethrower_1" - else - item_state = "flamethrower_0" - if(ismob(loc)) - var/mob/M = loc - M.update_inv_l_hand() - M.update_inv_r_hand() + . += "+lit" + /obj/item/flamethrower/can_enter_storage(obj/item/storage/S, mob/user) if(lit) diff --git a/code/game/objects/items/weapons/garrote.dm b/code/game/objects/items/weapons/garrote.dm index 132ec7649fa..09b93ee0444 100644 --- a/code/game/objects/items/weapons/garrote.dm +++ b/code/game/objects/items/weapons/garrote.dm @@ -19,12 +19,11 @@ strangling = null return ..() -/obj/item/twohanded/garrote/update_icon() +/obj/item/twohanded/garrote/update_icon_state() if(strangling) // If we're strangling someone we want our icon to stay wielded icon_state = "garrot_unwrap" return - - icon_state = "garrot_[wielded ? "un" : ""]wrap" + icon_state = "garrot_[HAS_TRAIT(src, TRAIT_WIELDED) ? "un" : ""]wrap" /obj/item/twohanded/garrote/improvised // Made via tablecrafting name = "garrote" @@ -32,12 +31,11 @@ icon_state = "garrot_I_wrap" improvised = 1 -/obj/item/twohanded/garrote/improvised/update_icon() +/obj/item/twohanded/garrote/improvised/update_icon_state() if(strangling) icon_state = "garrot_I_unwrap" return - - icon_state = "garrot_I_[wielded ? "un" : ""]wrap" + icon_state = "garrot_I_[HAS_TRAIT(src, TRAIT_WIELDED) ? "un" : ""]wrap" /obj/item/twohanded/garrote/unwield(obj/item/source, mob/living/carbon/user) @@ -46,7 +44,7 @@ "You remove the [src] from [strangling]'s neck.") strangling.garroted_by.Remove(src) strangling = null - update_icon() + update_icon(UPDATE_ICON_STATE) STOP_PROCESSING(SSobj, src) @@ -102,7 +100,7 @@ garrote_time = world.time + 10 START_PROCESSING(SSobj, src) strangling = M - update_icon() + update_icon(UPDATE_ICON_STATE) playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1) @@ -110,19 +108,18 @@ "[U] begins garroting you with the [src]![improvised ? "" : " You are unable to speak!"]", \ "You hear struggling and wire strain against flesh!") - return /obj/item/twohanded/garrote/process() if(!strangling) // Our mark got gibbed or similar - update_icon() + update_icon(UPDATE_ICON_STATE) STOP_PROCESSING(SSobj, src) return if(!istype(loc, /mob/living/carbon/human)) strangling = null - update_icon() + update_icon(UPDATE_ICON_STATE) STOP_PROCESSING(SSobj, src) return @@ -141,7 +138,7 @@ strangling.garroted_by.Remove(src) strangling = null - update_icon() + update_icon(UPDATE_ICON_STATE) STOP_PROCESSING(SSobj, src) return @@ -152,7 +149,7 @@ strangling.garroted_by.Remove(src) strangling = null - update_icon() + update_icon(UPDATE_ICON_STATE) STOP_PROCESSING(SSobj, src) return diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 2291671194d..649897ee351 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -42,7 +42,7 @@ /obj/effect/spresent/attackby(obj/item/W as obj, mob/user as mob, params) ..() - if(!istype(W, /obj/item/wirecutters)) + if(W.tool_behaviour != TOOL_WIRECUTTER) to_chat(user, "I need wirecutters for that.") return diff --git a/code/game/objects/items/weapons/grenades/bananade.dm b/code/game/objects/items/weapons/grenades/bananade.dm index ea2cbc5f6cf..6c954b8c497 100644 --- a/code/game/objects/items/weapons/grenades/bananade.dm +++ b/code/game/objects/items/weapons/grenades/bananade.dm @@ -45,7 +45,7 @@ qdel(I) else to_chat(usr, "The bananade is full, screwdriver it shut to lock it down.") - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) if(fillamt) var/obj/item/grenade/bananade/G = new /obj/item/grenade/bananade(drop_location()) if(!remove_item_from_storage(user)) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index ffa8a8b4b5f..15fec3a3187 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -25,22 +25,26 @@ var/contained = "" // For logging var/cores = "" // Also for logging -/obj/item/grenade/chem_grenade/New() - ..() + +/obj/item/grenade/chem_grenade/Initialize(mapload) + . = ..() create_reagents(1000) if(payload_name) payload_name += " " // formatting, ignore me update_icon() + /obj/item/grenade/chem_grenade/Destroy() QDEL_NULL(nadeassembly) if (!no_splash) QDEL_LIST(beakers) return ..() + /obj/item/grenade/chem_grenade/examine(mob/user) - . = ..() display_timer = (stage == READY && !nadeassembly) //show/hide the timer based on assembly state + . = ..() + /obj/item/grenade/chem_grenade/proc/get_trigger() if(!nadeassembly) return null @@ -49,21 +53,11 @@ return O return null -/obj/item/grenade/chem_grenade/update_overlays() - underlays = list() - if(nadeassembly) - underlays += "[nadeassembly.a_left.icon_state]_left" - for(var/O in nadeassembly.a_left.attached_overlays) - underlays += "[O]_l" - underlays += "[nadeassembly.a_right.icon_state]_right" - for(var/O in nadeassembly.a_right.attached_overlays) - underlays += "[O]_r" -/obj/item/grenade/chem_grenade/update_icon() +/obj/item/grenade/chem_grenade/update_icon_state() if(nadeassembly) icon = 'icons/obj/assemblies/new_assemblies.dmi' icon_state = bomb_state - update_overlays() var/obj/item/assembly/A = get_trigger() if(stage != READY) name = "bomb casing[label]" @@ -75,7 +69,6 @@ else icon = 'icons/obj/weapons/grenade.dmi' icon_state = initial(icon_state) - overlays = list() switch(stage) if(EMPTY) name = "grenade casing[label]" @@ -89,12 +82,21 @@ icon_state += "_locked" name = payload_name + "grenade" + label + underlays.Cut() + if(nadeassembly) + underlays += "[nadeassembly.a_left.icon_state]_left" + for(var/O in nadeassembly.a_left.attached_overlays) + underlays += "[O]_l" + underlays += "[nadeassembly.a_right.icon_state]_right" + for(var/O in nadeassembly.a_right.attached_overlays) + underlays += "[O]_r" + /obj/item/grenade/chem_grenade/attack_self(mob/user) if(stage == READY && !active) if(nadeassembly) nadeassembly.attack_self(user) - update_icon() + update_icon(UPDATE_ICON_STATE) else if(clown_check(user)) // This used to go before the assembly check, but that has absolutely zero to do with priming the damn thing. You could spam the admins with it. investigate_log("[key_name_log(usr)] has primed a [name] for detonation [contained].", INVESTIGATE_BOMB) @@ -127,38 +129,9 @@ else if(label) label = null - update_icon() + update_icon(UPDATE_ICON_STATE) to_chat(user, "You remove the label from [src].") return 1 - if(istype(I, /obj/item/screwdriver)) - if(stage == WIRED) - if(beakers.len) - to_chat(user, "You lock the assembly.") - playsound(loc, prime_sound, 25, -3) - stage = READY - update_icon() - contained = "" - cores = "" // clear them out so no recursive logging by accidentally - for(var/obj/O in beakers) - if(!O.reagents) continue - if(istype(O,/obj/item/slime_extract)) - cores += " [O]" - for(var/R in O.reagents.reagent_list) - var/datum/reagent/reagent = R - contained += "[reagent.volume] [reagent], " - if(contained) - if(cores) - contained = "\[[cores]; [contained]\]" - else - contained = "\[ [contained]\]" - add_attack_logs(user, src, "has completed with [contained]", ATKLOG_FEW) - else - to_chat(user, "You need to add at least one beaker before locking the assembly.") - else if(stage == READY && !nadeassembly) - det_time = det_time == 50 ? 30 : 50 //toggle between 30 and 50 - to_chat(user, "You modify the time delay. It's set for [det_time / 10] second\s.") - else if(stage == EMPTY) - to_chat(user, "You need to add an activation mechanism.") else if(stage == WIRED && is_type_in_list(I, allowed_containers)) if(beakers.len == 2) @@ -187,7 +160,7 @@ assemblyattacher = user.ckey stage = WIRED to_chat(user, "You add [A] to [src]!") - update_icon() + update_icon(UPDATE_ICON_STATE) else if(stage == EMPTY && istype(I, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = I @@ -195,14 +168,14 @@ stage = WIRED to_chat(user, "You rig [src].") - update_icon() + update_icon(UPDATE_ICON_STATE) - else if(stage == READY && istype(I, /obj/item/wirecutters)) + else if(stage == READY && I.tool_behaviour == TOOL_WIRECUTTER) to_chat(user, "You unlock the assembly.") stage = WIRED - update_icon() + update_icon(UPDATE_ICON_STATE) - else if(stage == WIRED && istype(I, /obj/item/wrench)) + else if(stage == WIRED && I.tool_behaviour == TOOL_WRENCH) to_chat(user, "You open the grenade and remove the contents.") stage = EMPTY payload_name = null @@ -218,7 +191,47 @@ for(var/obj/O in beakers) O.loc = get_turf(src) beakers = list() - update_icon() + update_icon(UPDATE_ICON_STATE) + + +/obj/item/grenade/chem_grenade/screwdriver_act(mob/living/user, obj/item/I) + if(stage == WIRED) + if(!length(beakers)) + to_chat(user, "You need to add at least one beaker before locking the assembly.") + return TRUE + + to_chat(user, "You lock the assembly.") + playsound(loc, prime_sound, 25, -3) + stage = READY + update_icon(UPDATE_ICON_STATE) + contained = "" + cores = "" // clear them out so no recursive logging by accidentally + for(var/obj/O in beakers) + if(!O.reagents) + continue + if(istype(O, /obj/item/slime_extract)) + cores += " [O]" + for(var/R in O.reagents.reagent_list) + var/datum/reagent/reagent = R + contained += "[reagent.volume] [reagent], " + if(contained) + if(cores) + contained = "\[[cores]; [contained]\]" + else + contained = "\[ [contained]\]" + var/turf/bombturf = get_turf(loc) + add_attack_logs(user, src, "has completed with [contained]", ATKLOG_MOST) + log_game("[key_name(usr)] has completed [name] at [bombturf.x], [bombturf.y], [bombturf.z]. [contained]") + return TRUE + + else if(stage == READY && !nadeassembly) + det_time = det_time == 5 SECONDS ? 3 SECONDS : 5 SECONDS + to_chat(user, "You modify the time delay. It's set for [det_time / 10] second\s.") + return TRUE + + else if(stage == EMPTY) + to_chat(user, "You need to add an activation mechanism.") + return TRUE //assembly stuff @@ -281,7 +294,7 @@ O.forceMove(get_turf(src)) beakers = list() stage = EMPTY - update_icon() + update_icon(UPDATE_ICON_STATE) return if(nadeassembly) @@ -430,8 +443,9 @@ desc = "Used for emergency sealing of air breaches." stage = READY -/obj/item/grenade/chem_grenade/metalfoam/New() - ..() +/obj/item/grenade/chem_grenade/metalfoam/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/B2 = new(src) @@ -441,7 +455,7 @@ beakers += B1 beakers += B2 - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/grenade/chem_grenade/firefighting @@ -449,8 +463,9 @@ desc = "Can help to put out dangerous fires from a distance." stage = READY -/obj/item/grenade/chem_grenade/firefighting/New() - ..() +/obj/item/grenade/chem_grenade/firefighting/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/B2 = new(src) @@ -459,15 +474,16 @@ beakers += B1 beakers += B2 - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/grenade/chem_grenade/incendiary payload_name = "incendiary" desc = "Used for clearing rooms of living things." stage = READY -/obj/item/grenade/chem_grenade/incendiary/New() - ..() +/obj/item/grenade/chem_grenade/incendiary/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) @@ -478,7 +494,7 @@ beakers += B1 beakers += B2 - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/grenade/chem_grenade/antiweed @@ -486,8 +502,9 @@ desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents." stage = READY -/obj/item/grenade/chem_grenade/antiweed/New() - ..() +/obj/item/grenade/chem_grenade/antiweed/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) @@ -499,7 +516,7 @@ beakers += B1 beakers += B2 - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/grenade/chem_grenade/cleaner @@ -507,8 +524,9 @@ desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas." stage = READY -/obj/item/grenade/chem_grenade/cleaner/New() - ..() +/obj/item/grenade/chem_grenade/cleaner/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/B2 = new(src) @@ -518,7 +536,7 @@ beakers += B1 beakers += B2 - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/grenade/chem_grenade/teargas @@ -526,8 +544,9 @@ desc = "Used for nonlethal riot control. Contents under pressure. Do not directly inhale contents." stage = READY -/obj/item/grenade/chem_grenade/teargas/New() - ..() +/obj/item/grenade/chem_grenade/teargas/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) @@ -539,15 +558,16 @@ beakers += B1 beakers += B2 - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/grenade/chem_grenade/facid payload_name = "acid smoke" desc = "Use to chew up opponents from the inside out." stage = READY -/obj/item/grenade/chem_grenade/facid/New() - ..() +/obj/item/grenade/chem_grenade/facid/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src) @@ -559,15 +579,16 @@ beakers += B1 beakers += B2 - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/grenade/chem_grenade/saringas payload_name = "sarin gas" desc = "Contains sarin gas; extremely deadly and fast acting; use with extreme caution." stage = READY -/obj/item/grenade/chem_grenade/saringas/New() - ..() +/obj/item/grenade/chem_grenade/saringas/Initialize(mapload) + . = ..() + var/obj/item/reagent_containers/glass/beaker/B1 = new(src) var/obj/item/reagent_containers/glass/beaker/B2 = new(src) @@ -579,7 +600,7 @@ beakers += B1 beakers += B2 - update_icon() + update_icon(UPDATE_ICON_STATE) #undef EMPTY #undef WIRED diff --git a/code/game/objects/items/weapons/grenades/custom_grenades.dm b/code/game/objects/items/weapons/grenades/custom_grenades.dm index 3cb0be484b0..41d473d0411 100644 --- a/code/game/objects/items/weapons/grenades/custom_grenades.dm +++ b/code/game/objects/items/weapons/grenades/custom_grenades.dm @@ -39,7 +39,7 @@ payload_name = "holy water" desc = "Then shalt thou count to three, no more, no less." stage = 2 - det_time = 30 + det_time = 3 SECONDS /obj/item/grenade/chem_grenade/holywater/New() ..() @@ -51,7 +51,7 @@ payload_name = "hell water" desc = "And he struck them down with an unholy fury that burn like one-thousands badmins." stage = 2 - det_time = 30 + det_time = 3 SECONDS /obj/item/grenade/chem_grenade/hellwater/New() ..() diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 10488d8e01e..681bb8edf63 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -78,9 +78,8 @@ if(istype(ears)) ears.receive_damage(5) if(ears.damage >= 15) - to_chat(M, "Your ears start to ring badly!") + to_chat(M, span_warning("Your ears start to ring badly!")) if(prob(ears.damage - 5)) - to_chat(M, "You can't hear anything!") - M.BecomeDeaf() + to_chat(M, span_warning("You can't hear anything!")) else if(ears.damage >= 5) - to_chat(M, "Your ears start to ring!") + to_chat(M, span_warning("Your ears start to ring!")) diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index 09ce7f8f6e0..85b8b6f2124 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -12,7 +12,7 @@ flags = CONDUCT slot_flags = SLOT_BELT active = 0 - det_time = 50 + det_time = 5 SECONDS display_timer = 0 var/list/times @@ -20,10 +20,10 @@ ..() overlays += "improvised_grenade_filled" overlays += "improvised_grenade_wired" - times = list("5" = 10, "-1" = 20, "[rand(30, 80)]" = 50, "[rand(65, 180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] + times = list("5" = 1 SECONDS, "-1" = 2 SECONDS, "[rand(3 SECONDS, 8 SECONDS)]" = 5 SECONDS, "[rand(6.5 SECONDS, 18 SECONDS)]" = 2 SECONDS)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] det_time = text2num(pickweight(times)) if(det_time < 0) //checking for 'duds' - det_time = rand(30,80) + det_time = rand(3 SECONDS, 8 SECONDS) /obj/item/grenade/iedcasing/CheckParts(list/parts_list) ..() @@ -44,6 +44,7 @@ active = TRUE overlays -= "improvised_grenade_filled" icon_state = initial(icon_state) + "_active" + update_icon() add_fingerprint(user) investigate_log("[key_name_log(user)] has primed a [name] for detonation", INVESTIGATE_BOMB) add_attack_logs(user, src, "has primed for detonation", ATKLOG_FEW) @@ -67,7 +68,7 @@ icon_state = "improvised_satchel" item_state = "plastic-explosive" toolspeed = 1 - det_time = 80 + det_time = 8 SECONDS var/atom/target = null var/image_overlay = null var/planted = FALSE @@ -80,6 +81,17 @@ if(burned_out) . += span_notice("Looks like wick has burned out") + +/obj/item/grenade/iedsatchel/update_icon_state() + if(active) + icon_state = "[initial(icon_state)]_active" + return + if(anchored || burned_out) + icon_state = "[initial(icon_state)]_burned" + return + icon_state = initial(icon_state) + + /obj/item/grenade/iedsatchel/afterattack(atom/T, mob/user, proximity) if(!proximity) return @@ -98,12 +110,12 @@ layer = ABOVE_OBJ_LAYER add_game_logs("planted [src] on [T.name] at [T.loc]", user) - icon_state = initial(icon_state) + "_burned" + update_icon(UPDATE_ICON_STATE) to_chat(user, span_notice("You plant the [src].")) -/obj/item/grenade/iedsatchel/attack_hand(var/mob/user) +/obj/item/grenade/iedsatchel/attack_hand(mob/user) if(anchored) - icon_state = initial(icon_state) + "_burned" + update_icon(UPDATE_ICON_STATE) return ..() @@ -114,7 +126,7 @@ to_chat(user, span_notice("You tickled a makeshift wick made of wires, it looks like it needs to be set on fire.")) /obj/item/grenade/iedsatchel/attackby(obj/item/W, user) - if(active == 1) + if(active) return if(istype(W, /obj/item/lighter)) var/obj/item/lighter/I = W @@ -126,7 +138,7 @@ var/obj/item/match/I = W if(!I.lit) return - trigger() + trigger(user) return if(istype(W, /obj/item/weldingtool)) var/obj/item/weldingtool/I = W @@ -142,17 +154,18 @@ if(I.use(5)) to_chat(user, span_notice("You made a new wick from the cable")) burned_out = FALSE + update_icon(UPDATE_ICON_STATE) return to_chat(user, span_notice("There is not enough cables to make a wick.")) - if(istype(W, /obj/item/wirecutters)) + if(W.tool_behaviour == TOOL_WIRECUTTER) if(!anchored) return pixel_w = 0 pixel_z = 0 to_chat(user, span_notice("You unattached [src].")) - icon_state = "improvised_satchel" layer = TURF_LAYER anchored = FALSE + update_icon(UPDATE_ICON_STATE) target = null /obj/item/grenade/iedsatchel/proc/trigger(mob/user) @@ -160,9 +173,9 @@ to_chat(user, span_notice("There is no wick to ignite [src].")) return var/N = roll(11) - 1 - active = 1 + active = TRUE to_chat(user, span_danger("You ignite wires on [src]!")) - icon_state = initial(icon_state) + "_active" + update_icon(UPDATE_ICON_STATE) add_game_logs("Triggered [name] at [COORD(target)]", user) if(N <= 3) active = 1 @@ -175,10 +188,10 @@ prime() /obj/item/grenade/iedsatchel/proc/prime_fake() - src.visible_message(span_notice("The wires on [src] burned out, but nothing happened.")) - active = 0 + visible_message(span_notice("The wires on [src] burned out, but nothing happened.")) + active = FALSE burned_out = TRUE - icon_state = initial(icon_state) + "_burned" + update_icon(UPDATE_ICON_STATE) /obj/item/grenade/iedsatchel/prime() update_mob() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 7a02c0a4381..0280830be32 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -12,9 +12,16 @@ slot_flags = SLOT_BELT resistance_flags = FLAMMABLE max_integrity = 40 - var/active = 0 - var/det_time = 50 - var/display_timer = 1 + var/active = FALSE + var/det_time = 5 SECONDS + var/display_timer = TRUE + + +/obj/item/grenade/Destroy() + ///We need to clear the walk_to on destroy to allow a grenade which uses walk_to or related to properly GC + walk_to(src, 0) + return ..() + /obj/item/grenade/deconstruct(disassembled = TRUE) if(!disassembled) @@ -22,65 +29,56 @@ 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((CLUMSY in user.mutations) && prob(50)) - to_chat(user, "Huh? How does this thing work?") - active = 1 - icon_state = initial(icon_state) + "_active" - playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(5) - if(user) - user.drop_from_active_hand() - prime() - return 0 - return 1 - - -/*/obj/item/grenade/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - if(istype(target, /obj/item/storage)) return ..() // Trying to put it in a full container - if(istype(target, /obj/item/gun/grenadelauncher)) return ..() - if((user.is_in_active_hand(src)) && (!active) && (clown_check(user)) && target.loc != src.loc) - to_chat(user, "You prime the [name]! [det_time/10] seconds!") - active = 1 - icon_state = initial(icon_state) + "_active" - playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - spawn(det_time) - prime() - return - user.dir = get_dir(user, target) - user.drop_from_active_hand() - var/t = (isturf(target) ? target : target.loc) - walk_towards(src, t, 3) - return*/ + to_chat(user, span_warning("Huh? How does this thing work?")) + active = TRUE + update_icon(UPDATE_ICON_STATE) + playsound(loc, 'sound/weapons/armbomb.ogg', 75, TRUE, -3) + addtimer(CALLBACK(src, PROC_REF(delayed_boom)), 0.5 SECONDS) + return FALSE + return TRUE + + +/obj/item/grenade/proc/delayed_boom(mob/living/user) + if(!QDELETED(user)) + user.drop_item_ground(src) + prime() + + +/obj/item/grenade/update_icon_state() + icon_state = "[initial(icon_state)][active ? "_active" : ""]" /obj/item/grenade/examine(mob/user) . = ..() if(display_timer) if(det_time > 1) - . += "The timer is set to [det_time/10] second\s." + . += span_notice("The timer is set to [det_time/10] second\s.") else - . += "\The [src] is set for instant detonation." - -/obj/item/grenade/attack_self(mob/user as mob) - if(!active) - if(clown_check(user)) - to_chat(user, "You prime the [name]! [det_time/10] seconds!") - active = 1 - icon_state = initial(icon_state) + "_active" - add_fingerprint(user) - var/turf/bombturf = get_turf(src) - message_admins("[key_name_admin(usr)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]") - investigate_log("[key_name_log(usr)] has primed a [name] for detonation", INVESTIGATE_BOMB) - add_attack_logs(user, src, "has primed for detonation", ATKLOG_FEW) - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.throw_mode_on() - spawn(det_time) - prime() + . += span_warning("[src] is set for instant detonation.") + + +/obj/item/grenade/attack_self(mob/user) + if(!active && clown_check(user)) + to_chat(user, "You prime the [name]! [det_time/10] seconds!") + active = TRUE + update_icon(UPDATE_ICON_STATE) + add_fingerprint(user) + var/turf/bombturf = get_turf(src) + message_admins("[key_name_admin(usr)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]") + investigate_log("[key_name_log(usr)] has primed a [name] for detonation", INVESTIGATE_BOMB) + add_attack_logs(user, src, "has primed for detonation", ATKLOG_FEW) + if(iscarbon(user)) + var/mob/living/carbon/c_user = user + c_user.throw_mode_on() + addtimer(CALLBACK(src, PROC_REF(prime)), det_time) /obj/item/grenade/proc/prime(mob/user) + return + /obj/item/grenade/proc/update_mob() if(ismob(loc)) @@ -88,24 +86,25 @@ M.drop_item_ground(src) -/obj/item/grenade/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/screwdriver)) - switch(det_time) - if("1") - det_time = 10 - to_chat(user, "You set the [name] for 1 second detonation time.") - if("10") - det_time = 30 - to_chat(user, "You set the [name] for 3 second detonation time.") - if("30") - det_time = 50 - to_chat(user, "You set the [name] for 5 second detonation time.") - if("50") - det_time = 1 - to_chat(user, "You set the [name] for instant detonation.") - add_fingerprint(user) - ..() +/obj/item/grenade/screwdriver_act(mob/living/user, obj/item/I) + switch(det_time) + if(0.1 SECONDS) + det_time = 1 SECONDS + to_chat(user, span_notice("You set [src] for 1 second detonation time.")) + if(1 SECONDS) + det_time = 3 SECONDS + to_chat(user, span_notice("You set [src] for 3 second detonation time.")) + if(3 SECONDS) + det_time = 5 SECONDS + to_chat(user, span_notice("You set [src] for 5 second detonation time.")) + if(5 SECONDS) + det_time = 0.1 SECONDS + to_chat(user, span_notice("You set [src] for instant detonation.")) + add_fingerprint(user) + return TRUE + /obj/item/grenade/attack_hand() walk(src, null, null) ..() + diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 715a18e9ca6..eb486c54b09 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -3,7 +3,7 @@ name = "smoke bomb" icon = 'icons/obj/weapons/grenade.dmi' icon_state = "flashbang" - det_time = 20 + det_time = 2 SECONDS item_state = "flashbang" slot_flags = SLOT_BELT var/datum/effect_system/smoke_spread/bad/smoke diff --git a/code/game/objects/items/weapons/highlander_swords.dm b/code/game/objects/items/weapons/highlander_swords.dm index be938303fa1..2590d72d985 100644 --- a/code/game/objects/items/weapons/highlander_swords.dm +++ b/code/game/objects/items/weapons/highlander_swords.dm @@ -5,6 +5,7 @@ /datum/martial_art/highlander name = "Highlander Style" deflection_chance = 100 + weight = 100 no_guns = TRUE no_guns_message = "Вы никогда не опуститесь таааак низко, чтобы пользоваться оружием ПОДЛЕЦОВ!" diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 72a36fdb90b..8b9f985e683 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -51,7 +51,7 @@ if(istype(loc, /obj/item/implanter)) var/obj/item/implanter/implanter = loc implanter.imp = null - implanter.update_icon() + implanter.update_state() if(istype(loc, /obj/item/implantpad)) var/obj/item/implantcase/implantcase = loc implantcase.imp = null @@ -92,15 +92,13 @@ to_chat(user, span_warning("You can't trigger [src] with a custom emote.")) return FALSE - if(!(emote_key in user.usable_emote_keys(trigger_causes & BIOCHIP_EMOTE_TRIGGER_INTENTIONAL))) + var/intentional_cause = (trigger_causes & BIOCHIP_EMOTE_TRIGGER_INTENTIONAL) && !(trigger_causes & BIOCHIP_EMOTE_TRIGGER_UNINTENTIONAL) + if(!(emote_key in user.usable_emote_keys(intentional_cause))) if(!silent) - to_chat(user, span_warning("You can't trigger [src] with that emote! Try *help to see emotes you can use.")) + to_chat(user, span_warning("You can't trigger [src] with that emote [intentional_cause ? "intentionally" : "unintentionally"]! Try *help to see emotes you can use.")) return FALSE - if(!(emote_key in user.usable_emote_keys(trigger_causes & BIOCHIP_EMOTE_TRIGGER_UNINTENTIONAL))) - CRASH("User was given an bio-chip for an unintentional emote that they can't use.") - - LAZYADD(trigger_emotes, emote_key) + LAZYADDOR(trigger_emotes, emote_key) RegisterSignal(user, COMSIG_MOB_EMOTED(emote_key), PROC_REF(on_emote)) @@ -113,7 +111,7 @@ if(!(intentional && (trigger_causes & BIOCHIP_EMOTE_TRIGGER_INTENTIONAL)) && !(!intentional && (trigger_causes & BIOCHIP_EMOTE_TRIGGER_UNINTENTIONAL))) return - add_attack_logs(user, user, "[intentional ? "intentionally" : "unintentionally"] [src] was [intentional ? "intentionally" : "unintentionally"] triggered with the emote [fired_emote].") + add_attack_logs(user, user, "[src] was [intentional ? "intentionally" : "unintentionally"] triggered with the emote [fired_emote].") emote_trigger(key, user, intentional) @@ -136,7 +134,7 @@ death_trigger(source, gibbed) -/obj/item/implant/proc/emote_trigger(emote, mob/source, force) +/obj/item/implant/proc/emote_trigger(emote, mob/source, intentional) return @@ -183,13 +181,13 @@ if(trigger_emotes) if(!(trigger_causes & BIOCHIP_EMOTE_TRIGGER_INTENTIONAL|BIOCHIP_EMOTE_TRIGGER_UNINTENTIONAL)) CRASH("Bio-chip [src] has trigger emotes defined but no trigger cause with which to use them!") - if(!activated && (trigger_causes & BIOCHIP_EMOTE_TRIGGER_INTENTIONAL)) + if(activated == BIOCHIP_ACTIVATED_PASSIVE && (trigger_causes & BIOCHIP_EMOTE_TRIGGER_INTENTIONAL)) CRASH("Bio-chip [src] has intentional emote triggers on a passive bio-chip") // If you can't activate the implant manually, you shouldn't be able to deliberately activate it with an emote for(var/emote in trigger_emotes) set_trigger(source, emote, on_implant = TRUE) - if(activated) + if(activated == BIOCHIP_ACTIVATED_ACTIVE) for(var/datum/action/action as anything in actions) action.Grant(source) update_button(action) diff --git a/code/game/objects/items/weapons/implants/implant_sad_trombone.dm b/code/game/objects/items/weapons/implants/implant_sad_trombone.dm index 097324fe1ce..e4868acb04f 100644 --- a/code/game/objects/items/weapons/implants/implant_sad_trombone.dm +++ b/code/game/objects/items/weapons/implants/implant_sad_trombone.dm @@ -8,15 +8,15 @@ implant_state = "implant-honk" -/obj/item/implant/sad_trombone/emote_trigger(emote, mob/source, force) - activate(emote) +/obj/item/implant/sad_trombone/emote_trigger(emote, mob/source, intentional) + activate() /obj/item/implant/sad_trombone/death_trigger(mob/user, gibbed) - activate(gibbed) + activate() -/obj/item/implant/sad_trombone/activate() +/obj/item/implant/sad_trombone/activate(cause) playsound(loc, 'sound/misc/sadtrombone.ogg', 50, FALSE) diff --git a/code/game/objects/items/weapons/implants/implant_second_chance.dm b/code/game/objects/items/weapons/implants/implant_second_chance.dm new file mode 100644 index 00000000000..e05c4355ed3 --- /dev/null +++ b/code/game/objects/items/weapons/implants/implant_second_chance.dm @@ -0,0 +1,51 @@ +/obj/item/implant/second_chance + name = "second chance bio-chip" + desc = "Simulates your death and teleports you to an exact safe place." + icon_state = "explosive_old" + origin_tech = "materials=1;combat=2;biotech=4;syndicate=3;bluespace=1" + implant_state = "implant-syndicate" + activated = BIOCHIP_ACTIVATED_ACTIVE + actions_types = list(/datum/action/item_action/hands_free/activate/always) + implant_data = /datum/implant_fluff/second_chance + + +/obj/item/implant/second_chance/activate() + var/turf/old_turf = get_turf(imp_in) + + if(is_teleport_allowed(imp_in.z)) + var/turf/new_turf = find_safe_turf(level_name_to_num(MAIN_STATION)) + do_teleport(imp_in, new_turf, 0) + playsound(imp_in, 'sound/effects/sparks4.ogg', 50, TRUE) + do_sparks(4, TRUE, imp_in) + imp_in.rejuvenate() + investigate_log("[key_name_log(imp_in)] fake-gib himself using [name] and teleports to [COORD(new_turf)].", INVESTIGATE_TELEPORTATION) + + explosion(old_turf, 0, 0, 3, 6, cause = imp_in) + + if(isnucleation(imp_in)) + imp_in.visible_message(span_warning("Тело [imp_in] взрывается, оставляя после себя множество микроскопических кристаллов!")) + else if(!ismachineperson(imp_in)) + new /obj/effect/temp_visual/gib(old_turf) + new /obj/effect/gibspawner/human(old_turf) + playsound(old_turf, 'sound/goonstation/effects/gib.ogg', 50, TRUE) + else + do_sparks(3, TRUE, old_turf) + playsound(old_turf, 'sound/goonstation/effects/robogib.ogg', 50, TRUE) + new /obj/effect/decal/cleanable/blood/gibs/robot(old_turf) + + else + to_chat(imp_in, span_userdanger("[src] is malfunctioning!")) + explosion(old_turf, 0, 0, 3, 6, cause = imp_in) + qdel(src) + + +/obj/item/implanter/second_chance + name = "bio-chip implanter (second chance)" + imp = /obj/item/implant/second_chance + + +/obj/item/implantcase/second_chance + name = "bio-chip case - 'Second Chance'" + desc = "A glass case containing an second chance bio-chip." + imp = /obj/item/implant/second_chance + diff --git a/code/game/objects/items/weapons/implants/implant_stealth.dm b/code/game/objects/items/weapons/implants/implant_stealth.dm index 7fe0ed65984..5ac03283359 100644 --- a/code/game/objects/items/weapons/implants/implant_stealth.dm +++ b/code/game/objects/items/weapons/implants/implant_stealth.dm @@ -155,7 +155,8 @@ qdel(src) -/obj/structure/closet/cardboard/agent/update_icon() // When the box is opened, it's deleted, so we never need to update this. +// When the box is opened, it's deleted, so we never need to update this. +/obj/structure/closet/cardboard/agent/update_icon_state() return diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 5c50ffdd780..5d610eb97a4 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -36,15 +36,13 @@ origin_tech = initial(origin_tech) flags = initial(flags) reagents = null - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/implantcase/update_icon() - ..() - cut_overlays() +/obj/item/implantcase/update_overlays() + . = ..() if(imp) - var/image/implant_overlay = image('icons/obj/implants.dmi', imp.implant_state) - add_overlay(implant_overlay) + . += image('icons/obj/implants.dmi', imp.implant_state) /obj/item/implantcase/attackby(obj/item/I, mob/user) @@ -58,7 +56,8 @@ implater.imp.forceMove(src) imp = implater.imp implater.imp = null - implater.update_icon() + update_state() + implater.update_state() else if(imp) if(implater.imp) @@ -66,8 +65,8 @@ imp.forceMove(implater) implater.imp = imp imp = null - implater.update_icon() - update_state() + update_state() + implater.update_state() else return ..() diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 63de271a625..f11a3e75097 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -33,12 +33,8 @@ LAZYADD(implants_list, bio_chip) -/obj/machinery/implantchair/update_icon() - . = ..() - if(occupant) - icon_state = "implantchair_on" - else - icon_state = "implantchair" +/obj/machinery/implantchair/update_icon_state() + icon_state = "implantchair[occupant ? "_on" : ""]" /obj/machinery/implantchair/attack_hand(mob/user) @@ -124,7 +120,7 @@ return FALSE -/obj/machinery/implantchair/MouseDrop_T(mob/living/carbon/human/dropping, mob/living/user) +/obj/machinery/implantchair/MouseDrop_T(mob/living/carbon/human/dropping, mob/living/user, params) return put_mob(dropping, user) @@ -136,7 +132,7 @@ target.forceMove(src) occupant = target add_fingerprint(user) - update_icon() + update_icon(UPDATE_ICON_STATE) updateUsrDialog() return TRUE @@ -178,7 +174,7 @@ occupant.forceMove(loc) add_fingerprint(user) occupant = null - update_icon() + update_icon(UPDATE_ICON_STATE) return TRUE diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 418fb1321fa..1cc51f73a03 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -18,7 +18,7 @@ . = ..() if(ispath(imp, /obj/item/implant)) imp = new imp(src) - update_icon() + update_state() /obj/item/implanter/Destroy() @@ -26,13 +26,13 @@ return ..() -/obj/item/implanter/update_icon() - if(imp) - icon_state = "implanter1" - origin_tech = imp.origin_tech - else - icon_state = "implanter0" - origin_tech = initial(origin_tech) +/obj/item/implanter/proc/update_state() + origin_tech = imp ? imp.origin_tech : initial(origin_tech) + update_icon(UPDATE_ICON_STATE) + + +/obj/item/implanter/update_icon_state() + icon_state = "implanter[imp ? "1" : "0"]" /obj/item/implanter/attack(mob/living/carbon/target, mob/user) @@ -50,7 +50,7 @@ else target.visible_message("[user] has implanted [target].", span_notice("[user] bio-chips you.")) imp = null - update_icon() + update_state() /obj/item/implanter/attackby(obj/item/I, mob/user, params) diff --git a/code/game/objects/items/weapons/implants/implantfluff.dm b/code/game/objects/items/weapons/implants/implantfluff.dm index b1d2510e9b2..86d1865dbbd 100644 --- a/code/game/objects/items/weapons/implants/implantfluff.dm +++ b/code/game/objects/items/weapons/implants/implantfluff.dm @@ -73,6 +73,13 @@ function = "Contains a bulky, electrically triggered explosive that detonates upon receiving a specially encoded signal or upon host death." +/datum/implant_fluff/second_chance + name = "Cybersun Industries RX-87 Employee Management Bio-chip" + life = "Destroyed upon activation." + notes = "A small chip containing a familiar explosive device, the warhead of which has been partially replaced by a redspace crystal." + function = "Contains a compact, electrically triggered explosive that detonates upon receiving a specially encoded signal and teleports the operator to an exact safe location." + + /datum/implant_fluff/freedom name = "Cybersun Industries RX-92 Quick Escape Bio-chip" life = "Destroyed after 4 uses." @@ -144,13 +151,6 @@ function = "Plays a sad trombone noise upon death of the implantee, allows clowns to entertain the crew even post-mortem." -/datum/implant_fluff/pathfinder - name = "Paizo Productions 5-E Pathfinder Implant" - life = "Lasts 2-12 months. Known to fail at the worst possible time, space radation may be a factor." - notes = "By use of an internal private GPS signal, allows the pathfinder module to have the MODsuit find the user. Also wirelessly transfers ID information to the suit, to allow doors to open." - function = "Allows for the recall of a Modular Outerwear Device by the implant owner at any time." - - /datum/implant_fluff/stealth name = "Syndicate S3 \"Stealth\" Bio-chip" life = "Unknown. No collected sample has been active long enough to determine lifespan." diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index a14bcaeb9d6..75adb54aa87 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -17,11 +17,8 @@ return ..() -/obj/item/implantpad/update_icon() - if(case) - icon_state = "implantpad-on" - else - icon_state = "implantpad-off" +/obj/item/implantpad/update_icon_state() + icon_state = "implantpad-[case ? "on" : "off"]" /obj/item/implantpad/attack_self(mob/user) @@ -43,7 +40,7 @@ return user.drop_transfer_item_to_loc(new_case, src) case = new_case - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/implantpad/proc/eject_case(mob/user) @@ -57,7 +54,7 @@ case.add_fingerprint(user) case = null - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/implantpad/AltClick(mob/living/user) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 992b04842f7..d72f997ab0b 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -293,17 +293,20 @@ drop_sound = 'sound/items/handling/bone_drop.ogg' var/size + /obj/item/kitchen/knife/glassshiv/Initialize(mapload, obj/item/shard/sh) . = ..() if(sh) size = sh.icon_state - update_icon() - -/obj/item/kitchen/knife/glassshiv/update_icon() if(!size) size = pick("large", "medium", "small") + update_icon(UPDATE_ICON_STATE) + + +/obj/item/kitchen/knife/glassshiv/update_icon_state() icon_state = "[size]_[initial(icon_state)]" + /obj/item/kitchen/knife/glassshiv/plasma name = "plasma glass shiv" desc = "A plasma glass shard with some cloth wrapped around it" diff --git a/code/game/objects/items/weapons/legcuffs.dm b/code/game/objects/items/weapons/legcuffs.dm index e18f2c03c14..dd7ccbd9968 100644 --- a/code/game/objects/items/weapons/legcuffs.dm +++ b/code/game/objects/items/weapons/legcuffs.dm @@ -42,11 +42,16 @@ return BRUTELOSS +/obj/item/restraints/legcuffs/beartrap/update_icon_state() + icon_state = "[initial(icon_state)][armed]" + + + /obj/item/restraints/legcuffs/beartrap/attack_self(mob/user) ..() if(ishuman(user) && !user.stat && !user.restrained()) armed = !armed - icon_state = "[initial(icon_state)][armed]" + update_icon(UPDATE_ICON_STATE) to_chat(user, span_notice("[src] is now [armed ? "armed" : "disarmed"]")) @@ -116,7 +121,7 @@ return armed = FALSE - icon_state = "[initial(icon_state)][armed]" + update_icon(UPDATE_ICON_STATE) playsound(src.loc, 'sound/effects/snap.ogg', 50, TRUE) moving_thing.visible_message(span_danger("[moving_thing] triggers [src]."), span_userdanger("You trigger [src]!")) @@ -185,6 +190,11 @@ RegisterSignal(src, COMSIG_CARBON_TOGGLE_THROW, PROC_REF(spin_up_wrapper)) +/obj/item/restraints/legcuffs/bola/update_icon_state() + item_state = spinning ? "[initial(item_state)]_spin" : initial(item_state) + update_equipped_item() + + /obj/item/restraints/legcuffs/bola/proc/spin_up_wrapper(datum/source, throw_mode_state) // so that signal handler works SIGNAL_HANDLER if(throw_mode_state) // if we actually turned throw mode on @@ -196,8 +206,7 @@ return var/mob/living/owner = loc // can only be called if the mob is holding the bola. spinning = TRUE - item_state = "[initial(item_state)]_spin" - owner.update_inv_hands() + update_icon(UPDATE_ICON_STATE) playsound(owner, spin_sound, 30, list(38000, 48000), SHORT_RANGE_SOUND_EXTRARANGE) spin_timer_id = addtimer(CALLBACK(src, PROC_REF(spin_loop), owner), 1 SECONDS, TIMER_UNIQUE|TIMER_LOOP|TIMER_STOPPABLE|TIMER_DELETE_ME) do_spin_cycle(owner) @@ -244,10 +253,9 @@ /obj/item/restraints/legcuffs/bola/proc/reset_values(mob/living/user) throw_range = initial(throw_range) throw_speed = initial(throw_speed) - item_state = initial(item_state) spin_cycle = 0 spinning = FALSE - user?.update_inv_hands() + update_icon(UPDATE_ICON_STATE) if(spin_timer_id) deltimer(spin_timer_id) diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm index d4d3126cab5..02c8dbf7c05 100644 --- a/code/game/objects/items/weapons/lighters.dm +++ b/code/game/objects/items/weapons/lighters.dm @@ -280,6 +280,7 @@ pickup_sound = 'sound/items/handling/generic_small_pickup.ogg' drop_sound = 'sound/items/handling/generic_small_drop.ogg' + /obj/item/match/process() var/turf/location = get_turf(src) smoketime-- @@ -287,50 +288,65 @@ matchburnout() if(location) location.hotspot_expose(700, 5) - return + /obj/item/match/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) ..() matchignite() + /obj/item/match/extinguish_light(force = FALSE) if(!force) return matchburnout() + +/obj/item/match/update_icon_state() + icon_state = lit ? "match_lit" : "match_burnt" + item_state = lit ? "cigon" : "cigoff" + + +/obj/item/match/update_name(updates = ALL) + . = ..() + var/init_name = initial(name) + name = lit ? "lit [init_name]" : burnt ? "burnt [init_name]" : initial(name) + + +/obj/item/match/update_desc(updates = ALL) + . = ..() + var/init_name = initial(name) + desc = lit ? "A [init_name]. This one is lit." : burnt ? "A [init_name]. This one has seen better days." : initial(desc) + + /obj/item/match/proc/matchignite() if(!lit && !burnt) lit = TRUE - icon_state = "match_lit" - damtype = "fire" + damtype = FIRE force = 3 hitsound = 'sound/weapons/tap.ogg' - item_state = "cigon" - name = "lit match" - desc = "A match. This one is lit." attack_verb = list("burnt","singed") START_PROCESSING(SSobj, src) - update_icon() + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) return TRUE + /obj/item/match/proc/matchburnout() if(lit) lit = FALSE burnt = TRUE - damtype = "brute" + damtype = BRUTE force = initial(force) - icon_state = "match_burnt" - item_state = "cigoff" - name = "burnt match" - desc = "A match. This one has seen better days." attack_verb = list("flicked") STOP_PROCESSING(SSobj, src) + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) return TRUE + /obj/item/match/dropped(mob/user, silent = FALSE) matchburnout() . = ..() + /obj/item/match/attack(mob/living/carbon/M, mob/living/carbon/user) if(!isliving(M)) return ..() @@ -359,6 +375,7 @@ else ..() + /obj/item/match/decompile_act(obj/item/matter_decompiler/C, mob/user) if(burnt) C.stored_comms["wood"] += 1 @@ -366,20 +383,24 @@ return TRUE return ..() + /obj/item/proc/help_light_cig(mob/living/M) var/mask_item = M.get_item_by_slot(slot_wear_mask) if(istype(mask_item, /obj/item/clothing/mask/cigarette)) return mask_item + /obj/item/match/firebrand name = "firebrand" desc = "An unlit firebrand. It makes you wonder why it's not just called a stick." smoketime = 20 //40 seconds -/obj/item/match/firebrand/New() - ..() + +/obj/item/match/firebrand/Initialize(mapload) + . = ..() matchignite() + /obj/item/match/unathi name = "small blaze" desc = "A little flame of your own, currently located dangerously in your mouth." @@ -391,16 +412,24 @@ lit = TRUE w_class = WEIGHT_CLASS_BULKY //to prevent it going to pockets + /obj/item/match/unathi/Initialize(mapload) . = ..() START_PROCESSING(SSobj, src) + +/obj/item/match/unathi/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) + return // we are already burning + + /obj/item/match/unathi/matchburnout() if(!lit) return lit = FALSE //to avoid a qdel loop qdel(src) + /obj/item/match/unathi/Destroy() . = ..() STOP_PROCESSING(SSobj, src) + diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index d6caf9caf68..4357fb33819 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -38,6 +38,21 @@ "[user] is falling on the [name]! It looks like [user.p_theyre()] trying to commit suicide.")) return BRUTELOSS|FIRELOSS + +/obj/item/melee/energy/update_icon_state() + if(!active) + icon_state = initial(icon_state) + set_light(0) + return + if(icon_state_on) + icon_state = icon_state_on + set_light(brightness_on, l_color = item_color ? colormap[item_color] : null) + else + icon_state = "sword[item_color]" + set_light(brightness_on, l_color = colormap[item_color]) + update_equipped_item() + + /obj/item/melee/energy/attack_self(mob/living/carbon/user) if((CLUMSY in user.mutations) && prob(50)) to_chat(user, "You accidentally cut yourself with [src], like a doofus!") @@ -48,14 +63,6 @@ throwforce = throwforce_on hitsound = 'sound/weapons/blade1.ogg' throw_speed = 4 - if(attack_verb_on.len) - attack_verb = attack_verb_on - if(icon_state_on) - icon_state = icon_state_on - set_light(brightness_on, l_color = item_color ? colormap[item_color] : null) - else - icon_state = "sword[item_color]" - set_light(brightness_on, l_color=colormap[item_color]) w_class = w_class_on playsound(user, 'sound/weapons/saberon.ogg', 35, 1) //changed it from 50% volume to 35% because deafness to_chat(user, "[src] is now active.") @@ -66,17 +73,12 @@ throw_speed = initial(throw_speed) if(attack_verb_on.len) attack_verb = list() - icon_state = initial(icon_state) w_class = initial(w_class) playsound(user, 'sound/weapons/saberoff.ogg', 35, 1) //changed it from 50% volume to 35% because deafness - set_light(0) to_chat(user, "[src] can now be concealed.") - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() add_fingerprint(user) - return + update_icon(UPDATE_ICON_STATE) + /obj/item/melee/energy/axe name = "energy axe" @@ -119,7 +121,7 @@ origin_tech = "combat=3;magnets=4;syndicate=4" block_chance = 50 sharp = 1 - var/hacked = 0 + var/hacked = FALSE /obj/item/melee/energy/sword/New() ..() @@ -201,32 +203,24 @@ user.adjustBrainLoss(10) else to_chat(user, "You attach the ends of the two energy swords, making a single double-bladed weapon! You're cool.") - var/obj/item/twohanded/dualsaber/newSaber = new /obj/item/twohanded/dualsaber(drop_location()) - if(src.hacked) // That's right, we'll only check the "original" esword. - newSaber.hacked = 1 - newSaber.item_color = "rainbow" + var/obj/item/twohanded/dualsaber/newSaber = new(drop_location()) + if(hacked) // That's right, we'll only check the "original" esword. + newSaber.hacked = TRUE + newSaber.blade_color = "rainbow" user.temporarily_remove_item_from_inventory(W) user.temporarily_remove_item_from_inventory(src) qdel(W) qdel(src) user.put_in_hands(newSaber, ignore_anim = FALSE) - else if(istype(W, /obj/item/multitool)) - if(hacked == 0) - hacked = 1 - item_color = "rainbow" - to_chat(user, "RNBW_ENGAGE") - - if(active) - icon_state = "swordrainbow" - // Updating overlays, copied from welder code. - // I tried calling attack_self twice, which looked cool, except it somehow didn't update the overlays!! - if(user.r_hand == src) - user.update_inv_r_hand() - else if(user.l_hand == src) - user.update_inv_l_hand() - - else + else if(W.tool_behaviour == TOOL_MULTITOOL) + if(hacked) to_chat(user, "It's already fabulous!") + return + + hacked = TRUE + item_color = "rainbow" + to_chat(user, "RNBW_ENGAGE") + update_icon(UPDATE_ICON_STATE) /obj/item/melee/energy/sword/saber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) @@ -337,12 +331,6 @@ throw_speed = 4 if(attack_verb_on.len) attack_verb = attack_verb_on - if(icon_state_on) - icon_state = icon_state_on - set_light(brightness_on, l_color = item_color ? colormap[item_color] : null) - else - icon_state = "sword[item_color]" - set_light(brightness_on, l_color=colormap[item_color]) w_class = w_class_on playsound(user, 'sound/magic/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000)) to_chat(user, "You open [src]. It will now cleave enemies in a wide arc and deal additional damage to fauna.") @@ -353,17 +341,10 @@ throw_speed = initial(throw_speed) if(attack_verb_on.len) attack_verb = list() - icon_state = initial(icon_state) w_class = initial(w_class) playsound(user, 'sound/magic/fellowship_armory.ogg', 35, 1) //changed it from 50% volume to 35% because deafness - set_light(0) to_chat(user, "You close [src]. It will now attack rapidly and cause fauna to bleed.") - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - + update_icon(UPDATE_ICON_STATE) add_fingerprint(user) /obj/item/melee/energy/cleaving_saw/examine(mob/user) diff --git a/code/game/objects/items/weapons/misc.dm b/code/game/objects/items/weapons/misc.dm index 60a67ff64ee..e19f946512c 100644 --- a/code/game/objects/items/weapons/misc.dm +++ b/code/game/objects/items/weapons/misc.dm @@ -92,12 +92,19 @@ icon = 'icons/obj/lightning.dmi' icon_state = "lightning" desc = "test lightning" + var/angle -/obj/item/lightning/New() - ..() + +/obj/item/lightning/Initialize(mapload) + . = ..() icon_state = "1" -/obj/item/lightning/afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params) + +/obj/item/lightning/update_icon_state() + icon_state = "[angle]" + + +/obj/item/lightning/afterattack(atom/A, mob/living/user, flag, params) var/angle = get_angle(A, user) //to_chat(world, angle) angle = round(angle) + 45 @@ -108,9 +115,7 @@ if(!angle) angle = 1 - //to_chat(world, "adjusted [angle]") - icon_state = "[angle]" - //to_chat(world, "[angle] [(get_dist(user, A) - 1)]") + update_icon(UPDATE_ICON_STATE) user.Beam(A, "lightning", 'icons/obj/zap.dmi', 50, 15) /obj/item/newton diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 5593fe302d7..f4b6aa1dcfc 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -24,16 +24,20 @@ GLOB.janitorial_equipment -= src return ..() -/obj/item/mop/proc/wet_mop(obj/o, mob/user) - if(o.reagents.total_volume < 1) - to_chat(user, "[o] is out of water!") - if(!istype(o, /obj/item/reagent_containers/glass/bucket)) - janicart_insert(user, o) + +/obj/item/mop/proc/wet_mop(obj/target, mob/user) + if(target.reagents.total_volume < 1) + to_chat(user, "[target] is out of water!") + if(istype(target, /obj/structure/mopbucket)) + mopbucket_insert(user, target) + if(!istype(target, /obj/item/reagent_containers/glass/bucket)) + janicart_insert(user, target) return - o.reagents.trans_to(src, 5) - to_chat(user, "You wet [src] in [o].") - playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + target.reagents.trans_to(src, 5) + to_chat(user, "You wet [src] in [target].") + playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) + /obj/item/mop/proc/clean(turf/simulated/A) if(reagents.has_reagent("water", 1) || reagents.has_reagent("cleaner", 1) || reagents.has_reagent("holywater", 1)) @@ -69,10 +73,16 @@ else return ..() -/obj/item/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) - J.put_in_cart(src, user) - J.mymop=src - J.update_icon() + +/obj/item/mop/proc/janicart_insert(mob/user, obj/structure/janitorialcart/cart) + cart.mymop = src + cart.put_in_cart(src, user) + + +/obj/item/mop/proc/mopbucket_insert(mob/user, obj/structure/mopbucket/bucket) + bucket.mymop = src + bucket.put_in_cart(src, user) + /obj/item/mop/wash(mob/user, atom/source) reagents.add_reagent("water", 5) diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 30c97a48fa7..93a1cd0acd6 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -182,14 +182,14 @@ return to_chat(user, span_notice("You hook [thetank] up to [src].")) tank = thetank - update_icons() + update_icon(UPDATE_OVERLAYS) + + +/obj/item/pneumatic_cannon/update_overlays() + . = ..() + if(tank) + . += "[tank.icon_state]" -/obj/item/pneumatic_cannon/proc/update_icons() - overlays.Cut() - if(!tank) - return - overlays += image('icons/obj/weapons/pneumaticCannon.dmi', "[tank.icon_state]") - update_icon() #undef LOW_PRESSURE #undef MID_PRESSURE diff --git a/code/game/objects/items/weapons/pneumaticRifle.dm b/code/game/objects/items/weapons/pneumaticRifle.dm index 81992d550e4..01ed69bfabb 100644 --- a/code/game/objects/items/weapons/pneumaticRifle.dm +++ b/code/game/objects/items/weapons/pneumaticRifle.dm @@ -65,7 +65,7 @@ to_chat(user, span_notice("You strapped [src], so now you can wear it on your back")) isBelted = TRUE slot_flags |= SLOT_BACK - update_icons() + update_icon(UPDATE_OVERLAYS) return else to_chat(user, span_warning("[src] is already strapped!")) @@ -166,7 +166,7 @@ return to_chat(user, span_notice("You hook [thetank] up to [src].")) tank = thetank - update_icons() + update_icon(UPDATE_OVERLAYS) /datum/crafting_recipe/pneumatic_rifle name = "Pneumatic Rifle" @@ -181,10 +181,11 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/obj/item/gun/pneumatic_rifle/proc/update_icons() - overlays.Cut() + +/obj/item/gun/pneumatic_rifle/update_overlays() + . = ..() if(tank) - overlays += image('icons/obj/weapons/pneumaticRifle.dmi', "[tank.icon_state]") + . += "[tank.icon_state]" if(isBelted) - overlays += image('icons/obj/weapons/pneumaticRifle.dmi', "belt") - update_icon() + . += "belt" + diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 7e8fb75cb2e..cc0f5e69a7d 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -37,7 +37,7 @@ attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time -/obj/item/shield/riot/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/shield/riot/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/melee/baton)) if(cooldown < world.time - 25) user.visible_message("[user] bashes [src] with [W]!") @@ -130,14 +130,14 @@ add_fingerprint(user) return -/obj/item/shield/energy/update_icon() +/obj/item/shield/energy/update_icon_state() icon_state = "eshield[active]" /obj/item/shield/energy/syndie icon_state = "syndieshield0" desc = "Reverse-engineered shield that reflects almost all energy projectiles, but is useless against physical attacks. It can be retracted, expanded, and stored anywhere. Property of Gorlex marauders." -/obj/item/shield/energy/syndie/update_icon() +/obj/item/shield/energy/syndie/update_icon_state() icon_state = "syndieshield[active]" /obj/item/shield/riot/tele @@ -160,9 +160,14 @@ return ..() return FALSE + +/obj/item/shield/riot/tele/update_icon_state() + icon_state = "teleriot[active]" + + /obj/item/shield/riot/tele/attack_self(mob/living/user) active = !active - icon_state = "teleriot[active]" + update_icon(UPDATE_ICON_STATE) playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, 1) if(active) @@ -179,9 +184,6 @@ w_class = WEIGHT_CLASS_NORMAL slot_flags = null to_chat(user, "[src] can now be concealed.") - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() + update_equipped_item() add_fingerprint(user) - return + diff --git a/code/game/objects/items/weapons/spacechips.dm b/code/game/objects/items/weapons/spacechips.dm index b33ec81a7fe..f84f9478631 100644 --- a/code/game/objects/items/weapons/spacechips.dm +++ b/code/game/objects/items/weapons/spacechips.dm @@ -15,8 +15,7 @@ merge_type = /obj/item/stack/spacechips -/obj/item/stack/spacechips/update_icon()//changes icon depending on the amount of chips - ..() +/obj/item/stack/spacechips/update_icon_state()//changes icon depending on the amount of chips name = "[amount == max_amount ? "1000000" : amount] Chip[amount > 1 ? "s" : ""]" if(amount >= 1 && amount <= 20) icon_state = "c20" @@ -31,6 +30,7 @@ else icon_state = "c1000" + /obj/item/stack/spacechips/c10 amount = 10 diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm index 3c0a03d3785..edf7cdadb62 100644 --- a/code/game/objects/items/weapons/staff.dm +++ b/code/game/objects/items/weapons/staff.dm @@ -19,37 +19,38 @@ icon_state = "broom" item_state = "broom0" + +/obj/item/twohanded/staff/broom/update_icon_state() + item_state = "broom[HAS_TRAIT(src, TRAIT_WIELDED)]" + update_equipped_item() + + /obj/item/twohanded/staff/broom/wield(obj/item/source, mob/living/carbon/user) - item_state = "broom[wielded ? 1 : 0]" - force = wielded ? 5 : 3 - attack_verb = wielded ? list("rammed into", "charged at") : list("bludgeoned", "whacked", "cleaned") - if(user) - user.update_inv_l_hand() - user.update_inv_r_hand() - if(user.mind in SSticker.mode.wizards) - user.flying = wielded ? 1 : 0 - if(wielded) - to_chat(user, "You hold \the [src] between your legs.") - user.say("QUID 'ITCH") - animate(user, pixel_y = pixel_y + 10 , time = 10, loop = 1, easing = SINE_EASING) - else - animate(user, pixel_y = pixel_y + 10 , time = 1, loop = 1) - animate(user, pixel_y = pixel_y, time = 10, loop = 1, easing = SINE_EASING) - animate(user) - if(user.lying)//aka. if they have just been stunned - user.pixel_y -= 6 - else - if(wielded) - to_chat(user, "You hold \the [src] between your legs.") + force = 5 + attack_verb = list("rammed into", "charged at") + if(!user) + return + + update_icon(UPDATE_ICON_STATE) + if(user.mind && (user.mind in SSticker.mode.wizards)) + user.flying = TRUE + user.float(TRUE) + user.say("QUID 'ITCH") + animate(user, pixel_y = pixel_y + 10 , time = 10, loop = 1, easing = SINE_EASING) + + to_chat(user, "You hold \the [src] between your legs.") /obj/item/twohanded/staff/broom/unwield(obj/item/source, mob/living/carbon/user) + update_icon(UPDATE_ICON_STATE) + force = 3 + attack_verb = list("bludgeoned", "whacked", "cleaned") user.flying = FALSE user.update_gravity(user.mob_has_gravity()) animate(user) -/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.temporarily_remove_item_from_inventory(O) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 9d6fcad5899..de81b839a60 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -110,7 +110,8 @@ max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 400 // can store a ton of shit! -/obj/item/storage/backpack/santabag/update_icon() + +/obj/item/storage/backpack/santabag/update_icon_state() var/items_count = length(contents) switch(items_count) if(1 to 10) @@ -120,10 +121,8 @@ if(21 to INFINITY) icon_state = "giftbag2" - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_l_hand() - H.update_inv_r_hand() + update_equipped_item() + /obj/item/storage/backpack/cultpack name = "trophy rack" @@ -413,9 +412,9 @@ 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_ABSTRACT + 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 diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index df8f52adbeb..8344ed4bd03 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -49,8 +49,9 @@ playsound(loc, 'sound/items/eatfood.ogg', 50, 1, -1) return TOXLOSS -/obj/item/storage/bag/trash/update_icon() - switch(contents.len) + +/obj/item/storage/bag/trash/update_icon_state() + switch(length(contents)) if(21 to INFINITY) icon_state = "[initial(icon_state)]3" if(11 to 20) @@ -59,11 +60,8 @@ icon_state = "[initial(icon_state)]1" else icon_state = "[initial(icon_state)]" - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_l_hand() - H.update_inv_r_hand() - ..() + update_equipped_item() + /obj/item/storage/bag/trash/cyborg @@ -451,18 +449,12 @@ if(prob(10)) M.Weaken(4 SECONDS) -/obj/item/storage/bag/tray/proc/rebuild_overlays() - overlays.Cut() - for(var/obj/item/I in contents) - overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1) -/obj/item/storage/bag/tray/remove_from_storage(obj/item/W, atom/new_location) - ..() - rebuild_overlays() +/obj/item/storage/bag/tray/update_overlays() + . = ..() + for(var/obj/item/item in contents) + . += image(icon = item.icon, icon_state = item.icon_state, layer = -1, pixel_x = rand(-4,4), pixel_y = rand(-4,4)) -/obj/item/storage/bag/tray/handle_item_insertion(obj/item/I, prevent_warning = 0) - overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1) - ..() /obj/item/storage/bag/tray/cyborg @@ -482,8 +474,6 @@ else // they clicked on a table dropspot = target.loc - overlays = null - var/droppedSomething = 0 for(var/obj/item/I in contents) @@ -502,18 +492,19 @@ user.visible_message("[user] unloads [user.p_their()] service tray.") else user.visible_message("[user] drops all the items on [user.p_their()] tray.") - + update_icon(UPDATE_OVERLAYS) return ..() /obj/item/storage/bag/tray/cookies_tray var/cookie = /obj/item/reagent_containers/food/snacks/cookie + /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 - rebuild_overlays() + /obj/item/storage/bag/tray/cookies_tray/sugarcookie cookie = /obj/item/reagent_containers/food/snacks/sugarcookie @@ -560,18 +551,11 @@ M.Weaken(4 SECONDS) -/obj/item/storage/bag/dangertray/proc/rebuild_overlays() - overlays.Cut() - for(var/obj/item/I in contents) - overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1) - -/obj/item/storage/bag/dangertray/remove_from_storage(obj/item/W, atom/new_location) - ..() - rebuild_overlays() +/obj/item/storage/bag/dangertray/update_overlays() + . = ..() + for(var/obj/item/item in contents) + . += image(icon = item.icon, icon_state = item.icon_state, layer = -1, pixel_x = rand(-4,4), pixel_y = rand(-4,4)) -/obj/item/storage/bag/dangertray/handle_item_insertion(obj/item/I, prevent_warning = 0) - overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1) - ..() /* * Chemistry bag diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index bb506aef1e3..95396f4a984 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -7,6 +7,7 @@ lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi' slot_flags = SLOT_BELT + flags_2 = BLOCKS_LIGHT_2 attack_verb = list("whipped", "lashed", "disciplined") max_integrity = 300 pickup_sound = 'sound/items/handling/backpack_pickup.ogg' @@ -14,13 +15,16 @@ drop_sound = 'sound/items/handling/backpack_drop.ogg' var/use_item_overlays = FALSE // Do we have overlays for items held inside the belt? -/obj/item/storage/belt/update_icon() - if(use_item_overlays) - overlays.Cut() - for(var/obj/item/I in contents) - if(I.belt_icon) - overlays += "[I.belt_icon]" - ..() + +/obj/item/storage/belt/update_overlays() + . = ..() + if(!use_item_overlays) + return + for(var/obj/item/item in contents) + if(!item.belt_icon) + continue + . += mutable_appearance(icon, item.belt_icon, color = item.color) + /obj/item/storage/belt/proc/can_use() return is_equipped() @@ -450,6 +454,12 @@ new /obj/item/grenade/plastic/x4/thermite(src) new /obj/item/storage/pill_bottle/sovietstimulants(src) +/obj/item/storage/belt/military/assault/gammaert/full/populate_contents() + new /obj/item/storage/pouch/fast(src) + new /obj/item/storage/pouch/fast(src) + new /obj/item/storage/pouch/fast(src) + new /obj/item/melee/classic_baton/telescopic(src) + /obj/item/storage/belt/janitor name = "janibelt" desc = "A belt used to hold most janitorial supplies." @@ -501,21 +511,16 @@ /obj/item/storage/belt/lazarus/Initialize(mapload) . = ..() - update_icon() + update_icon(UPDATE_ICON_STATE) -/obj/item/storage/belt/lazarus/update_icon() - ..() +/obj/item/storage/belt/lazarus/update_icon_state() icon_state = "[initial(icon_state)]_[length(contents)]" /obj/item/storage/belt/lazarus/attackby(obj/item/W, mob/user) var/amount = length(contents) . = ..() if(amount != length(contents)) - update_icon() - -/obj/item/storage/belt/lazarus/remove_from_storage(obj/item/W, atom/new_location) - ..() - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/storage/belt/bandolier name = "bandolier" @@ -544,19 +549,14 @@ new /obj/item/ammo_casing/shotgun/beanbag/fake(src) update_icon() -/obj/item/storage/belt/bandolier/update_icon() - ..() +/obj/item/storage/belt/bandolier/update_icon_state() icon_state = "[initial(icon_state)]_[length(contents)]" /obj/item/storage/belt/bandolier/attackby(obj/item/W, mob/user) var/amount = length(contents) . = ..() if(amount != length(contents)) - update_icon() - -/obj/item/storage/belt/bandolier/remove_from_storage(obj/item/W, atom/new_location) - ..() - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/storage/belt/holster name = "shoulder holster" @@ -695,16 +695,14 @@ return playsound(src, 'sound/weapons/blade_unsheath.ogg', 20) -/obj/item/storage/belt/rapier/update_icon() - . = ..() +/obj/item/storage/belt/rapier/update_icon_state() icon_state = initial(icon_state) item_state = initial(item_state) if(length(contents)) icon_state = "[icon_state]-rapier" item_state = "[item_state]-rapier" - if(isliving(loc)) - var/mob/living/L = loc - L.update_inv_belt() + update_equipped_item() + // ------------------------------------- // Bluespace Belt @@ -977,22 +975,19 @@ sheath_sound = 'sound/weapons/blade_dark_sheath.ogg' unsheath_sound = 'sound/weapons/blade_dark_unsheath.ogg' -/obj/item/storage/belt/claymore/update_icon() - . = ..() +/obj/item/storage/belt/claymore/update_icon_state() if(length(contents)) icon_state = "[initial(icon_state)]_blade" item_state = "[initial(icon_state)]_blade" else icon_state = initial(icon_state) item_state = initial(item_state) - if(isliving(loc)) - var/mob/living/L = loc - L.update_inv_belt() - L.update_inv_s_store() + update_equipped_item() + /obj/item/storage/belt/claymore/populate_contents() new claymore_path(src) - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/storage/belt/claymore/attack_hand(mob/user) if(loc != user) @@ -1008,7 +1003,7 @@ var/obj/item/I = contents[1] H.visible_message(span_notice("[H] takes [I] out of [src]."), span_notice("You take [I] out of [src].")) H.put_in_hands(I, ignore_anim = FALSE) - update_icon() + update_icon(UPDATE_ICON_STATE) else to_chat(user, span_warning("[src] is empty!")) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index e8bb99075a5..20754ee59d4 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -85,10 +85,10 @@ else M.LAssailant = user - if(!(ishuman(user) || SSticker) && SSticker.mode.name != "monkey") + if(!ishuman(user) || ismonkeybasic(user)) to_chat(user, "You don't have the dexterity to do this!") return - if(!user.mind?.isholy) + if(!user.mind || !user.mind.isholy) to_chat(user, "The book sizzles in your hands.") user.take_organ_damage(0, 10) return @@ -181,21 +181,6 @@ item_state = choice_icons["inhand"] customisable = FALSE - // Carpet symbol icons are currently broken, so commented out until it's fixed - /*var/carpet_dir - switch(choice) - if("Bible") - carpet_dir = 2 - if("Koran") - carpet_dir = 4 - if("Scientology") - carpet_dir = 8 - if(carpet_dir) - for(var/area/chapel/main/A in world) - for(var/turf/T in A.contents) - if(T.icon_state == "carpetsymbol") - T.dir = carpet_dir*/ - SSblackbox.record_feedback("text", "religion_book", 1, "[choice]", 1) if(SSticker) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index f07c412fd44..35518f02d05 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -269,7 +269,7 @@ new /obj/item/implantcase/tracking(src) new /obj/item/implanter(src) new /obj/item/implantpad(src) - new /obj/item/locator(src) + new /obj/item/gps/security(src) /obj/item/storage/box/minertracker name = "boxed tracking implant kit" @@ -281,7 +281,7 @@ new /obj/item/implantcase/tracking(src) new /obj/item/implanter(src) new /obj/item/implantpad(src) - new /obj/item/locator(src) + new /obj/item/gps/security(src) /obj/item/storage/box/chemimp name = "chemical implant kit" @@ -647,6 +647,7 @@ icon = 'icons/obj/cigarettes.dmi' icon_state = "matchbox" item_state = "matchbox" + base_icon_state = "matchbox" storage_slots = 10 w_class = WEIGHT_CLASS_TINY max_w_class = WEIGHT_CLASS_TINY @@ -663,7 +664,19 @@ if(istype(W, /obj/item/match) && !W.lit) W.matchignite() playsound(user.loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, 1) - return + + +/obj/item/storage/box/matches/update_icon_state() + switch(length(contents)) + if(10 to INFINITY) + icon_state = base_icon_state + if(5 to 9) + icon_state = "[base_icon_state]_almostfull" + if(1 to 4) + icon_state = "[base_icon_state]_almostempty" + else + icon_state = "[base_icon_state]_e" + /obj/item/storage/box/autoinjectors name = "box of injectors" @@ -762,13 +775,29 @@ foldable = null var/design = NODESIGN -/obj/item/storage/box/papersack/update_icon() - if(!contents.len) - icon_state = "[item_state]" - else icon_state = "[item_state]_closed" + +/obj/item/storage/box/papersack/update_desc(updates = ALL) + . = ..() + switch(design) + if(NODESIGN) + desc = "A sack neatly crafted out of paper." + if(NANOTRASEN) + desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go." + if(SYNDI) + desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program." + if(HEART) + desc = "A paper sack with a heart etched onto the side." + if(SMILE) + desc = "A paper sack with a crude smile etched onto the side." + + +/obj/item/storage/box/papersack/update_icon_state() + item_state = "paperbag_[design]" + icon_state = length(contents) ? "[item_state]_closed" : "[item_state]" + /obj/item/storage/box/papersack/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/pen)) + if(is_pen(W)) //if a pen is used on the sack, dialogue to change its design appears if(contents.len) to_chat(user, "You can't modify [src] with items still inside!") @@ -784,19 +813,7 @@ return to_chat(usr, "You make some modifications to [src] using your pen.") design = switchDesign - icon_state = "paperbag_[design]" - item_state = "paperbag_[design]" - switch(design) - if(NODESIGN) - desc = "A sack neatly crafted out of paper." - if(NANOTRASEN) - desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go." - if(SYNDI) - desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program." - if(HEART) - desc = "A paper sack with a heart etched onto the side." - if(SMILE) - desc = "A paper sack with a crude smile etched onto the side." + update_appearance(UPDATE_DESC|UPDATE_ICON_STATE) return else if(is_sharp(W)) if(!contents.len) @@ -844,8 +861,7 @@ new /obj/item/crowbar/red(src) new /obj/item/kitchen/knife/combat(src) new /obj/item/radio/centcom(src) - new /obj/item/reagent_containers/food/pill/patch/synthflesh(src) - new /obj/item/reagent_containers/hypospray/autoinjector(src) + new /obj/item/storage/firstaid/crew(src) /obj/item/storage/box/soviet name = "boxed survival kit" @@ -1018,6 +1034,24 @@ new /obj/item/clothing/gloves/combat(src) new /obj/item/storage/backpack/security(src) +/obj/item/storage/box/dominator_kit + name = "Dominator kit" + icon_state = "box_dominator" + +/obj/item/storage/box/dominator_kit/populate_contents() + new /obj/item/gun/energy/dominator/sibyl(src) + new /obj/item/clothing/accessory/holster(src) + +/obj/item/storage/box/enforcer_kit + name = "Enforcer kit" + icon_state = "box_enforcer" + +/obj/item/storage/box/enforcer_kit/populate_contents() + new /obj/item/gun/projectile/automatic/pistol/enforcer/security(src) + new /obj/item/ammo_box/magazine/enforcer(src) + new /obj/item/ammo_box/magazine/enforcer(src) + new /obj/item/clothing/accessory/holster(src) + /obj/item/storage/box/hardmode_box name = "box of HRD-MDE project box" desc = "Contains everything needed to get yourself killed for a medal." diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index acf687cfa60..2c9df74c88e 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -18,10 +18,10 @@ 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]" - return + +/obj/item/storage/fancy/update_icon_state() + icon_state = "[icon_type]box[length(contents)]" + /obj/item/storage/fancy/examine(mob/user) . = ..() @@ -47,23 +47,29 @@ foldable = /obj/item/stack/sheet/cardboard foldable_amt = 1 -/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] - var/icon/new_donut_icon = icon('icons/obj/food/containers.dmi', "donut_[donut.donut_sprite_type]") - new_donut_icon.Shift(EAST, 3 * (i-1)) - overlays += new_donut_icon +/obj/item/storage/fancy/donut_box/update_icon_state() + return + + +/obj/item/storage/fancy/donut_box/update_overlays() + . = ..() + for(var/I = 1 to length(contents)) + var/obj/item/reagent_containers/food/snacks/donut/donut = contents[I] + var/icon/new_donut_icon = icon(icon, "donut_[donut.donut_sprite_type]") + new_donut_icon.Shift(EAST, 3 * (I - 1)) + . += new_donut_icon + . += "donutbox_front" - overlays += icon('icons/obj/food/containers.dmi', "donutbox_front") /obj/item/storage/fancy/donut_box/populate_contents() for(var/i = 1 to storage_slots) new /obj/item/reagent_containers/food/snacks/donut(src) - update_icon() + update_icon(UPDATE_OVERLAYS) + /obj/item/storage/fancy/donut_box/empty/populate_contents() + update_icon(UPDATE_OVERLAYS) return /* @@ -135,17 +141,23 @@ new /obj/item/toy/crayon/blue(src) new /obj/item/toy/crayon/purple(src) new /obj/item/toy/crayon/black(src) - update_icon() + update_icon(UPDATE_OVERLAYS) + -/obj/item/storage/fancy/crayons/update_icon() - overlays = list() //resets list - overlays += image('icons/obj/crayons.dmi',"crayonbox") +/obj/item/storage/fancy/crayons/update_icon_state() + return + + +/obj/item/storage/fancy/crayons/update_overlays() + . = ..() for(var/obj/item/toy/crayon/crayon in contents) - overlays += image('icons/obj/crayons.dmi',crayon.colourName) + . += 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/crayon = I + switch(crayon.colourName) if("mime") to_chat(usr, "This crayon is too sad to be contained in this box.") return @@ -182,58 +194,57 @@ for(var/i = 1 to storage_slots) new cigarette_type(src) -/obj/item/storage/fancy/cigarettes/update_icon() //lazy as hell - switch(contents.len) +/obj/item/storage/fancy/cigarettes/update_icon_state() + var/init_state = initial(icon_state) + switch(length(contents)) if(17 to INFINITY) - icon_state = "[initial(icon_state)]6" + icon_state = "[init_state]6" if(14 to 16) - icon_state = "[initial(icon_state)]5" + icon_state = "[init_state]5" if(11 to 13) - icon_state = "[initial(icon_state)]4" + icon_state = "[init_state]4" if(7 to 10) - icon_state = "[initial(icon_state)]3" + icon_state = "[init_state]3" if(4 to 6) - icon_state = "[initial(icon_state)]2" + icon_state = "[init_state]2" if(1 to 3) - icon_state = "[initial(icon_state)]1" + icon_state = "[init_state]1" else - icon_state = "[initial(icon_state)]0" - -/obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M, /mob)) - return - - if(istype(M) && M == user && user.zone_selected == "mouth" && contents.len > 0 && !user.wear_mask) - var/got_cig = 0 - for(var/num=1, num <= contents.len, num++) - var/obj/item/I = contents[num] - if(istype(I, /obj/item/clothing/mask/cigarette)) - var/obj/item/clothing/mask/cigarette/C = I - user.equip_to_slot_if_possible(C, slot_wear_mask) - to_chat(user, "You take \a [C.name] out of the pack.") - update_icon() - got_cig = 1 - break - if(!got_cig) - to_chat(user, "There are no smokables in the pack!") + icon_state = "[init_state]0" + + +/obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/human/target, mob/living/carbon/user) + if(!ishuman(target) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH) + return ..() + + var/obj/item/clothing/mask/cigarette/cigar = locate() in src + if(!cigar) + to_chat(user, span_warning("There are no smokables in the pack!")) + return TRUE + + if(target.equip_to_slot_if_possible(cigar, slot_wear_mask, disable_warning = TRUE)) + to_chat(user, span_notice("You took \a [cigar.name] out of the pack[target != user ? " and deftly place it in [target] mouth" : ""].")) else - ..() + to_chat(user, span_warning("Something is blocking [target] mouth!")) + + return TRUE -/obj/item/storage/fancy/cigarettes/can_be_inserted(obj/item/W as obj, stop_messages = 0) + +/obj/item/storage/fancy/cigarettes/can_be_inserted(obj/item/W , stop_messages = 0) if(istype(W, /obj/item/match)) - var/obj/item/match/M = W - if(M.lit == 1) + var/obj/item/match/match = W + if(match.lit) if(!stop_messages) - to_chat(usr, "Putting a lit [W] in [src] probably isn't a good idea.") - return 0 + to_chat(usr, span_notice("Putting a lit [W] in [src] probably isn't a good idea.")) + return FALSE if(istype(W, /obj/item/lighter)) - var/obj/item/lighter/L = W - if(L.lit == 1) + var/obj/item/lighter/lighter = W + if(lighter.lit) if(!stop_messages) - 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 - .=..() + to_chat(usr, span_notice("Putting [W] in [src] while lit probably isn't a good idea.")) + return FALSE + return ..() + /obj/item/storage/fancy/cigarettes/decompile_act(obj/item/matter_decompiler/C, mob/user) if(!length(contents)) @@ -336,10 +347,15 @@ for(var/i in 1 to storage_slots) new /obj/item/rollingpaper(src) -/obj/item/storage/fancy/rollingpapers/update_icon() - overlays.Cut() - if(!contents.len) - overlays += "[icon_state]_empty" + +/obj/item/storage/fancy/crayons/update_icon_state() + return + + +/obj/item/storage/fancy/rollingpapers/update_icon_state() + . = ..() + if(!length(contents)) + . += "[icon_state]_empty" /* * cigcase @@ -353,10 +369,10 @@ storage_slots = 7 can_hold = list(/obj/item/clothing/mask/cigarette/cigar) -/obj/item/storage/fancy/cigcase/update_icon(var/itemremoved = 0) - var/total_contents = src.contents.len - itemremoved - src.icon_state = "[src.icon_type]case[total_contents]" - return + +/obj/item/storage/fancy/cigcase/update_icon_state() + icon_state = "[icon_type]case[length(contents)]" + /obj/item/storage/fancy/cigcase/populate_contents() for(var/I = 1 to storage_slots) @@ -390,27 +406,25 @@ storage_slots = 6 req_access = list(ACCESS_VIROLOGY) + /obj/item/storage/lockbox/vials/populate_contents() for(var/I = 1 to storage_slots) new /obj/item/reagent_containers/glass/beaker/vial(src) 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_state() + icon_state = "vialbox[length(contents)]" + + +/obj/item/storage/lockbox/vials/update_overlays() + . = ..() if(!broken) - overlays += image(icon, src, "led[locked]") + . += "led[locked]" if(locked) - overlays += image(icon, src, "cover") + . += "cover" else - overlays += image(icon, src, "ledb") - return - -/obj/item/storage/lockbox/vials/attackby(obj/item/W as obj, mob/user as mob, params) - ..() - update_icon() - + . += "ledb" ///Aquatic Starter Kit diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 6bc66cb282c..6b33df174aa 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -353,22 +353,25 @@ new /obj/item/reagent_containers/food/pill/charcoal(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. - if(iscarbon(over_object)) - var/mob/living/carbon/C = over_object - if(loc == C && src == C.get_active_hand()) - if(!contents.len) - to_chat(C, "There is nothing in [src]!") - return - C.visible_message("[C] [rapid_intake_message]") - if(do_mob(C, C, 100)) // 10 seconds - for(var/obj/item/reagent_containers/food/pill/P in contents) - P.attack(C, C) - C.visible_message("[C] [rapid_post_instake_message]") - return + +/obj/item/storage/pill_bottle/MouseDrop(mob/living/carbon/user, src_location, over_location, src_control, over_control, params) // Best utilized if you're a cantankerous doctor with a Vicodin habit. + if(iscarbon(user) && src == user.get_active_hand()) + if(!length(contents)) + to_chat(user, span_notice("There is nothing in [src]!")) + return FALSE + + user.visible_message(span_danger("[user] [rapid_intake_message]")) + if(!do_mob(user, user, 10 SECONDS) || src != user.get_active_hand()) + return FALSE + + for(var/obj/item/reagent_containers/food/pill/pill in src) + pill.attack(user, user) + user.visible_message(span_danger("[user] [rapid_post_instake_message]")) + return FALSE return ..() + /obj/item/storage/pill_bottle/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/pen) || istype(I, /obj/item/flashlight/pen)) rename_interactive(user, I) diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index e9f3455468a..1c08db71d6e 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -34,70 +34,36 @@ * If you are using these you will probably want to override attackby() as well. * See /obj/item/clothing/suit/storage for an example. * Items that use internal storage have the option of calling this to emulate default storage MouseDrop behaviour. - * Returns `TRUE` if the master item's parent's MouseDrop() should be called, `FALSE` otherwise. It's strange, but no other way of + * Returns `FALSE` if the master item's parent's MouseDrop() should be called, `TRUE` otherwise. It's strange, but no other way of * doing it without the ability to call another proc's parent, really. */ -/obj/item/storage/internal/proc/handle_mousedrop(mob/user, obj/over_object) - if(ishuman(user)) //so monkeys can take off their backpacks -- Urist - - if(istype(user.loc,/obj/mecha)) // stops inventory actions in a mech - return FALSE - - if(over_object == user && Adjacent(user)) // this must come before the screen objects only block - src.open(user) - return FALSE - - if(!(istype(over_object, /obj/screen))) - return TRUE - - //makes sure master_item is equipped before putting it in hand, so that we can't drag it into our hand from miles away. - //there's got to be a better way of doing this... - if(!(master_item.loc == user) || (master_item.loc && master_item.loc.loc == user)) - return FALSE - - if(!(user.restrained() ) && !(user.stat)) - switch(over_object.name) - if("r_hand") - if(!master_item.remove_item_from_storage(drop_location())) - user.drop_item_ground(master_item) - user.put_in_r_hand(master_item) - if("l_hand") - if(!master_item.remove_item_from_storage(drop_location())) - user.drop_item_ground(master_item) - user.put_in_l_hand(master_item) - master_item.add_fingerprint(user) - return FALSE - return FALSE +/obj/item/storage/internal/proc/handle_mousedrop(mob/living/carbon/human/user, obj/over_object) + . = FALSE + if(over_object == user && ishuman(user) && !user.incapacitated() && !ismecha(user.loc) && !is_ventcrawling(user) && user.Adjacent(master_item)) + open(user) + master_item.add_fingerprint(user) + return TRUE /** * Items that use internal storage have the option of calling this to emulate default storage attack_hand behaviour. - * Returns `TRUE` if the master item's parent's attack_hand() should be called, 0 otherwise. + * Returns `FALSE` if the master item's parent's attack_hand() should be called, `TRUE` otherwise. * It's strange, but no other way of doing it without the ability to call another proc's parent, really. */ -/obj/item/storage/internal/proc/handle_attack_hand(mob/user) - - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.l_store == master_item && !H.get_active_hand()) //Prevents opening if it's in a pocket. - H.put_in_hands(master_item) - H.l_store = null - return FALSE - if(H.r_store == master_item && !H.get_active_hand()) - H.put_in_hands(master_item) - H.r_store = null - return FALSE - - src.add_fingerprint(user) - if(master_item.loc == user) - src.open(user) +/obj/item/storage/internal/proc/handle_attack_hand(mob/living/carbon/human/user) + . = TRUE + if(master_item.loc != user || !ishuman(user) || user.incapacitated() || ismecha(user.loc) || is_ventcrawling(user)) return FALSE - for(var/mob/M in range(1, master_item.loc)) - if(M.s_active == src) - src.close(M) - return TRUE + //Prevents opening if it's in a pocket. + if(!user.get_active_hand() && (master_item == user.l_store || master_item == user.r_store)) + user.temporarily_remove_item_from_inventory(master_item) + user.put_in_hands(master_item) + return . + open(user) + master_item.add_fingerprint(user) -/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 e48f0e8d6cc..c001c82d5ac 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -8,12 +8,20 @@ max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item. storage_slots = 4 req_access = list(ACCESS_ARMORY) - var/locked = 1 - var/broken = 0 + var/locked = TRUE + var/broken = FALSE var/icon_locked = "lockbox+l" var/icon_closed = "lockbox" var/icon_broken = "lockbox+b" + +/obj/item/storage/lockbox/update_icon_state() + if(broken) + icon_state = icon_broken + return + icon_state = locked ? icon_locked : icon_closed + + /obj/item/storage/lockbox/attackby(obj/item/I, mob/user, params) if(I.GetID()) if(broken) @@ -21,14 +29,13 @@ return if(check_access(I)) locked = !locked + update_icon() if(locked) - icon_state = icon_locked to_chat(user, "You lock \the [src]!") if(user.s_active) user.s_active.close(user) return else - icon_state = icon_closed to_chat(user, "You unlock \the [src]!") origin_tech = null //wipe out any origin tech if it's unlocked in any way so you can't double-dip tech levels at R&D. return @@ -42,36 +49,39 @@ ..() else to_chat(user, "It's locked!") - return -/obj/item/storage/lockbox/show_to(mob/user as mob) + +/obj/item/storage/lockbox/show_to(mob/user) if(locked) to_chat(user, "It's locked!") else ..() return + /obj/item/storage/lockbox/can_be_inserted(obj/item/W, stop_messages = 0) if(!locked) return ..() if(!stop_messages) to_chat(usr, "[src] is locked!") - return 0 + return FALSE + /obj/item/storage/lockbox/emag_act(mob/user) if(!broken) add_attack_logs(user, src, "emagged") - broken = 1 - locked = 0 + broken = TRUE + locked = FALSE desc = "It appears to be broken." - icon_state = icon_broken + update_icon() if(user) to_chat(user, "You unlock \the [src].") origin_tech = null //wipe out any origin tech if it's unlocked in any way so you can't double-dip tech levels at R&D. -/obj/item/storage/lockbox/hear_talk(mob/living/M as mob, list/message_pieces) -/obj/item/storage/lockbox/hear_message(mob/living/M as mob, msg) +/obj/item/storage/lockbox/hear_talk(mob/living/M, list/message_pieces) + +/obj/item/storage/lockbox/hear_message(mob/living/M, msg) /obj/item/storage/lockbox/mindshield name = "Lockbox (Mindshield Implants)" @@ -83,6 +93,9 @@ new /obj/item/implantcase/mindshield(src) new /obj/item/implanter/mindshield(src) +/obj/item/storage/lockbox/mindshield/ert + w_class = WEIGHT_CLASS_NORMAL + /obj/item/storage/lockbox/sibyl_system_mod name = "lockbox (Sibyl System Mods)" desc = "Contains proprietary Sibyl System mods for energy guns." @@ -126,6 +139,7 @@ name = "lockbox (T4)" desc = "Contains three T4 breaching charges." req_access = list(ACCESS_CENT_SPECOPS) + w_class = WEIGHT_CLASS_NORMAL /obj/item/storage/lockbox/t4/populate_contents() for(var/I in 1 to 3) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 77376ffa221..1aa67075c29 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -27,11 +27,21 @@ max_w_class = WEIGHT_CLASS_SMALL max_combined_w_class = 14 + /obj/item/storage/secure/examine(mob/user) . = ..() if(in_range(user, src)) . += "The service panel is [open ? "open" : "closed"]." + +/obj/item/storage/secure/update_overlays() + . = ..() + if(emagged) + . += icon_locking + else if(!locked) + . += icon_opened + + /obj/item/storage/secure/populate_contents() new /obj/item/paper(src) new /obj/item/pen(src) @@ -41,13 +51,13 @@ if((istype(W, /obj/item/melee/energy/blade)) && (!emagged)) emag_act(user, W) - if(istype(W, /obj/item/screwdriver)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) if(do_after(user, 20 * W.toolspeed * gettoolspeedmod(user), target = src)) open = !open user.show_message("You [open ? "open" : "close"] the service panel.", 1) return - if((istype(W, /obj/item/multitool)) && (open) && (!l_hacking)) + if((W.tool_behaviour = TOOL_MULTITOOL) && (open) && (!l_hacking)) user.show_message("Now attempting to reset internal memory, please hold.", 1) l_hacking = TRUE if(do_after(user, 100 * W.toolspeed * gettoolspeedmod(user), target = src)) @@ -70,30 +80,34 @@ return ..() + /obj/item/storage/secure/emag_act(mob/user, obj/weapon) - if(!emagged) - add_attack_logs(user, src, "emagged") - emagged = TRUE - overlays += image('icons/obj/storage.dmi', icon_sparking) - sleep(6) - overlays.Cut() - overlays += image('icons/obj/storage.dmi', icon_locking) - locked = FALSE - 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, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - if(user) - to_chat(user, "You slice through the lock on [src].") - else if(user) - to_chat(user, "You short out the lock on [src].") + if(emagged) + return + + add_attack_logs(user, src, "emagged") + emagged = TRUE + locked = FALSE + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + flick_overlay_view(image(icon, src, icon_sparking), 1 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 1 SECONDS) + + 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, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + if(user) + to_chat(user, "You slice through the lock on [src].") + else if(user) + to_chat(user, "You short out the lock on [src].") + /obj/item/storage/secure/AltClick(mob/living/user) if(istype(user) && !try_to_open()) return FALSE return ..() -/obj/item/storage/secure/MouseDrop(over_object, src_location, over_location) +/obj/item/storage/secure/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) if(!try_to_open()) return FALSE return ..() @@ -138,8 +152,8 @@ switch(action) if("close") locked = TRUE - overlays.Cut() code = null + update_icon(UPDATE_OVERLAYS) close(usr) if("setnumber") switch(params["buttonValue"]) @@ -150,9 +164,8 @@ to_chat(usr, "The code was set successfully.") else if((code == l_code) && l_set) locked = FALSE - overlays.Cut() - overlays += image('icons/obj/storage.dmi', icon_opened) code = null + update_icon(UPDATE_OVERLAYS) else code = "ERROR" if("R") diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index ce9e95495ac..5f06e4bc428 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -9,6 +9,7 @@ name = "storage" icon = 'icons/obj/storage.dmi' w_class = WEIGHT_CLASS_NORMAL + flags_2 = BLOCKS_LIGHT_2 ///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) @@ -98,40 +99,44 @@ continue hide_from(player) -/obj/item/storage/MouseDrop(obj/over_object) - if(ishuman(usr)) //so monkeys can take off their backpacks -- Urist - 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 +/obj/item/storage/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(!ishuman(usr)) + return FALSE - if(over_object == M && Adjacent(M)) // this must come before the screen objects only block - if(M.s_active) - M.s_active.close(M) - open(M) - return + var/mob/living/carbon/human/user = usr - 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")) - 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 + // Stops inventory actions in a mech, while ventcrawling and while being incapacitated + if(ismecha(user.loc) || is_ventcrawling(user) || user.incapacitated(FALSE, TRUE, TRUE)) + return FALSE + + if(over_object == user && user.Adjacent(src)) // this must come before the screen objects only block + open(user) + return FALSE + + if((!istype(src, /obj/item/storage/lockbox) && (istype(over_object, /obj/structure/table) || istype(over_object, /turf/simulated/floor)) \ + && length(contents) && loc == user && !user.incapacitated() && user.Adjacent(over_object))) + + if(alert(user, "Empty [src] onto [over_object]?", "Confirm", "Yes", "No") != "Yes") + return FALSE + + if(!user || !over_object || user.incapacitated() || loc != user || !user.Adjacent(over_object)) + return FALSE + + close(user) + user.face_atom(over_object) + user.visible_message( + span_notice("[user] empties [src] onto [over_object]."), + span_notice("You empty [src] onto [over_object]."), + ) + var/turf/object_turf = get_turf(over_object) + for(var/obj/item/item in src) + remove_from_storage(item, object_turf) + + update_icon() // For content-sensitive icons + return FALSE - return ..() + return ..() /obj/item/storage/AltClick(mob/user) @@ -186,6 +191,14 @@ if(user.s_active == src) user.s_active = null + +/obj/item/storage/proc/hide_from_all_viewers() + if(!LAZYLEN(mobs_viewing)) + return + for(var/mob/viewer as anything in mobs_viewing) + hide_from(viewer) + + /obj/item/storage/proc/update_viewers() for(var/_M in mobs_viewing) var/mob/M = _M @@ -438,7 +451,7 @@ if(istype(src, /obj/item/storage/fancy)) var/obj/item/storage/fancy/F = src - F.update_icon(TRUE) + F.update_icon() for(var/_M in mobs_viewing) var/mob/M = _M diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 21e9f1520ae..9e6f0c59bf8 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -527,3 +527,15 @@ To apply, hold the injector a short distance away from the outer thigh before ap /obj/item/storage/box/syndie_kit/knives_kit/populate_contents() for(var/i in 1 to 7) new /obj/item/kitchen/knife/combat/throwing(src) +/obj/item/storage/box/syndie_kit/blackops_kit + name = "Black ops kit" + +/obj/item/storage/box/syndie_kit/blackops_kit/populate_contents() + new /obj/item/clothing/under/syndicate/blackops(src) + new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/shoes/combat(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/glasses/night(src) + new /obj/item/clothing/accessory/storage/webbing(src) + new /obj/item/storage/belt/military/assault(src) + new /obj/item/clothing/mask/balaclava(src) diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index b27d66f347e..86dd971d773 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -35,56 +35,70 @@ var/obj/item/card/id/front_id = null var/image/front_id_overlay = null -/obj/item/storage/wallet/proc/id_check() - front_id = (locate(/obj/item/card/id) in contents) - if(!front_id) - name = "[item_color] leather wallet" - return FALSE - name = "[item_color] leather wallet with [front_id] on the front" - return TRUE -/obj/item/storage/wallet/remove_from_storage(obj/item/W, atom/new_location) - . = ..(W, new_location) - if(.) - id_check() - update_icon() +/obj/item/storage/wallet/remove_from_storage(obj/item/I, atom/new_location) + . = ..() + if(. && istype(I, /obj/item/card/id)) + refresh_ID() + + +/obj/item/storage/wallet/handle_item_insertion(obj/item/I, prevent_warning = FALSE) + . = ..() + if(. && istype(I, /obj/item/card/id)) + refresh_ID() -/obj/item/storage/wallet/handle_item_insertion(obj/item/W, prevent_warning = 0) - . = ..(W, prevent_warning) - if(.) - id_check() - update_icon() /obj/item/storage/wallet/swap_items(obj/item/item_1, obj/item/item_2, mob/user) - . = ..(item_1, item_2, user) + . = ..() if(.) - id_check() - update_icon() + refresh_ID() + +/obj/item/storage/wallet/orient2hud(mob/user) + . = ..() + refresh_ID() + + +/obj/item/storage/wallet/proc/refresh_ID() + // Locate the first ID in the wallet + front_id = (locate(/obj/item/card/id) in contents) -/obj/item/storage/wallet/update_icon() if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.wear_id == src) - H.sec_hud_set_ID() - overlays -= front_id_overlay + var/mob/living/carbon/human/wearing_human = loc + if(wearing_human.wear_id == src) + wearing_human.sec_hud_set_ID() + + update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) + + +/obj/item/storage/wallet/update_overlays() + . = ..() if(!front_id) - front_id_overlay = null return var/front_id_icon_state_holder = front_id.icon_state - if (copytext(front_id_icon_state_holder,1,4) == "ERT") + if(copytext(front_id_icon_state_holder,1,4) == "ERT") front_id_icon_state_holder = "ERT" else if(!(front_id_icon_state_holder in icon_states(src.icon))) front_id_icon_state_holder = "id" - front_id_overlay = image('icons/obj/wallets.dmi', front_id_icon_state_holder) - overlays += front_id_overlay + . += mutable_appearance('icons/obj/wallets.dmi', front_id_icon_state_holder) + + +/obj/item/storage/wallet/update_name(updates = ALL) + . = ..() + if(front_id) + name = "[item_color] leather wallet with [front_id] on the front" + else + name = "[item_color] leather wallet" + /obj/item/storage/wallet/GetID() return front_id ? front_id : ..() + /obj/item/storage/wallet/GetAccess() return front_id ? front_id.GetAccess() : ..() + /obj/item/storage/wallet/random/populate_contents() var/cash = pick(/obj/item/stack/spacecash, /obj/item/stack/spacecash/c10, @@ -110,6 +124,7 @@ icon = 'icons/obj/wallets.dmi' item_state = "wallet" + /obj/item/storage/wallet/color/Initialize(mapload) . = ..() if(!item_color) @@ -117,31 +132,17 @@ new color_wallet(src.loc) qdel(src) return - UpdateDesc() + update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) -/obj/item/storage/wallet/color/proc/UpdateDesc() - name = "[item_color] wallet" - desc = "[item_color] wallet made from... leather?" - icon_state = "[item_color]_wallet" +/obj/item/storage/wallet/color/update_icon_state() + icon_state = "[item_color]_wallet" -/obj/item/storage/wallet/color/remove_from_storage(obj/item/W, atom/new_location) - . = ..(W, new_location) - if(.) - id_check() - update_icon() -/obj/item/storage/wallet/color/handle_item_insertion(obj/item/W, prevent_warning = 0) - . = ..(W, prevent_warning) - if(.) - id_check() - update_icon() +/obj/item/storage/wallet/color/update_desc(updates = ALL) + . = ..() + desc = "[item_color] wallet made from... leather?" -/obj/item/storage/wallet/color/swap_items(obj/item/item_1, obj/item/item_2, mob/user) - . = ..(item_1, item_2, user) - if(.) - id_check() - update_icon() /obj/item/storage/wallet/color/blue item_color = "blue" diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index cf670bd194f..526780bc215 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -54,14 +54,18 @@ A.UpdateButtonIcon() +/obj/item/tank/jetpack/update_icon_state() + icon_state = "[initial(icon_state)][on ? "-on" : ""]" + + /obj/item/tank/jetpack/proc/turn_on(mob/user) on = TRUE - icon_state = "[initial(icon_state)]-on" + update_icon(UPDATE_ICON_STATE) /obj/item/tank/jetpack/proc/turn_off(mob/user) on = FALSE stabilizers = FALSE - icon_state = initial(icon_state) + update_icon(UPDATE_ICON_STATE) /obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user, should_leave_trail) if(!on) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index b592c3d220a..e9040c412c3 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -62,7 +62,7 @@ if(!silent) to_chat(C, "You are not wearing a suitable mask or helmet.") return FALSE - if(M.mask_adjusted) // If the mask is equipped but pushed down + if(M.up) // If the mask is equipped but pushed down M.adjustmask(C) // Adjust it back if(!silent) diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 357d0ccabef..ea7891ca7b9 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -190,12 +190,28 @@ /obj/item/watertank/atmos/make_noz() return new /obj/item/extinguisher/mini/nozzle(src) + +/obj/item/watertank/atmos/update_icon_state() + var/obj/item/extinguisher/mini/nozzle/our_noz = noz + switch(our_noz.nozzle_mode) + if(EXTINGUISHER) + icon_state = "waterbackpackatmos_0" + if(NANOFROST) + icon_state = "waterbackpackatmos_1" + if(METAL_FOAM) + icon_state = "waterbackpackatmos_2" + else + icon_state = "waterbackpackatmos" + + /obj/item/watertank/atmos/dropped(mob/user, silent = FALSE) - ..() - icon_state = "waterbackpackatmos" - if(istype(noz, /obj/item/extinguisher/mini/nozzle)) - var/obj/item/extinguisher/mini/nozzle/N = noz - N.nozzle_mode = 0 + . = ..() + if(!noz) + return + var/obj/item/extinguisher/mini/nozzle/our_noz = noz + our_noz.nozzle_mode = NONE + update_icon(UPDATE_ICON_STATE) + /obj/item/extinguisher/mini/nozzle name = "extinguisher nozzle" @@ -210,11 +226,12 @@ cooling_power = 5 w_class = WEIGHT_CLASS_HUGE flags = NODROP //Necessary to ensure that the nozzle and tank never seperate - var/obj/item/watertank/tank - var/nozzle_mode = 0 + var/obj/item/watertank/atmos/tank + var/nozzle_mode = NONE var/metal_synthesis_cooldown = 0 var/nanofrost_cooldown = 0 + /obj/item/extinguisher/mini/nozzle/New(parent_tank) . = ..() if(check_tank_exists(parent_tank, src)) @@ -222,32 +239,30 @@ reagents = tank.reagents max_water = tank.volume loc = tank - return + /obj/item/extinguisher/mini/nozzle/Move() . = ..() if(tank && loc != tank.loc) loc = tank - return -/obj/item/extinguisher/mini/nozzle/attack_self(mob/user as mob) + +/obj/item/extinguisher/mini/nozzle/attack_self(mob/user) switch(nozzle_mode) if(EXTINGUISHER) nozzle_mode = NANOFROST - tank.icon_state = "waterbackpackatmos_1" to_chat(user, "Swapped to nanofrost launcher") - return + if(NANOFROST) nozzle_mode = METAL_FOAM - tank.icon_state = "waterbackpackatmos_2" to_chat(user, "Swapped to metal foam synthesizer") - return + if(METAL_FOAM) nozzle_mode = EXTINGUISHER - tank.icon_state = "waterbackpackatmos_0" to_chat(user, "Swapped to water extinguisher") - return - return + + tank.update_icon(UPDATE_ICON_STATE) + /obj/item/extinguisher/mini/nozzle/dropped(mob/user, silent = FALSE) ..() diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index a66470628d4..d4cfa546b95 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -9,10 +9,9 @@ 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() + update_icon(UPDATE_ICON_STATE) /obj/item/stack/tape_roll/attack(mob/living/carbon/human/M, mob/living/user) if(!istype(M)) //What good is a duct tape mask if you are unable to speak? @@ -43,7 +42,8 @@ M.equip_to_slot_if_possible(G, slot_wear_mask) G.add_fingerprint(user) -/obj/item/stack/tape_roll/update_icon() + +/obj/item/stack/tape_roll/update_icon_state() var/amount = get_amount() if((amount <= 2) && (amount > 0)) icon_state = "[initial(icon_state)]" @@ -55,7 +55,7 @@ icon_state = "[initial(icon_state)]4" else icon_state = "[initial(icon_state)]4" - ..() + /obj/item/stack/tape_roll/thick name = "incredibly thick tape roll" @@ -90,3 +90,4 @@ var/obj/item/clothing/mask/muzzle/G = new /obj/item/clothing/mask/muzzle/tapegag/thick M.equip_to_slot_if_possible(G, slot_wear_mask) G.add_fingerprint(user) + diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index be1e86f519d..171ab0f1a5e 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -1,103 +1,10 @@ -/* Teleportation devices. - * Contains: - * Locator - * Hand-tele - */ - -/* - * Locator - */ -/obj/item/locator - name = "locator" - desc = "Used to track those with locater implants." - icon = 'icons/obj/device.dmi' - icon_state = "locator" - var/temp = null - var/frequency = 1451 - var/broadcasting = null - var/listening = 1.0 - flags = CONDUCT - w_class = WEIGHT_CLASS_SMALL - item_state = "electronic" - throw_speed = 4 - throw_range = 20 - materials = list(MAT_METAL=400) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - origin_tech = "magnets=3;bluespace=2" - -/obj/item/locator/attack_self(mob/user as mob) - add_fingerprint(user) - var/dat = {""} - if(temp) - dat += "[src.temp]

    Clear" - else - dat += {" -Persistent Signal Locator
    -Frequency: -- -- [format_frequency(src.frequency)] -+ -+
    - -Refresh"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return - -/obj/item/locator/Topic(href, href_list) - if(..()) - return 1 - - var/turf/current_location = get_turf(usr)//What turf is the user on? - if(!current_location || is_admin_level(current_location.z))//If turf was not found or they're in the admin zone - to_chat(usr, "\The [src] is malfunctioning.") - return 1 - - if(href_list["refresh"]) - temp = "Persistent Signal Locator
    " - var/turf/sr = get_turf(src) - - if(sr) - temp += "Located Beacons:
    " - - for(var/obj/item/radio/beacon/W in GLOB.beacons) - if(W.frequency == frequency && !W.syndicate) - if(W && W.z == z) - var/turf/TB = get_turf(W) - temp += "[W.code]: [TB.x], [TB.y], [TB.z]
    " - - temp += "Located Implants:
    " - for(var/obj/item/implant/tracking/T in GLOB.tracked_implants) - if(!T.implanted || !T.imp_in) - continue - var/turf/Tr = get_turf(T) - - if(Tr && Tr.z == sr.z) - temp += "[T.gps_tag]: [Tr.x], [Tr.y], [Tr.z]
    " - - temp += "You are at \[[sr.x],[sr.y],[sr.z]\]." - temp += "

    Refresh
    " - else - temp += "Processing error: Unable to locate orbital position.
    " - else - if(href_list["freq"]) - frequency += text2num(href_list["freq"]) - frequency = sanitize_frequency(frequency) - else - if(href_list["temp"]) - temp = null - - attack_self(usr) - return 1 - -/* - * Hand-tele - */ +/// Hand-tele /obj/item/hand_tele name = "hand tele" desc = "A portable item using blue-space technology." icon = 'icons/obj/device.dmi' icon_state = "hand_tele" + base_icon_state = "hand_tele" item_state = "electronic" throwforce = 0 w_class = WEIGHT_CLASS_SMALL @@ -163,7 +70,7 @@ Frequency: /obj/item/hand_tele/proc/make_inactive(severity) - var/time = rand(20 SECONDS, 30 SECONDS) * severity + var/time = rand(10 SECONDS, 15 SECONDS) * (severity == EMP_HEAVY ? 2 : 1) emp_timer = world.time + time update_icon(UPDATE_ICON_STATE) addtimer(CALLBACK(src, PROC_REF(check_inactive), emp_timer), time) @@ -182,7 +89,7 @@ Frequency: /obj/item/hand_tele/update_icon_state() - icon_state = (emp_timer > world.time) ? icon_state_inactive : initial(icon_state) + icon_state = (emp_timer > world.time) ? icon_state_inactive : base_icon_state /obj/item/hand_tele/portal_destroyed(obj/effect/portal/P) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index df52cc09e1e..515128f65d2 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -115,15 +115,14 @@ resistance_flags = FIRE_PROOF -/obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "fireaxe[wielded]" - ..() +/obj/item/twohanded/fireaxe/update_icon_state() //Currently only here to fuck with the on-mob icons. + icon_state = "fireaxe[HAS_TRAIT(src, TRAIT_WIELDED)]" /obj/item/twohanded/fireaxe/afterattack(atom/A, mob/user, proximity) if(!proximity) return - if(wielded) //destroys windows and grilles in one hit + if(HAS_TRAIT(src, TRAIT_WIELDED)) //destroys windows and grilles in one hit if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) var/obj/structure/W = A W.obj_destruction("fireaxe") @@ -136,8 +135,8 @@ needs_permit = TRUE -/obj/item/twohanded/fireaxe/boneaxe/update_icon() - icon_state = "bone_axe[wielded]" +/obj/item/twohanded/fireaxe/boneaxe/update_icon_state() + icon_state = "bone_axe[HAS_TRAIT(src, TRAIT_WIELDED)]" /obj/item/twohanded/fireaxe/energized @@ -148,8 +147,8 @@ var/max_charge = 30 -/obj/item/twohanded/fireaxe/energized/update_icon() - if(wielded) +/obj/item/twohanded/fireaxe/energized/update_icon_state() + if(HAS_TRAIT(src, TRAIT_WIELDED)) icon_state = "fireaxe2" else icon_state = "fireaxe0" @@ -171,7 +170,7 @@ /obj/item/twohanded/fireaxe/energized/attack(mob/M, mob/user) . = ..() - if(wielded && charge == max_charge) + if(HAS_TRAIT(src, TRAIT_WIELDED) && charge == max_charge) if(isliving(M)) var/mob/living/target = M charge = 0 @@ -241,27 +240,26 @@ /obj/item/twohanded/dualsaber/IsReflect() - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) return TRUE -/obj/item/twohanded/dualsaber/update_icon() - if(wielded) - icon_state = "dualsaber[blade_color][wielded]" - set_light(brightness_on, l_color=colormap[blade_color]) +/obj/item/twohanded/dualsaber/update_icon_state() + if(HAS_TRAIT(src, TRAIT_WIELDED)) + icon_state = "dualsaber[blade_color]1" + set_light(brightness_on, l_color = colormap[blade_color]) else icon_state = "dualsaber0" set_light(0) - ..() /obj/item/twohanded/dualsaber/attack(mob/target, mob/living/user) ..() - if((CLUMSY in user.mutations) && (wielded) && prob(40)) + if((CLUMSY in user.mutations) && HAS_TRAIT(src, TRAIT_WIELDED) && prob(40)) to_chat(user, "You twirl around a bit before losing your balance and impaling yourself on the [src].") user.take_organ_damage(20, 25) return - if((wielded) && prob(50)) + if(HAS_TRAIT(src, TRAIT_WIELDED) && prob(50)) INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) @@ -274,7 +272,7 @@ /obj/item/twohanded/dualsaber/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(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) return ..() return FALSE @@ -344,8 +342,8 @@ var/icon_prefix = "spearglass" -/obj/item/twohanded/spear/update_icon() - icon_state = "[icon_prefix][wielded]" +/obj/item/twohanded/spear/update_icon_state() + icon_state = "[icon_prefix][HAS_TRAIT(src, TRAIT_WIELDED)]" /obj/item/twohanded/spear/CheckParts(list/parts_list) @@ -365,7 +363,7 @@ return if(isturf(AM)) //So you can actually melee with it return - if(explosive && wielded) + if(explosive && HAS_TRAIT(src, TRAIT_WIELDED)) explosive.forceMove(AM) explosive.prime() qdel(src) @@ -580,15 +578,12 @@ flags &= ~NODROP -/obj/item/twohanded/chainsaw/update_icon() - if(wielded) - icon_state = "chainsaw[wielded]" - else - icon_state = "chainsaw0" - ..() +/obj/item/twohanded/chainsaw/update_icon_state() + icon_state = "chainsaw[HAS_TRAIT(src, TRAIT_WIELDED)]" + /obj/item/twohanded/chainsaw/attack(mob/living/target, mob/living/user) - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) playsound(loc, 'sound/weapons/chainsaw.ogg', 100, 1, -1) //incredibly loud; you ain't goin' for stealth with this thing. Credit to Lonemonk of Freesound for this sound. if(isrobot(target)) ..() @@ -638,9 +633,9 @@ if(charged < 5) charged++ -/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "mjollnir[wielded]" - ..() +/obj/item/twohanded/singularityhammer/update_icon_state() //Currently only here to fuck with the on-mob icons. + icon_state = "mjollnir[HAS_TRAIT(src, TRAIT_WIELDED)]" + /obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) for(var/atom/movable/X in orange(5, pull)) @@ -664,7 +659,7 @@ /obj/item/twohanded/singularityhammer/afterattack(atom/A, mob/user, proximity) if(!proximity) return - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) if(charged == 5) charged = 0 if(isliving(A)) @@ -699,9 +694,7 @@ /obj/item/twohanded/mjollnir/attack(mob/living/M, mob/user) ..() - if(wielded) - //if(charged == 5) - //charged = 0 + if(HAS_TRAIT(src, TRAIT_WIELDED)) playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(isliving(M)) M.Stun(4 SECONDS) @@ -714,9 +707,9 @@ L.Stun(4 SECONDS) shock(L) -/obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "mjollnir[wielded]" - ..() +/obj/item/twohanded/mjollnir/update_icon_state() //Currently only here to fuck with the on-mob icons. + icon_state = "mjollnir[HAS_TRAIT(src, TRAIT_WIELDED)]" + /obj/item/twohanded/knighthammer name = "singuloth knight's hammer" @@ -745,9 +738,9 @@ if(charged < 5) charged++ -/obj/item/twohanded/knighthammer/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "knighthammer[wielded]" - ..() +/obj/item/twohanded/knighthammer/update_icon_state() //Currently only here to fuck with the on-mob icons. + icon_state = "knighthammer[HAS_TRAIT(src, TRAIT_WIELDED)]" + /obj/item/twohanded/knighthammer/afterattack(atom/A, mob/user, proximity) if(!proximity) @@ -763,13 +756,13 @@ var/atom/throw_target = get_edge_target_turf(Z, get_dir(src, get_step_away(Z, src))) Z.throw_at(throw_target, 200, 4) playsound(user, 'sound/weapons/marauder.ogg', 50, 1) - else if(wielded && Z.health < 1) + else if(HAS_TRAIT(src, TRAIT_WIELDED) && Z.health < 1) Z.visible_message("[Z.name] was blown to pieces by the power of [name]!", \ "You feel a powerful blow rip you apart!", \ "You hear a heavy impact and the sound of ripping flesh!.") Z.gib() playsound(user, 'sound/weapons/marauder.ogg', 50, 1) - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) if(istype(A, /turf/simulated/wall)) var/turf/simulated/wall/Z = A Z.ex_act(2) @@ -816,8 +809,8 @@ force_unwielded = 100 force_wielded = 500000 // Kills you DEAD. -/obj/item/twohanded/pitchfork/update_icon() - icon_state = "pitchfork[wielded]" +/obj/item/twohanded/pitchfork/update_icon_state() + icon_state = "pitchfork[HAS_TRAIT(src, TRAIT_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...") @@ -844,7 +837,7 @@ // 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) + if(!proximity || !HAS_TRAIT(src, TRAIT_WIELDED)) return if(istype(target, /turf/simulated/wall)) var/turf/simulated/wall/W = target @@ -872,8 +865,8 @@ embed_chance = 50 embedded_ignore_throwspeed_threshold = TRUE -/obj/item/twohanded/bamboospear/update_icon() - icon_state = "bamboo_spear[wielded]" +/obj/item/twohanded/bamboospear/update_icon_state() + icon_state = "bamboo_spear[HAS_TRAIT(src, TRAIT_WIELDED)]" //pyro claws /obj/item/twohanded/required/pyro_claws @@ -1013,9 +1006,6 @@ w_class = initial(w_class) item_state = "" -/obj/item/twohanded/fishingrod/update_icon() - if(wielded) - icon_state = "fishing_rod[wielded]" - else - icon_state = "fishing_rod0" - ..() +/obj/item/twohanded/fishingrod/update_icon_state() + icon_state = "fishing_rod[HAS_TRAIT(src, TRAIT_WIELDED)]" + diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 6cc621bd3ce..736cca7b9f3 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -349,7 +349,6 @@ В официальных документах эта бита проходит под элегантным названием \"Высокоскоростная система доставки СРП\". \ Выдаваясь только самым верным и эффективным офицерам NanoTrasen, это оружие является одновременно символом статуса \ и инструментом высшего правосудия." - slot_flags = SLOT_BELT w_class = WEIGHT_CLASS_SMALL can_deflect = FALSE @@ -374,22 +373,39 @@ /// Attack verbs when extended (created on Initialize) var/list/attack_verb_on = list("smacked", "struck", "cracked", "beaten") + /obj/item/melee/baseball_bat/homerun/central_command/srt name = "тактическая бита ГСН" desc = "Выдвижная тактическая бита Центрального Командования Nanotrasen. Скорее всего, к этому моменту командование станции уже осознало, что их коленные чашечки не переживут эту встречу." - item_state = "srt_bat_0" item_state_on = "srt_bat_1" icon_state = "srt_bat_0" icon_state_on = "srt_bat_1" -/obj/item/melee/baseball_bat/homerun/central_command/Initialize(mapload) - . = ..() + +/obj/item/melee/baseball_bat/homerun/central_command/update_icon_state() icon_state = on ? icon_state_on : initial(icon_state) + item_state = on ? item_state_on : initial(item_state) + + +/obj/item/melee/baseball_bat/homerun/central_command/proc/toggle(mob/living/user) + on = !on + slot_flags = on ? NONE : SLOT_BELT force = on ? force_on : initial(force) attack_verb = on ? attack_verb_on : initial(attack_verb) w_class = on ? WEIGHT_CLASS_HUGE : WEIGHT_CLASS_SMALL homerun_able = on + homerun_ready = on + update_icon(UPDATE_ICON_STATE) + update_equipped_item() + playsound(loc, extend_sound, 50, TRUE) + add_fingerprint(user) + if(on) + to_chat(user, span_userdanger("Вы активировали [name] - время для правосудия!")) + else + to_chat(user, span_notice("Вы деактивировали [name].")) + + /obj/item/melee/baseball_bat/homerun/central_command/pickup(mob/living/user) if(!(isertmindshielded(user))) @@ -404,31 +420,10 @@ return FALSE return ..() + /obj/item/melee/baseball_bat/homerun/central_command/attack_self(mob/user) - on = !on - icon_state = on ? icon_state_on : initial(icon_state) - if(on) - to_chat(user, "Вы активировали [src.name] - время для правосудия!") - item_state = item_state_on - w_class = WEIGHT_CLASS_HUGE //doesnt fit in backpack when its on for balance - force = force_on - attack_verb = attack_verb_on - homerun_ready = TRUE - else - to_chat(user, "Вы деактивировали [src.name].") - item_state = initial(item_state) - slot_flags = SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - force = initial(force) - attack_verb = initial(attack_verb) - homerun_ready = FALSE - // Update mob hand visuals - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() - playsound(loc, extend_sound, 50, TRUE) - add_fingerprint(user) + toggle(user) + /obj/item/claymore/bone name = "bone sword" @@ -441,3 +436,4 @@ armour_penetration = 15 w_class = WEIGHT_CLASS_BULKY block_chance = 30 + diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index ef71c1cc4bf..31751386403 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -193,8 +193,8 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF)) resistance_flags |= ON_FIRE SSfires.processing[src] = src - add_overlay(GLOB.fire_overlay, TRUE) - return 1 + add_overlay(custom_fire_overlay ? custom_fire_overlay : GLOB.fire_overlay) + return TRUE ///called when the obj is destroyed by fire /obj/proc/burn() @@ -206,7 +206,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e /obj/proc/extinguish() if(resistance_flags & ON_FIRE) resistance_flags &= ~ON_FIRE - cut_overlay(GLOB.fire_overlay, TRUE) + cut_overlay(custom_fire_overlay ? custom_fire_overlay : GLOB.fire_overlay, TRUE) SSfires.processing -= src ///Called when the obj is hit by a tesla bolt. diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index fcb49d30568..47ba86c7220 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -8,8 +8,9 @@ var/creates_cover = FALSE var/mob/living/climber var/broken = FALSE - /// Amount of SSobj ticks (Roughly 2 seconds) that a extinguished structure has been lit up + /// Amount of timer ticks that an extinguished structure has been lit up var/light_process = 0 + var/extinguish_timer_id /obj/structure/New() ..() @@ -78,11 +79,11 @@ do_climb(usr) -/obj/structure/MouseDrop_T(var/atom/movable/C, mob/user as mob) - if(..()) - return - if(C == user) +/obj/structure/MouseDrop_T(atom/movable/dropping, mob/user, params) + . = ..() + if(!. && dropping == user) do_climb(user) + return TRUE /obj/structure/proc/density_check() for(var/obj/O in orange(0, src)) @@ -211,18 +212,18 @@ /obj/structure/proc/can_touch(mob/living/user) if(!istype(user)) - return 0 + return FALSE if(!Adjacent(user)) - return 0 + return FALSE if(user.restrained() || user.buckled) - to_chat(user, "You need your hands and legs free for this.") - return 0 - if(user.stat || user.IsParalyzed() || user.IsSleeping() || user.lying || user.IsWeakened()) - return 0 + to_chat(user, span_notice("You need your hands and legs free for this.")) + return FALSE + if(user.incapacitated()) + return FALSE if(issilicon(user)) - to_chat(user, "You need hands for this.") - return 0 - return 1 + to_chat(user, span_notice("You need hands for this.")) + return FALSE + return TRUE /obj/structure/examine(mob/user) . = ..() @@ -234,17 +235,19 @@ var/examine_status = examine_status(user) if(examine_status) . += examine_status + if(climbable) + . += "You can Click-Drag someone to [src] to put them on the table after a short delay." /obj/structure/proc/examine_status(mob/user) //An overridable proc, mostly for falsewalls. var/healthpercent = (obj_integrity/max_integrity) * 100 switch(healthpercent) if(50 to 99) - return "It looks slightly damaged." + . += "It looks slightly damaged." if(25 to 50) - return "It appears heavily damaged." + . += "It appears heavily damaged." if(0 to 25) if(!broken) - return "It's falling apart!" + . += "It's falling apart!" /obj/structure/proc/prevents_buckled_mobs_attacking() return FALSE @@ -257,11 +260,13 @@ update_light() name = "dimmed [name]" desc = "Something shadowy moves to cover the object. Perhaps shining a light will force it to clear?" - START_PROCESSING(SSobj, src) + extinguish_timer_id = addtimer(CALLBACK(src, PROC_REF(extinguish_light_check)), 2 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_LOOP|TIMER_DELETE_ME|TIMER_STOPPABLE) -/obj/structure/process() +/obj/structure/proc/extinguish_light_check() var/turf/source_turf = get_turf(src) + if(!source_turf) + return if(source_turf.get_lumcount() > 0.2) light_process++ if(light_process > 3) @@ -277,4 +282,5 @@ update_light() name = initial(name) desc = initial(desc) - STOP_PROCESSING(SSobj, src) + deltimer(extinguish_timer_id) + diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index f7060c17f70..607555ec888 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -150,7 +150,7 @@ return ..() -/obj/structure/alien/resin/door/update_icon() +/obj/structure/alien/resin/door/update_icon_state() switch(state) if(RESIN_DOOR_CLOSED) icon_state = "resin_door_closed" @@ -460,18 +460,35 @@ status = BURST icon_state = "egg_hatched" -/obj/structure/alien/egg/New() - new /obj/item/clothing/mask/facehugger(src) - ..() - if(status == BURST) - obj_integrity = integrity_failure - else if(status != GROWN) - spawn(rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME)) - Grow() + +/obj/structure/alien/egg/Initialize(mapload) + . = ..() + update_icon(UPDATE_ICON_STATE) + switch(status) + if(GROWING) + new /obj/item/clothing/mask/facehugger(src) + addtimer(CALLBACK(src, PROC_REF(Grow)), rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME)) + if(GROWN) + new /obj/item/clothing/mask/facehugger(src) + AddComponent(/datum/component/proximity_monitor) + if(BURST) + obj_integrity = integrity_failure + + +/obj/structure/alien/egg/update_icon_state() + switch(status) + if(GROWING) + icon_state = "egg_growing" + if(GROWN) + icon_state = "egg" + if(BURST) + icon_state = "egg_hatched" + /obj/structure/alien/egg/attack_alien(mob/living/carbon/alien/user) return attack_hand(user) + /obj/structure/alien/egg/attack_hand(mob/living/user) if(user.get_int_organ(/obj/item/organ/internal/xenos/plasmavessel)) switch(status) @@ -485,7 +502,7 @@ return if(GROWN) to_chat(user, "You retrieve the child.") - Burst(0) + Burst(kill = FALSE) return else to_chat(user, "It feels slimy.") @@ -495,51 +512,62 @@ /obj/structure/alien/egg/proc/GetFacehugger() return locate(/obj/item/clothing/mask/facehugger) in contents + /obj/structure/alien/egg/proc/Grow() - icon_state = "egg" status = GROWN + update_icon(UPDATE_ICON_STATE) AddComponent(/datum/component/proximity_monitor) + +///Need to carry the kill from Burst() to Hatch(), this section handles the alien opening the egg /obj/structure/alien/egg/proc/Burst(kill = TRUE) //drops and kills the hugger if any is remaining if(status == GROWN || status == GROWING) playsound(get_turf(src), 'sound/creatures/alien/xeno_egg_crack.ogg', 50) - icon_state = "egg_hatched" flick("egg_opening", src) status = BURSTING qdel(GetComponent(/datum/component/proximity_monitor)) - spawn(15) - status = BURST - var/obj/item/clothing/mask/facehugger/child = GetFacehugger() - if(child) - child.loc = get_turf(src) - if(kill && istype(child)) - child.Die() - else - for(var/mob/M in range(1,src)) - if(CanHug(M)) - child.Attach(M) - break + addtimer(CALLBACK(src, PROC_REF(Hatch), kill), 1.5 SECONDS) + + +///We now check HOW the hugger is hatching, kill carried from Burst() and obj_break() +/obj/structure/alien/egg/proc/Hatch(kill) + status = BURST + update_icon(UPDATE_ICON_STATE) + var/obj/item/clothing/mask/facehugger/child = GetFacehugger() + if(!child) + return + child.forceMove(get_turf(src)) + if(kill) + child.Die() + return + for(var/mob/living/victim in range(1, src)) + if(CanHug(victim)) + child.Attach(victim) + break + /obj/structure/alien/egg/obj_break(damage_flag) - if(!(flags & NODECONSTRUCT)) - if(status != BURST) - Burst(kill = TRUE) + if(!(flags & NODECONSTRUCT) && status != BURST) + Burst(kill = TRUE) + /obj/structure/alien/egg/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() if(exposed_temperature > 500) take_damage(5, BURN, 0, 0) + /obj/structure/alien/egg/HasProximity(atom/movable/AM) if(status == GROWN) if(!CanHug(AM)) return - var/mob/living/carbon/C = AM - if(C.stat == CONSCIOUS && C.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo)) + var/mob/living/carbon/target = AM + if(iscarbon(target) && target.stat == CONSCIOUS && target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo)) return - Burst(0) + Burst(kill = FALSE) + #undef BURST #undef BURSTING diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index c71ec0075d7..38f3a956792 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -6,6 +6,7 @@ req_access = list(ACCESS_BAR) max_integrity = 500 integrity_failure = 250 + blocks_emissive = FALSE armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/list/barsigns=list() var/list/hiddensigns diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index f6398b2f16e..04e944ac3b6 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -263,7 +263,7 @@ LINEN BINS else . += "There are [amount] bed sheets in the bin." -/obj/structure/bedsheetbin/update_icon() +/obj/structure/bedsheetbin/update_icon_state() switch(amount) if(0) icon_state = "linenbin-empty" @@ -276,13 +276,13 @@ LINEN BINS /obj/structure/bedsheetbin/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) if(amount) amount = 0 - update_icon() + update_icon(UPDATE_ICON_STATE) ..() /obj/structure/bedsheetbin/burn() amount = 0 extinguish() - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob, params) if(istype(I, /obj/item/bedsheet)) @@ -338,7 +338,7 @@ LINEN BINS B.loc = loc to_chat(user, "You telekinetically remove [B] from [src].") - update_icon() + update_icon(UPDATE_ICON_STATE) if(hidden) hidden.loc = loc diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index 1d2d70ebdf1..2f0f691800e 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -3,104 +3,103 @@ desc = "Rack that holds coats." icon = 'icons/obj/coatrack.dmi' icon_state = "coatrack0" - density = 1 - anchored = 1 + density = TRUE + anchored = TRUE var/obj/item/clothing/suit/coat - var/list/allowed = list( + var/static/list/allowed = list( /obj/item/clothing/suit/storage/labcoat, /obj/item/clothing/suit/storage/det_suit, /obj/item/clothing/suit/storage/blueshield, /obj/item/clothing/suit/leathercoat, - /obj/item/clothing/suit/browntrenchcoat + /obj/item/clothing/suit/browntrenchcoat, ) + /obj/structure/coatrack/Initialize(mapload) . = ..() icon_state = "coatrack[rand(0, 1)]" + /obj/structure/coatrack/attack_hand(mob/living/user) if(coat) add_fingerprint(user) - user.visible_message("[user] takes [coat] off \the [src].", "You take [coat] off the \the [src].") + user.visible_message("[user] takes [coat] off [src].", "You take [coat] off [src].") coat.forceMove_turf() user.put_in_active_hand(coat, ignore_anim = FALSE) coat = null - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/structure/coatrack/attackby(obj/item/W, mob/living/user, params) - var/can_hang = FALSE - for(var/T in allowed) - if(istype(W,T)) - can_hang = TRUE - break - if(can_hang && !coat) - add_fingerprint(user) - user.visible_message("[user] hangs [W] on \the [src].", "You hang [W] on the \the [src].") - coat = W - user.drop_transfer_item_to_loc(W, src) - update_icon() - else +/obj/structure/coatrack/attackby(obj/item/W, mob/living/user, params) + if(!move_on_rack(W, user)) return ..() -/obj/structure/coatrack/MouseDrop_T(obj/item/W, mob/user) + +/obj/structure/coatrack/MouseDrop_T(obj/item/I, mob/user, params) + . = TRUE + move_on_rack(I, user) + + +/obj/structure/coatrack/Bumped(atom/movable/moving_atom) + . = ..() + move_on_rack(moving_atom) + + +/obj/structure/coatrack/proc/move_on_rack(atom/movable/moving_atom, mob/living/user) + . = FALSE + if(coat) + return . + var/can_hang = FALSE - for(var/T in allowed) - if(istype(W,T)) + for(var/check_type in allowed) + if(istype(moving_atom, check_type)) can_hang = TRUE break - if(can_hang && !coat) - add_fingerprint(user) - user.visible_message("[user] hangs [W] on \the [src].", "You hang [W] on the \the [src].") - coat = W - user.drop_transfer_item_to_loc(W, src) - update_icon() - else - return ..() + if(can_hang) + if(user && !user.drop_transfer_item_to_loc(moving_atom, src)) + return . + . = TRUE + coat = moving_atom + if(user) + add_fingerprint(user) + user.visible_message("[user] hangs [coat] on [src].", "You hang [coat] on [src].") + else + visible_message("[coat] lands on [src].") + coat.forceMove(src) + update_icon(UPDATE_OVERLAYS) -// Hanging a coat on the hanger only after a bump. Force stoping throwing -/obj/structure/coatrack/Bumped(atom/movable/moving_atom) - ..() - if (coat) - return +/obj/structure/coatrack/update_overlays() + . = ..() - for (var/T in allowed) - if (!istype(moving_atom, T)) - continue - visible_message("[moving_atom] lands on \the [src].") - moving_atom.forceMove(src) - coat = moving_atom - update_icon() + if(!coat) return -/obj/structure/coatrack/update_icon() - overlays.Cut() - if(istype(coat, /obj/item/clothing/suit/storage/labcoat)) - overlays += image(icon, icon_state = "coat_lab") - if(istype(coat, /obj/item/clothing/suit/storage/labcoat/cmo)) - overlays += image(icon, icon_state = "coat_cmo") - if(istype(coat, /obj/item/clothing/suit/storage/labcoat/mad)) - overlays += image(icon, icon_state = "coat_mad") - if(istype(coat, /obj/item/clothing/suit/storage/labcoat/genetics)) - overlays += image(icon, icon_state = "coat_gen") - if(istype(coat, /obj/item/clothing/suit/storage/labcoat/chemist)) - overlays += image(icon, icon_state = "coat_chem") - if(istype(coat, /obj/item/clothing/suit/storage/labcoat/virologist)) - overlays += image(icon, icon_state = "coat_vir") - if(istype(coat, /obj/item/clothing/suit/storage/labcoat/science)) - overlays += image(icon, icon_state = "coat_sci") - if(istype(coat, /obj/item/clothing/suit/storage/labcoat/mortician)) - overlays += image(icon, icon_state = "coat_mor") - if(istype(coat, /obj/item/clothing/suit/storage/blueshield)) - overlays += image(icon, icon_state = "coat_blue") - if(istype(coat, /obj/item/clothing/suit/storage/det_suit)) - overlays += image(icon, icon_state = "coat_det") - if(istype(coat, /obj/item/clothing/suit/browntrenchcoat)) - overlays += image(icon, icon_state = "coat_brtrench") - if(istype(coat, /obj/item/clothing/suit/leathercoat)) - overlays += image(icon, icon_state = "coat_leather") + var/static/list/type2overlay = list( + /obj/item/clothing/suit/storage/labcoat/cmo = "coat_cmo", + /obj/item/clothing/suit/storage/labcoat/mad = "coat_mad", + /obj/item/clothing/suit/storage/labcoat/genetics = "coat_gen", + /obj/item/clothing/suit/storage/labcoat/chemist = "coat_chem", + /obj/item/clothing/suit/storage/labcoat/virologist = "coat_vir", + /obj/item/clothing/suit/storage/labcoat/science = "coat_sci", + /obj/item/clothing/suit/storage/labcoat/mortician = "coat_mor", + /obj/item/clothing/suit/storage/labcoat = "coat_lab", + /obj/item/clothing/suit/storage/blueshield = "coat_det", + /obj/item/clothing/suit/browntrenchcoat = "coat_brtrench", + /obj/item/clothing/suit/leathercoat = "coat_leather", + ) + + var/coat_found = FALSE + for(var/path in type2overlay) + if(coat.type == path) // we need to check type explicitly + . += type2overlay[path] + coat_found = TRUE + break + + if(!coat_found) + . += "coat_lab" + /obj/structure/coatrack/crowbar_act(mob/user, obj/item/I) . = TRUE @@ -109,16 +108,19 @@ TOOL_DISMANTLE_SUCCESS_MESSAGE deconstruct(disassembled = TRUE) + /obj/structure/coatrack/wrench_act(mob/user, obj/item/I) . = TRUE default_unfasten_wrench(user, I, time = 10) + /obj/structure/coatrack/deconstruct(disassembled = FALSE) var/mat_drop = 2 if(disassembled) mat_drop = 10 new /obj/item/stack/sheet/wood(drop_location(), mat_drop) if(coat) - coat.loc = get_turf(src) + coat.forceMove_turf() coat = null ..() + diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 91af470b716..1ac4691d5b6 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -1,13 +1,18 @@ +GLOBAL_LIST_EMPTY(closets) + /obj/structure/closet name = "closet" desc = "It's a basic storage unit." icon = 'icons/obj/closet.dmi' icon_state = "closed" - density = 1 + density = TRUE layer = LOW_ITEM_LAYER //Prevents items from dropping on turf visually max_integrity = 200 integrity_failure = 50 armor = list("melee" = 20, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60) + + /// Special marker for the closet to use default icon_closed/icon_opened states, skipping everything else. + var/no_overlays = FALSE var/icon_closed = "closed" //stays here for compatibility issues var/icon_opened = "open" @@ -19,12 +24,13 @@ var/custom_door_overlay = null //handles overlay of door looking into screen var/custom_open_overlay = null //handles overlay of opened door (its inner side) + var/ignore_density_closed = FALSE var/opened = FALSE var/welded = FALSE var/locked = FALSE var/large = TRUE var/can_be_emaged = FALSE - var/wall_mounted = 0 //never solid (You can always pass over it) + var/wall_mounted = FALSE //never solid (You can always pass over it) var/lastbang var/open_sound = 'sound/machines/closet_open.ogg' var/close_sound = 'sound/machines/closet_close.ogg' @@ -42,6 +48,7 @@ // Please dont override this unless you absolutely have to /obj/structure/closet/Initialize(mapload) . = ..() + GLOB.closets += src if(mapload && !opened) // Youre probably asking, why is this a 0 seconds timer AA? // Well, I will tell you. One day, all /obj/effect/spawner will use Initialize @@ -60,7 +67,8 @@ /obj/structure/closet/proc/take_contents() var/itemcount = 0 for(var/obj/item/I in loc) - if(I.density || I.anchored || I == src) continue + if(I.density || I.anchored || I == src) + continue I.forceMove(src) // Ensure the storage cap is respected if(++itemcount >= storage_capacity) @@ -68,6 +76,7 @@ // Fix for #383 - C4 deleting fridges with corpses /obj/structure/closet/Destroy() + GLOB.closets -= src dump_contents() return ..() @@ -162,12 +171,14 @@ playsound(loc, close_sound, close_sound_volume, TRUE, -3) else playsound(loc, 'sound/machines/click.ogg', close_sound_volume, TRUE, -3) - density = TRUE + density = ignore_density_closed ? FALSE : TRUE return TRUE /obj/structure/closet/proc/toggle(mob/user) + . = TRUE if(!(opened ? close() : open())) - to_chat(user, "It won't budge!") + . = FALSE + to_chat(user, span_notice("It won't budge!")) /obj/structure/closet/proc/bust_open() welded = FALSE //applies to all lockers @@ -247,10 +258,10 @@ user.visible_message("[user] welds [src] [adjective]!", "You weld [src] [adjective]!") welded = !welded update_icon() - return -/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) - ..() + +/obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user, params) + . = ..() if(istype(O, /obj/screen)) //fix for HUD elements making their way into the world -Pete return if(O.loc == user) @@ -271,6 +282,7 @@ if(user != O) user.visible_message("[user] stuffs [O] into [src]!", "You stuff [O] into [src]!") add_fingerprint(user) + return TRUE /obj/structure/closet/attack_ai(mob/user) if(isrobot(user) && Adjacent(user)) //Robots can open/close it, but not the AI @@ -300,8 +312,7 @@ // tk grab then use on self /obj/structure/closet/attack_self_tk(mob/user) add_fingerprint(user) - if(!toggle()) - to_chat(usr, "It won't budge!") + toggle() /obj/structure/closet/verb/verb_toggleopen() set src in oview(1) @@ -317,20 +328,43 @@ else to_chat(usr, "This mob type can't use this verb.") -/obj/structure/closet/update_icon() //Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot) - overlays.Cut() - if(!opened) - if(custom_door_overlay) - overlays += "[custom_door_overlay]_door" + +/obj/structure/closet/update_icon(updates = ALL) + if(no_overlays) + return ..(UPDATE_ICON_STATE) + return ..() + + +/obj/structure/closet/update_icon_state() + if(no_overlays) + icon_state = opened ? icon_opened : icon_closed + + +/obj/structure/closet/update_overlays() + . = ..() + if(opened) + if(custom_open_overlay) + . += "[custom_open_overlay]_open" else - overlays += "[icon_state]_door" //No initials because of custom map-made closets. - if(welded) - overlays += "welded" + . += "[icon_state]_open" else - if(custom_open_overlay) - overlays += "[custom_open_overlay]_open" + for(var/olay in apply_contents_overlays()) + . += olay + if(custom_door_overlay) + . += "[custom_door_overlay]_door" else - overlays += "[icon_state]_open" + . += "[icon_state]_door" //No initials because of custom map-made closets. + if(welded) + . += "welded" + + +/** + * Additional overlays for contents inside the closet. Usefull when the door is transparent. + */ +/obj/structure/closet/proc/apply_contents_overlays() + RETURN_TYPE(/list) + . = list() + // Objects that try to exit a locker by stepping were doing so successfully, // and due to an oversight in turf/Enter() were going through walls. That @@ -434,23 +468,26 @@ transparent = transparency update_icon() -/obj/structure/closet/bluespace/update_icon() - overlays.Cut() - icon_state = initial(icon_state) + +/obj/structure/closet/bluespace/update_icon_state() + icon_state = "[initial(icon_state)][transparent ? "_trans" : ""]" + + +/obj/structure/closet/bluespace/update_overlays() + . = list() if(!opened) - if(welded) - overlays += "welded" if(transparent) - icon_state += "_trans" - overlays += "[initial(icon_state)]_door_trans" + . += "[initial(icon_state)]_door_trans" else - overlays += "[initial(icon_state)]_door" + . += "[initial(icon_state)]_door" + if(welded) + . += "welded" else if(transparent) - icon_state += "_trans" - overlays += "[initial(icon_state)]_open_trans" + . += "[initial(icon_state)]_open_trans" else - overlays += "[initial(icon_state)]_open" + . += "[initial(icon_state)]_open" + /obj/structure/closet/bluespace/Crossed(atom/movable/AM, oldloc) if(AM.density) diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 448e51d9949..5b71d629ad4 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -3,8 +3,6 @@ desc = "Just a box..." icon = 'icons/obj/cardboard_boxes.dmi' icon_state = "cardboard" - icon_opened = "cardboard_open" - icon_closed = "cardboard" resistance_flags = FLAMMABLE max_integrity = 70 integrity_failure = 0 @@ -13,6 +11,7 @@ open_sound_volume = 35 close_sound_volume = 35 material_drop = /obj/item/stack/sheet/cardboard + no_overlays = TRUE var/decal = "" var/amt = 4 var/move_delay = FALSE @@ -71,7 +70,7 @@ /obj/structure/closet/cardboard/attackby(obj/item/W as obj, mob/user as mob, params) if(src.opened) - if(istype(W, /obj/item/wirecutters)) + if(W.tool_behaviour == TOOL_WIRECUTTER) var/obj/item/wirecutters/WC = W new /obj/item/stack/sheet/cardboard(src.loc, amt) for(var/mob/M in viewers(src)) @@ -105,7 +104,7 @@ update_icon() -/obj/structure/closet/cardboard/update_icon() //Not deriving, because of different logic. +/obj/structure/closet/cardboard/update_icon_state() //Not deriving, because of different logic. if(!opened) if(decal) icon_state = "cardboard_" + decal @@ -116,3 +115,8 @@ icon_state = "cardboard_open_" + decal else icon_state = "cardboard_open" + + +/obj/structure/closet/cardboard/update_overlays() + . = list() + diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index edb3d1e50d1..eb8d7490fbd 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -11,12 +11,8 @@ close_sound = 'sound/machines/wooden_closet_close.ogg' open_sound_volume = 25 close_sound_volume = 50 + no_overlays = TRUE -/obj/structure/closet/coffin/update_icon() - if(!opened) - icon_state = icon_closed - else - icon_state = icon_opened /obj/structure/closet/coffin/sarcophagus name = "sarcophagus" diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm index 8370048ecd0..83f34b4eb07 100644 --- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm @@ -2,6 +2,4 @@ name = "critter crate" desc = "A crate which can sustain life for a while." icon_state = "critter" - icon_opened = "critteropen" - icon_closed = "critter" material_drop = /obj/item/stack/sheet/wood diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 1b9f3d38738..3c6f12d69c7 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -2,234 +2,204 @@ /obj/structure/closet/fireaxecabinet name = "fire axe cabinet" desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." - icon_state = "fireaxe1000" - icon_closed = "fireaxe1000" - icon_opened = "fireaxe1100" + icon_state = "fireaxe_full_0hits" + icon_closed = "fireaxe_full_0hits" + icon_opened = "fireaxe_full_open" anchored = TRUE density = FALSE - armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) - opened = TRUE - locked = TRUE + no_overlays = TRUE + armor = list(MELEE = 50, BULLET = 20, LASER = 0, ENERGY = 100, BOMB = 10, RAD = 100, FIRE = 90, ACID = 50) var/obj/item/twohanded/fireaxe/fireaxe var/localopened = FALSE //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri + opened = TRUE var/hitstaken = FALSE + locked = TRUE var/smashed = FALSE + var/operating = FALSE + var/has_axe = null // Use a string over a boolean value to make the sprite names more readable -/obj/structure/closet/fireaxecabinet/Initialize(mapload) - . = ..() - if(!fireaxe) - fireaxe = new(src) - update_icon() +/obj/structure/closet/fireaxecabinet/Destroy() + if(!obj_integrity) + if(fireaxe) + fireaxe.forceMove(loc) + fireaxe = null + else + QDEL_NULL(fireaxe) + return ..() + + +/obj/structure/closet/fireaxecabinet/populate_contents() + fireaxe = new(src) + has_axe = "full" + update_icon(UPDATE_ICON_STATE) // So its initial icon doesn't show it without the fireaxe /obj/structure/closet/fireaxecabinet/examine(mob/user) . = ..() - . += "Use a multitool to lock/unlock it." + if(!smashed) + . += span_notice("Use a multitool to lock/unlock it.") + else + . += span_notice("It is damaged beyond repair.") -/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/I, mob/living/user) + add_fingerprint(user) if(isrobot(user) || locked) - if(istype(O, /obj/item/multitool)) - to_chat(user, "Resetting circuitry...") - playsound(user, 'sound/machines/lockreset.ogg', 50, 1) - if(do_after(user, 20 * O.toolspeed * gettoolspeedmod(user), target = src)) - add_fingerprint(user) - locked = FALSE - to_chat(user, " You disable the locking modules.") - update_icon() - return - else if(istype(O, /obj/item)) - user.changeNext_move(CLICK_CD_MELEE) - var/obj/item/W = O - if(smashed || localopened) - if(localopened) - add_fingerprint(user) - localopened = FALSE - update_icon_closing() + if(ismultitool(I)) + to_chat(user, span_warning("Resetting circuitry...")) + playsound(user, 'sound/machines/lockreset.ogg', 50, TRUE) + if(!do_after_once(user, 2 SECONDS * I.toolspeed, target = src)) return - else - user.do_attack_animation(src) - playsound(user, 'sound/effects/glasshit.ogg', 100, 1) //We don't want this playing every time - if(W.force < 15) - to_chat(user, "The cabinet's protective glass glances off the hit.") - else - hitstaken++ - if(hitstaken == 4) - playsound(user, 'sound/effects/glassbr3.ogg', 100, 1) //Break cabinet, receive goodies. Cabinet's fucked for life after that. - smashed = TRUE - locked = FALSE - localopened = TRUE - add_fingerprint(user) - update_icon() + + locked = FALSE + to_chat(user, span_caution("You disable the locking modules.")) + update_icon(UPDATE_ICON_STATE) + return + + user.changeNext_move(CLICK_CD_MELEE) + if(smashed || localopened) + if(localopened) + operate_panel() + return + + user.do_attack_animation(src) + playsound(user, 'sound/effects/glasshit.ogg', 100, TRUE) //We don't want this playing every time + if(I.force < 15) + to_chat(user, span_notice("The cabinet's protective glass glances off the hit.")) + else + hitstaken++ + if(hitstaken == 4) + playsound(user, 'sound/effects/glassbr3.ogg', 100, TRUE) //Break cabinet, receive goodies. Cabinet's fucked for life after that. + smashed = TRUE + locked = FALSE + localopened = TRUE + update_icon(UPDATE_ICON_STATE) return - if(istype(O, /obj/item/twohanded/fireaxe) && localopened) + + if(istype(I, /obj/item/twohanded/fireaxe) && localopened) if(!fireaxe) - var/obj/item/twohanded/fireaxe/F = O - if(F.wielded) - to_chat(user, "Unwield \the [F] first.") - return - if(!user.drop_item_ground(F)) - to_chat(user, "\The [F] stays stuck to your hands!") + var/obj/item/twohanded/fireaxe/placed_axe = I + if(HAS_TRAIT(placed_axe, TRAIT_WIELDED)) + to_chat(user, span_warning("Unwield [placed_axe] first.")) return - add_fingerprint(user) - fireaxe = F - contents += F - to_chat(user, "You place \the [F] back in the [name].") - update_icon() - else - if(smashed) + if(!user.drop_transfer_item_to_loc(placed_axe, src)) + to_chat(user, span_warning("[placed_axe] stays stuck to your hands!")) return - else - add_fingerprint(user) - localopened = !localopened - if(localopened) - update_icon_opening() - else - update_icon_closing() - else + fireaxe = placed_axe + has_axe = "full" + to_chat(user, span_notice("You place [placed_axe] back in the [name].")) + update_icon(UPDATE_ICON_STATE) + return + if(smashed) return - if(istype(O, /obj/item/multitool)) - if(localopened) - add_fingerprint(user) - localopened = FALSE - update_icon_closing() - return - else - to_chat(user, "Resetting circuitry...") - playsound(user, 'sound/machines/lockenable.ogg', 50, 1) - if(do_after(user, 20 * O.toolspeed * gettoolspeedmod(user), target = src)) - add_fingerprint(user) - locked = TRUE - to_chat(user, " You re-enable the locking modules.") - return - else - add_fingerprint(user) - localopened = !localopened - if(localopened) - update_icon_opening() - else - update_icon_closing() -/obj/structure/closet/fireaxecabinet/attack_hand(mob/user as mob) + operate_panel() + return + + if(smashed) + return + + if(ismultitool(I)) + if(localopened) + operate_panel() + return + + to_chat(user, span_warning("Resetting circuitry...")) + playsound(user, 'sound/machines/lockenable.ogg', 50, TRUE) + if(!do_after_once(user, 2 SECONDS * I.toolspeed, target = src)) + return + + locked = TRUE + to_chat(user, span_caution("You re-enable the locking modules.")) + return + + operate_panel() + + +/obj/structure/closet/fireaxecabinet/attack_hand(mob/user) if(locked) - to_chat(user, "The cabinet won't budge!") + to_chat(user, span_warning("The cabinet won't budge!")) return - if(localopened) - if(fireaxe) - add_fingerprint(user) - fireaxe.forceMove_turf() - user.put_in_hands(fireaxe, ignore_anim = FALSE) - to_chat(user, "You take \the [fireaxe] from the [src].") - fireaxe = null - add_fingerprint(user) - update_icon() - else - if(smashed) - return - else - add_fingerprint(user) - localopened = !localopened - if(localopened) - update_icon_opening() - else - update_icon_closing() + if(localopened && fireaxe) + fireaxe.forceMove_turf() + user.put_in_hands(fireaxe, ignore_anim = FALSE) + to_chat(user, span_notice("You take [fireaxe] from [src].")) + has_axe = "empty" + fireaxe = null - else add_fingerprint(user) - localopened = !localopened //I'm pretty sure we don't need an if(smashed) in here. In case I'm wrong and it fucks up teh cabinet, **MARKER**. -Agouri - if(localopened) - update_icon_opening() - else - update_icon_closing() + update_icon(UPDATE_ICON_STATE) + return + + if(smashed) + return -/obj/structure/closet/fireaxecabinet/attack_tk(mob/user as mob) + operate_panel() + + +/obj/structure/closet/fireaxecabinet/attack_tk(mob/user) if(localopened && fireaxe) fireaxe.forceMove(loc) - to_chat(user, "You telekinetically remove \the [fireaxe].") + to_chat(user, span_notice("You telekinetically remove \the [fireaxe].")) + has_axe = "empty" fireaxe = null - update_icon() + update_icon(UPDATE_ICON_STATE) return attack_hand(user) -/obj/structure/closet/fireaxecabinet/verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri - set name = "Open/Close" - set category = "Object" - if(isrobot(usr) || locked || smashed) - if(locked) - to_chat(usr, "The cabinet won't budge!") - else if(smashed) - to_chat(usr, "The protective glass is broken!") +/obj/structure/closet/fireaxecabinet/attack_ai(mob/user) + if(smashed) + to_chat(user, span_warning("The security of the cabinet is compromised.")) return - localopened = !localopened - update_icon() + locked = !locked + if(locked) + to_chat(user, span_warning("Cabinet locked.")) + else + to_chat(user, span_notice("Cabinet unlocked.")) -/obj/structure/closet/fireaxecabinet/verb/remove_fire_axe() - set name = "Remove Fire Axe" - set category = "Object" - if(isrobot(usr)) +/obj/structure/closet/fireaxecabinet/proc/operate_panel() + if(operating) return + operating = TRUE + localopened = !localopened + do_animate() + operating = FALSE - if(localopened) - if(fireaxe) - fireaxe.forceMove_turf() - usr.put_in_hands(fireaxe, ignore_anim = FALSE) - to_chat(usr, "You take \the [fireaxe] from the [src].") - fireaxe = null - else - to_chat(usr, "The [src] is empty.") - else - to_chat(usr, "The [src] is closed.") - update_icon() -/obj/structure/closet/fireaxecabinet/attack_ai(mob/user as mob) - if(smashed) - to_chat(user, "The security of the cabinet is compromised.") - return +/obj/structure/closet/fireaxecabinet/proc/do_animate() + if(!localopened) + flick("fireaxe_[has_axe]_closing", src) else - locked = !locked - if(locked) - to_chat(user, "Cabinet locked.") - else - to_chat(user, "Cabinet unlocked.") + flick("fireaxe_[has_axe]_opening", src) + sleep(1 SECONDS) + update_icon(UPDATE_ICON_STATE) -/obj/structure/closet/fireaxecabinet/proc/update_icon_opening() - var/hasaxe = fireaxe != null - icon_state = "fireaxe[hasaxe][localopened][hitstaken][smashed]opening" - spawn(10) - update_icon() -/obj/structure/closet/fireaxecabinet/proc/update_icon_closing() - var/hasaxe = fireaxe != null - icon_state = "fireaxe[hasaxe][localopened][hitstaken][smashed]closing" - spawn(10) - update_icon() +/obj/structure/closet/fireaxecabinet/update_icon_state() + if(localopened && !smashed) + icon_state = "fireaxe_[has_axe]_open" + else + icon_state = "fireaxe_[has_axe]_[hitstaken]hits" -/obj/structure/closet/fireaxecabinet/update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers - var/hasaxe = fireaxe != null - icon_state = "fireaxe[hasaxe][localopened][hitstaken][smashed]" /obj/structure/closet/fireaxecabinet/open() return + /obj/structure/closet/fireaxecabinet/close() return + /obj/structure/closet/fireaxecabinet/welder_act(mob/user, obj/item/I) //A bastion of sanity in a sea of madness return -/obj/structure/closet/fireaxecabinet/Destroy() - if(!obj_integrity) - if(fireaxe) - fireaxe.forceMove(loc) - fireaxe = null - else - QDEL_NULL(fireaxe) - return ..() + //mining "fireaxe" /obj/structure/fishingrodcabinet @@ -240,42 +210,45 @@ anchored = TRUE var/obj/item/twohanded/fishingrod/olreliable //what the fuck? -/obj/structure/fishingrodcabinet/Initialize() + +/obj/structure/fishingrodcabinet/Initialize(mapload) . = ..() - if(!olreliable) - olreliable = new(src) - update_icon() + olreliable = new(src) + update_icon(UPDATE_OVERLAYS) + -/obj/structure/fishingrodcabinet/update_icon() +/obj/structure/fishingrodcabinet/update_overlays() . = ..() - cut_overlays() if(olreliable) - add_overlay("rod") + . += "rod" -/obj/structure/fishingrodcabinet/attackby(var/obj/item/O as obj, var/mob/living/user as mob) - if(istype(O, /obj/item/twohanded/fishingrod)) - var/obj/item/twohanded/fishingrod/R = O - if(R.wielded) - to_chat(user, "Unwield \the [R] first.") - return - if(!user.drop_item_ground(R)) - to_chat(user, "\The [R] stays stuck to your hands!") - return - add_fingerprint(user) - olreliable = R - contents += R - to_chat(user, "You place \the [R] back in the [name].") - update_icon() +/obj/structure/fishingrodcabinet/attackby(obj/item/I, mob/living/user) + if(!istype(I, /obj/item/twohanded/fishingrod)) + return ..() + var/obj/item/twohanded/fishingrod/rod = I + if(HAS_TRAIT(rod, TRAIT_WIELDED)) + to_chat(user, span_warning("Unwield [rod] first.")) + return + if(!user.drop_transfer_item_to_loc(rod, src)) + to_chat(user, span_warning("[rod] stays stuck to your hands!")) + return -/obj/structure/fishingrodcabinet/attack_hand(mob/user as mob) - if(olreliable) - add_fingerprint(user) - olreliable.forceMove_turf() - user.put_in_hands(olreliable, ignore_anim = FALSE) - to_chat(user, "You take \the [olreliable] from the [src].") - olreliable = null + olreliable = rod + to_chat(user, span_notice("You place [rod] back in [src].")) + update_icon(UPDATE_OVERLAYS) + + + +/obj/structure/fishingrodcabinet/attack_hand(mob/user) + if(!olreliable) + return ..() + + add_fingerprint(user) + olreliable.forceMove_turf() + user.put_in_hands(olreliable, ignore_anim = FALSE) + to_chat(user, span_notice("You take [olreliable] from [src].")) + olreliable = null + update_icon(UPDATE_OVERLAYS) - add_fingerprint(user) - update_icon() diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index e2805382c05..1b71eb4811b 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -27,6 +27,8 @@ new /obj/item/clothing/under/sl_suit(src) new /obj/item/clothing/under/rank/bartender(src) new /obj/item/clothing/under/rank/bartender(src) + new /obj/item/clothing/under/rank/bartender/skirt(src) + new /obj/item/clothing/under/rank/bartender/skirt(src) new /obj/item/clothing/under/dress/dress_saloon new /obj/item/clothing/suit/wcoat(src) new /obj/item/clothing/suit/wcoat(src) diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm index fcd763292e6..5665c22e234 100644 --- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm +++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm @@ -2,8 +2,6 @@ /obj/structure/closet/malf/suits desc = "It's a storage unit for operational gear." icon_state = "syndicate" - icon_closed = "syndicate" - icon_opened = "syndicateopen" /obj/structure/closet/malf/suits/populate_contents() new /obj/item/tank/jetpack/void(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 ab676f2564b..834f1565aa7 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -43,7 +43,7 @@ /obj/structure/closet/secure_closet/freezer/meat/populate_contents() for(var/i in 1 to 4) - new /obj/item/reagent_containers/food/snacks/meat/monkey(src) + new /obj/item/reagent_containers/food/snacks/meat/humanoid/monkey(src) /obj/structure/closet/secure_closet/freezer/meat/open req_access = null diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm index 4f662b78086..bed6882aab6 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -2,43 +2,35 @@ name = "gun cabinet" req_access = list(ACCESS_ARMORY) icon = 'icons/obj/guncabinet.dmi' - icon_state = "base" + icon_state = "guncabinet" -/obj/structure/closet/secure_closet/guncabinet/toggle() - ..() - update_icon() -/obj/structure/closet/secure_closet/guncabinet/update_icon() - overlays.Cut() - if(opened) - overlays += icon(icon,"door_open") - else - var/lazors = 0 - var/shottas = 0 - for(var/obj/item/gun/G in contents) - if(istype(G, /obj/item/gun/energy)) - lazors++ - if(istype(G, /obj/item/gun/projectile/)) - shottas++ - if(lazors || shottas) - for(var/i = 0 to 2) - var/image/gun = image(icon(src.icon)) +/obj/structure/closet/secure_closet/guncabinet/Initialize(mapload) + . = ..() + // we need to update our guns inside, after closet is filled + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon), UPDATE_OVERLAYS), 1 SECONDS) - if(lazors > 0 && (shottas <= 0 || prob(50))) - lazors-- - gun.icon_state = "laser" - else if(shottas > 0) - shottas-- - gun.icon_state = "projectile" - gun.pixel_x = i*4 - overlays += gun +/obj/structure/closet/secure_closet/guncabinet/apply_contents_overlays() + . = ..() - overlays += icon(src.icon,"door") + var/lazors = 0 + var/shottas = 0 + for(var/thing in contents) + if(istype(thing, /obj/item/gun/energy)) + lazors++ + if(istype(thing, /obj/item/gun/projectile)) + shottas++ + + if(lazors || shottas) + for(var/i = 1 to 2) + var/choise = "" + if(lazors > 0 && (shottas <= 0 || prob(50))) + lazors-- + choise = "laser" + else if(shottas > 0) + shottas-- + choise = "projectile" + if(choise) + . += image(icon, icon_state = choise, pixel_x = i * 4) - if(broken) - overlays += icon(src.icon,"door_broken") - else if(locked) - overlays += icon(src.icon,"door_locked") - else - overlays += icon(src.icon,"door") diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index ab0efd535b0..03a15e37949 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -19,3 +19,4 @@ new /obj/item/storage/box/disks_plantgene(src) new /obj/item/clothing/suit/hooded/wintercoat/hydro(src) new /obj/item/clothing/suit/hooded/wintercoat/hydro(src) + new /obj/item/clothing/under/rank/hydroponics/skirt(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 9822f33c632..491ad76e1e9 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 @@ -1,47 +1,63 @@ +#define CLOSET_BREAKOUT_TIME (2 MINUTES) + /obj/structure/closet/secure_closet name = "secure locker" desc = "It's an immobile card-locked storage unit." icon = 'icons/obj/closet.dmi' icon_state = "secure" - density = 1 - opened = 0 - locked = 1 - broken = 0 + density = TRUE + opened = FALSE + locked = TRUE + broken = FALSE can_be_emaged = TRUE max_integrity = 250 armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) damage_deflection = 20 - wall_mounted = 0 //never solid (You can always pass over it) + wall_mounted = FALSE //never solid (You can always pass over it) /obj/structure/closet/secure_closet/can_open() - if(!..()) - return 0 if(locked) - return 0 + return FALSE return ..() /obj/structure/closet/secure_closet/close() - if(..()) - if(broken) - update_icon() - return 1 - else - return 0 + . = ..() + if(. && broken) + update_icon() + /obj/structure/closet/secure_closet/emp_act(severity) - for(var/obj/O in src) - O.emp_act(severity) + for(var/obj/object in src) + object.emp_act(severity) + + if(broken || opened) + return + + if(prob(50 / severity)) + locked = !locked + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + flick_overlay_view(image(icon, src, overlay_sparking), 1 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 1 SECONDS) + + if(prob(20 / severity)) + if(locked) + req_access = list() + req_access += pick(get_all_accesses()) + return + open() + + +/obj/structure/closet/secure_closet/emag_act(mob/user) if(!broken) - if(prob(50/severity)) - locked = !locked - update_icon() - if(prob(20/severity) && !opened) - if(!locked) - open() - else - req_access = list() - req_access += pick(get_all_accesses()) - ..() + add_attack_logs(user, src, "emagged") + broken = TRUE + locked = FALSE + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + flick_overlay_view(image(icon, src, overlay_sparking), 1 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_appearance), UPDATE_ICON|UPDATE_DESC), 1 SECONDS) + if(user) + to_chat(user, "You break the lock on [src].") + /obj/structure/closet/secure_closet/proc/togglelock(mob/living/user) if(!istype(user) || user.incapacitated()) @@ -71,15 +87,6 @@ if(Adjacent(user)) togglelock(user) -/obj/structure/closet/secure_closet/emag_act(mob/user) - if(!broken) - add_attack_logs(user, src, "emagged") - broken = TRUE - locked = FALSE - overlays += overlay_sparking - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 1 SECONDS) - if(user) - to_chat(user, "You break the lock on \the [src].") /obj/structure/closet/secure_closet/attack_hand(mob/user) add_fingerprint(user) @@ -102,60 +109,75 @@ else to_chat(usr, "This mob type can't use this verb.") -/obj/structure/closet/secure_closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot) - ..() - if(!opened) - //overlays += overlay_locker //uncomment if you want to add locker overlay to all secure closets - if(!broken) - if(locked) - overlays += overlay_locked - else - overlays += overlay_unlocked - -/obj/structure/closet/secure_closet/container_resist(var/mob/living/L) - var/breakout_time = 2 //2 minutes by default + +/obj/structure/closet/secure_closet/update_overlays() + . = ..() + if(!opened && !broken) + if(locked) + . += overlay_locked + else + . += overlay_unlocked + + +/obj/structure/closet/secure_closet/update_desc(updates = ALL) + . = ..() + if(broken) + desc = "It appears to be broken." + else + desc = initial(desc) + + +/obj/structure/closet/secure_closet/container_resist(mob/living/user) if(opened) - if(L.loc == src) - L.forceMove(get_turf(src)) // Let's just be safe here + if(user.loc == src) + user.forceMove(get_turf(src)) // Let's just be safe here return //Door's open... wait, why are you in it's contents then? + if(!locked && !welded) return //It's a secure closet, but isn't locked. Easily escapable from, no need to 'resist' //okay, so the closet is either welded or locked... resist!!! - to_chat(L, "You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)") - for(var/mob/O in viewers(src)) - O.show_message("The [src] begins to shake violently!", 1) - - - spawn(0) - if(do_after(usr,(breakout_time*60*10), target = src)) //minutes * 60seconds * 10deciseconds - if(!src || !L || L.stat != CONSCIOUS || L.loc != src || opened) //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened - return - - //Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'... - if(!locked && !welded) - return - - //Well then break it! - desc = "It appears to be broken." - flick_overlay_view(image(icon=icon, icon_state=overlay_sparking), 1 SECONDS) - sleep(10) - flick_overlay_view(image(icon=icon, icon_state=overlay_sparking), 1 SECONDS) - sleep(10) - broken = 1 - locked = 0 - welded = 0 - update_icon() - to_chat(usr, "You successfully break out!") - for(var/mob/O in viewers(L.loc)) - O.show_message("\the [usr] successfully broke out of \the [src]!", 1) - if(istype(loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace) - var/obj/structure/bigDelivery/BD = loc - BD.attack_hand(usr) - if(isobj(loc)) - var/obj/loc_as_obj = loc - loc_as_obj.container_resist(L) - open() + visible_message( + span_danger("[src] begins to shake violently!"), + span_warning("You lean on the back of [src] and start pushing the door open. (this will take about [CLOSET_BREAKOUT_TIME / 10] minutes.)") + ) + INVOKE_ASYNC(src, PROC_REF(resist_async), user) + + +/obj/structure/closet/secure_closet/proc/resist_async(mob/living/user) + if(!do_after(user, CLOSET_BREAKOUT_TIME, target = src)) + return + + //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened + if(!src || !user || user.incapacitated() || user.loc != src || opened) + return + + //Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'... + if(!locked && !welded) + return + + //Well then break it! + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + flick_overlay_view(image(icon, src, overlay_sparking), 1 SECONDS) + broken = TRUE + locked = FALSE + welded = FALSE + update_appearance(UPDATE_ICON|UPDATE_DESC) + visible_message( + span_danger("[user] successfully broke out of [src]!"), + span_warning("You successfully break out!"), + ) + + if(istype(loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace) + var/obj/structure/bigDelivery/BD = loc + BD.attack_hand(user) + + if(isobj(loc)) + var/obj/loc_as_obj = loc + loc_as_obj.container_resist(user) + + open() + /obj/structure/closet/secure_closet/screwdriver_act(mob/living/user, obj/item/I) . = ..() 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 5ce2ef9270e..c2f23dad71b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -38,35 +38,6 @@ new /obj/item/clothing/accessory/medal/service(src) new /obj/item/storage/garmentbag/hop(src) -/*/obj/structure/closet/secure_closet/hop2 //dont realy need this because of garment bag - name = "head of personnel's attire" - req_access = list(ACCESS_HOP) - icon_state = "hopsecure1" - icon_closed = "hopsecure" - icon_locked = "hopsecure1" - icon_opened = "hopsecureopen" - icon_broken = "hopsecurebroken" - icon_off = "hopsecureoff" - -/obj/structure/closet/secure_closet/hop2/populate_contents() - new /obj/item/clothing/neck/mantle/head_of_personnel(src) - new /obj/item/clothing/neck/cloak/head_of_personnel(src) - new /obj/item/clothing/under/dress/dress_hr(src) - new /obj/item/clothing/under/lawyer/female(src) - new /obj/item/clothing/under/lawyer/black(src) - new /obj/item/clothing/under/lawyer/red(src) - new /obj/item/clothing/under/lawyer/oldman(src) - new /obj/item/clothing/shoes/brown(src) - new /obj/item/clothing/shoes/black(src) - new /obj/item/clothing/shoes/leather(src) - new /obj/item/clothing/shoes/white(src) - new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src) - new /obj/item/clothing/under/rank/head_of_personnel_alt(src) - new /obj/item/clothing/under/rank/head_of_personnel_f(src) - new /obj/item/clothing/suit/hop_jacket(src) - new /obj/item/clothing/suit/hop_jacket/female(src) -*/ - /obj/structure/closet/secure_closet/hos name = "head of security's locker" req_access = list(ACCESS_HOS) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index bb2509c6423..e993011aa0b 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -6,6 +6,7 @@ density = 1 anchored = 1 max_integrity = 0 //destroying the statue kills the mob within + no_overlays = TRUE var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils. var/intialBrute = 0 @@ -94,7 +95,7 @@ /obj/structure/closet/statue/welder_act() return -/obj/structure/closet/statue/MouseDrop_T() +/obj/structure/closet/statue/MouseDrop_T(atom/dropping, mob/user, params) return /obj/structure/closet/statue/relaymove() @@ -106,7 +107,7 @@ /obj/structure/closet/statue/verb_toggleopen() return -/obj/structure/closet/statue/update_icon() +/obj/structure/closet/statue/update_icon_state() return /obj/structure/closet/statue/proc/shatter(mob/user) diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index ab5070d0871..90d830553c4 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -2,8 +2,6 @@ name = "armoury closet" desc = "Why is this here?" icon_state = "syndicate" - icon_closed = "syndicate" - icon_opened = "syndicateopen" /obj/structure/closet/syndicate/personal diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index dc3a1aacb38..8abafd26447 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -16,8 +16,6 @@ name = "emergency closet" desc = "It's a storage unit for emergency breathmasks and o2 tanks." icon_state = "emergency" - icon_closed = "emergency" - icon_opened = "emergencyopen" /obj/structure/closet/emcloset/anchored anchored = TRUE @@ -67,8 +65,6 @@ name = "fire-safety closet" desc = "It's a storage unit for fire-fighting supplies." icon_state = "firecloset" - icon_closed = "firecloset" - icon_opened = "fireclosetopen" /obj/structure/closet/firecloset/populate_contents() new /obj/item/extinguisher(src) @@ -93,8 +89,6 @@ name = "tool closet" desc = "It's a storage unit for tools." icon_state = "toolcloset" - icon_closed = "toolcloset" - icon_opened = "toolclosetopen" /obj/structure/closet/toolcloset/populate_contents() if(prob(40)) @@ -149,8 +143,6 @@ name = "\improper EOD closet" desc = "It's a storage unit for explosion-protective suits." icon_state = "bombsuit" - icon_closed = "bombsuit" - icon_opened = "bombsuitopen" /obj/structure/closet/bombcloset/populate_contents() new /obj/item/clothing/suit/bomb_suit( src ) @@ -163,8 +155,6 @@ name = "\improper EOD closet" desc = "It's a storage unit for explosion-protective suits." icon_state = "bombsuitsec" - icon_closed = "bombsuitsec" - icon_opened = "bombsuitsecopen" /obj/structure/closet/bombclosetsecurity/populate_contents() new /obj/item/clothing/suit/bomb_suit/security( src ) @@ -179,8 +169,6 @@ name = "fire-safety closet" desc = "It's a storage unit for fire-fighting supplies." icon_state = "hydrant" - icon_closed = "hydrant" - icon_opened = "hydrant_open" anchored = 1 density = 0 wall_mounted = 1 diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 4eb7efc4da1..06c801cad14 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -3,8 +3,6 @@ desc = "A rectangular steel crate." icon = 'icons/obj/crates.dmi' icon_state = "crate" - icon_opened = "crateopen" - icon_closed = "crate" climbable = TRUE open_sound = 'sound/machines/crate_open.ogg' close_sound = 'sound/machines/crate_close.ogg' @@ -15,11 +13,17 @@ // A list of beacon names that the crate will announce the arrival of, when delivered. var/list/announce_beacons = list() -/obj/structure/closet/crate/update_icon() - //..() is not needed here because of different overlay handling logic for crates - overlays.Cut() + +/obj/structure/closet/crate/update_icon_state() + icon_state = "[initial(icon_state)][opened ? "open" : ""]" + + +/obj/structure/closet/crate/update_overlays() + // . = ..() is not needed here because of different overlay handling logic for crates + . = list() if(manifest) - overlays += "manifest" + . += "manifest" + /obj/structure/closet/crate/can_open() return TRUE @@ -53,8 +57,9 @@ O.forceMove(loc) for(var/mob/M in src) //Mobs M.forceMove(loc) - icon_state = icon_opened + opened = TRUE + update_icon() if(climbable) structure_shaken() @@ -80,8 +85,8 @@ O.forceMove(src) itemcount++ - icon_state = icon_closed opened = FALSE + update_icon() return TRUE @@ -162,12 +167,11 @@ desc = "A secure crate." name = "Secure crate" icon_state = "securecrate" - icon_opened = "securecrateopen" - icon_closed = "securecrate" - var/redlight = "securecrater" - var/greenlight = "securecrateg" - var/sparks = "securecratesparks" - var/emag = "securecrateemag" + overlay_locked = "securecrater" + overlay_unlocked = "securecrateg" + overlay_sparking = "securecratesparks" + /// Overlay for crate with broken lock + var/overlay_broken = "securecrateemag" max_integrity = 500 armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) damage_deflection = 25 @@ -176,17 +180,16 @@ locked = TRUE can_be_emaged = TRUE -/obj/structure/closet/crate/secure/update_icon() - ..() - overlays.Cut() - if(manifest) - overlays += "manifest" + +/obj/structure/closet/crate/secure/update_overlays() + . = ..() if(locked) - overlays += redlight - else if(broken) - overlays += emag + . += overlay_locked + else if(broken && overlay_broken) + . += overlay_broken else - overlays += greenlight + . += overlay_unlocked + /obj/structure/closet/crate/secure/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) if(prob(tamperproof) && damage_amount >= DAMAGE_PRECISION) @@ -204,9 +207,16 @@ explosion(get_turf(src), 0, 1, 5, 5, cause = src) qdel(src) + /obj/structure/closet/crate/secure/can_open() return !locked + +/obj/structure/closet/crate/secure/AltClick(mob/living/user) + if(iscarbon(user) && !user.incapacitated() && Adjacent(user)) + togglelock(user) + + /obj/structure/closet/crate/secure/proc/togglelock(mob/user) if(opened) to_chat(user, "Close the crate first.") @@ -222,6 +232,7 @@ else to_chat(user, "Access Denied") + /obj/structure/closet/crate/secure/verb/verb_togglelock() set src in oview(1) // One square distance set category = null @@ -236,6 +247,7 @@ else to_chat(usr, "This mob type can't use this verb.") + /obj/structure/closet/crate/secure/attack_hand(mob/user) if(manifest) add_fingerprint(user) @@ -253,99 +265,74 @@ else toggle(user, by_hand = TRUE) + /obj/structure/closet/crate/secure/closed_item_click(mob/user) togglelock(user) + /obj/structure/closet/crate/secure/emag_act(mob/user) if(locked) add_attack_logs(user, src, "emagged") - 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", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - src.locked = 0 - src.broken = 1 - update_icon() + locked = FALSE + broken = TRUE + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + flick_overlay_view(image(icon, src, overlay_sparking), 1 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 1 SECONDS) if(user) - to_chat(user, "You unlock \the [src].") + to_chat(user, span_notice("You unlock [src].")) + /obj/structure/closet/crate/secure/emp_act(severity) - for(var/obj/O in src) - O.emp_act(severity) - if(!broken && !opened && prob(50/severity)) - if(!locked) - src.locked = 1 + for(var/obj/object in src) + object.emp_act(severity) + + if(broken || opened) + return + + if(prob(50 / severity)) + locked = !locked + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + flick_overlay_view(image(icon, src, overlay_sparking), 1 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 1 SECONDS) + + if(prob(20 / severity)) + if(locked) + req_access = list() + req_access += pick(get_all_accesses()) 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, TRUE) - src.locked = 0 - update_icon() - if(!opened && prob(20/severity)) - if(!locked) open() - else - src.req_access = list() - src.req_access += pick(get_all_accesses()) - ..() + /obj/structure/closet/crate/plastic name = "plastic crate" desc = "A rectangular plastic crate." icon_state = "plasticcrate" - icon_opened = "plasticcrateopen" - icon_closed = "plasticcrate" /obj/structure/closet/crate/internals desc = "A internals crate." name = "internals crate" icon_state = "o2crate" - icon_opened = "o2crateopen" - icon_closed = "o2crate" /obj/structure/closet/crate/trashcart desc = "A heavy, metal trashcart with wheels." name = "trash Cart" icon_state = "trashcart" - icon_opened = "trashcartopen" - icon_closed = "trashcart" pull_push_speed_modifier = 1 /obj/structure/closet/crate/trashcart/gibs desc = "A heavy, metal trashcart with wheels. You better don't ask." name = "trash cart with gibs" icon_state = "trashcartgib" - icon_opened = "trashcartgibopen" - icon_closed = "trashcartgib" - -/*these aren't needed anymore -/obj/structure/closet/crate/hat - desc = "A crate filled with Valuable Collector's Hats!." - name = "Hat Crate" - icon_state = "crate" - icon_opened = "crateopen" - icon_closed = "crate" - -/obj/structure/closet/crate/contraband - name = "Poster crate" - desc = "A random assortment of posters manufactured by providers NOT listed under Nanotrasen's whitelist." - icon_state = "crate" - icon_opened = "crateopen" - icon_closed = "crate" -*/ /obj/structure/closet/crate/medical desc = "A medical crate." name = "medical crate" icon_state = "medicalcrate" - icon_opened = "medicalcrateopen" - icon_closed = "medicalcrate" /obj/structure/closet/crate/rcd desc = "A crate for the storage of the RCD." name = "\improper RCD crate" icon_state = "crate" - icon_opened = "crateopen" - icon_closed = "crate" /obj/structure/closet/crate/rcd/populate_contents() new /obj/item/rcd_ammo(src) @@ -357,8 +344,6 @@ desc = "A freezer." name = "Freezer" icon_state = "freezer" - icon_opened = "freezeropen" - icon_closed = "freezer" var/target_temp = T0C - 40 var/cooling_power = 40 @@ -384,8 +369,6 @@ desc = "A large can, looks like a bin to me." name = "garbage can" icon_state = "largebin" - icon_opened = "largebinopen" - icon_closed = "largebin" anchored = TRUE /obj/structure/closet/crate/can/wrench_act(mob/user, obj/item/I) @@ -398,8 +381,6 @@ desc = "A crate with a radiation sign on it." name = "radioactive gear crate" icon_state = "radiation" - icon_opened = "radiationopen" - icon_closed = "radiation" /obj/structure/closet/crate/radiation/populate_contents() new /obj/item/clothing/suit/radiation(src) @@ -415,58 +396,46 @@ desc = "A secure weapons crate." name = "weapons crate" icon_state = "weaponcrate" - icon_opened = "weaponcrateopen" - icon_closed = "weaponcrate" /obj/structure/closet/crate/secure/plasma desc = "A secure plasma crate." name = "plasma crate" icon_state = "plasmacrate" - icon_opened = "plasmacrateopen" - icon_closed = "plasmacrate" /obj/structure/closet/crate/secure/gear desc = "A secure gear crate." name = "gear crate" icon_state = "secgearcrate" - icon_opened = "secgearcrateopen" - icon_closed = "secgearcrate" /obj/structure/closet/crate/secure/hydrosec desc = "A crate with a lock on it, painted in the scheme of the station's botanists." name = "secure hydroponics crate" icon_state = "hydrosecurecrate" - icon_opened = "hydrosecurecrateopen" - icon_closed = "hydrosecurecrate" /obj/structure/closet/crate/secure/bin desc = "A secure bin." name = "secure bin" icon_state = "largebins" - icon_opened = "largebinsopen" - icon_closed = "largebins" - redlight = "largebinr" - greenlight = "largebing" - sparks = "largebinsparks" - emag = "largebinemag" + overlay_locked = "largebinr" + overlay_unlocked = "largebing" + overlay_sparking = "largebinsparks" + overlay_broken = "largebinemag" /obj/structure/closet/crate/large name = "large crate" desc = "A hefty metal crate." icon_state = "largemetal" - icon_opened = "largemetalopen" - icon_closed = "largemetal" integrity_failure = 0 //Makes the crate break when integrity reaches 0, instead of opening and becoming an invisible sprite. /obj/structure/closet/crate/large/close() . = ..() if(.)//we can hold up to one large item - var/found = 0 + var/found = FALSE for(var/obj/structure/S in src.loc) if(S == src) continue if(!S.anchored) - found = 1 + found = TRUE S.forceMove(src) break if(!found) @@ -479,10 +448,9 @@ name = "large crate" desc = "A hefty metal crate with an electronic locking system." icon_state = "largemetal" - icon_opened = "largemetalopen" - icon_closed = "largemetal" - redlight = "largemetalr" - greenlight = "largemetalg" + overlay_locked = "largemetalr" + overlay_unlocked = "largemetalg" + overlay_broken = "" /obj/structure/closet/crate/secure/large/close() . = ..() @@ -505,15 +473,11 @@ /obj/structure/closet/crate/secure/large/reinforced desc = "A hefty, reinforced metal crate with an electronic locking system." icon_state = "largermetal" - icon_opened = "largermetalopen" - icon_closed = "largermetal" /obj/structure/closet/crate/hydroponics name = "hydroponics crate" desc = "All you need to destroy those pesky weeds and pests." icon_state = "hydrocrate" - icon_opened = "hydrocrateopen" - icon_closed = "hydrocrate" /obj/structure/closet/crate/hydroponics/prespawned //This exists so the prespawned hydro crates spawn with their contents. @@ -539,36 +503,26 @@ name = "science crate" desc = "A science crate." icon_state = "scicrate" - icon_opened = "scicrateopen" - icon_closed = "scicrate" /obj/structure/closet/crate/secure/scisec name = "secure science crate" desc = "A crate with a lock on it, painted in the scheme of the station's scientists." icon_state = "scisecurecrate" - icon_opened = "scisecurecrateopen" - icon_closed = "scisecurecrate" /obj/structure/closet/crate/engineering name = "engineering crate" desc = "An engineering crate." icon_state = "engicrate" - icon_opened = "engicrateopen" - icon_closed = "engicrate" /obj/structure/closet/crate/secure/engineering name = "secure engineering crate" desc = "A crate with a lock on it, painted in the scheme of the station's engineers." icon_state = "engisecurecrate" - icon_opened = "engisecurecrateopen" - icon_closed = "engisecurecrate" /obj/structure/closet/crate/engineering/electrical name = "electrical engineering crate" desc = "An electrical engineering crate." icon_state = "electricalcrate" - icon_opened = "electricalcrateopen" - icon_closed = "electricalcrate" /obj/structure/closet/crate/tape/populate_contents() if(prob(10)) @@ -578,8 +532,6 @@ name = "secure biohazard crate" desc = "An protected biohazard crate." icon_state = "biohazard" - icon_opened = "biohazardopen" - icon_closed = "biohazard" //crates of gear in the free golem ship /obj/structure/closet/crate/golemgear/populate_contents() @@ -594,19 +546,14 @@ //syndie crates by Furukai /obj/structure/closet/crate/syndicate - desc = "Definitely a property of an evil corporation!" icon_state = "syndiecrate" - icon_opened = "syndiecrateopen" - icon_closed = "syndiecrate" material_drop = /obj/item/stack/sheet/mineral/plastitanium /obj/structure/closet/crate/secure/syndicate name = "Secure suspicious crate" desc = "Definitely a property of an evil corporation! And it has a hardened lock! And a microphone?" icon_state = "syndiesecurecrate" - icon_opened = "syndiesecurecrateopen" - icon_closed = "syndiesecurecrate" material_drop = /obj/item/stack/sheet/mineral/plastitanium can_be_emaged = FALSE diff --git a/code/game/objects/structures/crates_lockers/crittercrate.dm b/code/game/objects/structures/crates_lockers/crittercrate.dm index 6c4bf01ee6a..cf15893c72c 100644 --- a/code/game/objects/structures/crates_lockers/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/crittercrate.dm @@ -2,8 +2,6 @@ name = "critter crate" desc = "A crate designed for safe transport of animals. Only openable from the outside." icon_state = "critter" - icon_opened = "critteropen" - icon_closed = "critter" open_sound = 'sound/machines/wooden_closet_open.ogg' close_sound = 'sound/machines/wooden_closet_close.ogg' var/already_opened = 0 diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 9d670424371..bc7103b462a 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -6,17 +6,14 @@ density = 1 var/obj/item/paper/manifest/manifest -/obj/structure/largecrate/Initialize(mapload) - . = ..() - update_icon() -/obj/structure/largecrate/update_icon() - ..() - overlays.Cut() +/obj/structure/largecrate/update_overlays() + . = ..() if(manifest) - overlays += "manifest" + . += "manifest" -/obj/structure/largecrate/attack_hand(mob/user as mob) + +/obj/structure/largecrate/attack_hand(mob/user) if(manifest) add_fingerprint(user) to_chat(user, "You tear the manifest off of the crate.") @@ -25,18 +22,18 @@ if(ishuman(user)) user.put_in_hands(manifest, ignore_anim = FALSE) manifest = null - update_icon() - return - else - to_chat(user, "You need a crowbar to pry this open!") + update_icon(UPDATE_OVERLAYS) return -/obj/structure/largecrate/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/crowbar)) + to_chat(user, "You need a crowbar to pry this open!") + + +/obj/structure/largecrate/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour == TOOL_CROWBAR) if(manifest) manifest.forceMove(loc) manifest = null - update_icon() + update_icon(UPDATE_OVERLAYS) new /obj/item/stack/sheet/wood(src) var/turf/T = get_turf(src) for(var/O in contents) @@ -56,8 +53,8 @@ /obj/structure/largecrate/lisa icon_state = "lisacrate" -/obj/structure/largecrate/lisa/attackby(obj/item/W as obj, mob/user as mob) //ugly but oh well - if(istype(W, /obj/item/crowbar)) +/obj/structure/largecrate/lisa/attackby(obj/item/W, mob/user) //ugly but oh well + if(W.tool_behaviour == TOOL_CROWBAR) new /mob/living/simple_animal/pet/dog/corgi/Lisa(loc) return ..() @@ -65,8 +62,8 @@ name = "cow crate" icon_state = "lisacrate" -/obj/structure/largecrate/cow/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/crowbar)) +/obj/structure/largecrate/cow/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour == TOOL_CROWBAR) new /mob/living/simple_animal/cow(loc) return ..() @@ -74,8 +71,8 @@ name = "goat crate" icon_state = "lisacrate" -/obj/structure/largecrate/goat/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/crowbar)) +/obj/structure/largecrate/goat/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour == TOOL_CROWBAR) new /mob/living/simple_animal/hostile/retaliate/goat(loc) return ..() @@ -83,8 +80,8 @@ name = "chicken crate" icon_state = "lisacrate" -/obj/structure/largecrate/chick/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/crowbar)) +/obj/structure/largecrate/chick/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour == TOOL_CROWBAR) var/num = rand(4, 6) for(var/i = 0, i < num, i++) new /mob/living/simple_animal/chick(loc) @@ -94,7 +91,7 @@ name = "cat crate" icon_state = "lisacrate" -/obj/structure/largecrate/cat/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/crowbar)) +/obj/structure/largecrate/cat/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour == TOOL_CROWBAR) new /mob/living/simple_animal/pet/cat(loc) return ..() diff --git a/code/game/objects/structures/crates_lockers/walllocker.dm b/code/game/objects/structures/crates_lockers/walllocker.dm index 4a2f9a7ed88..c127b629719 100644 --- a/code/game/objects/structures/crates_lockers/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/walllocker.dm @@ -6,15 +6,13 @@ name = "wall locker" icon = 'icons/obj/walllocker.dmi' icon_state = "wall-locker" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE + ignore_density_closed = TRUE + no_overlays = TRUE icon_closed = "wall-locker" icon_opened = "wall-lockeropen" -/obj/structure/closet/walllocker/close() - ..() - density = 0 //It's a locker in a wall, you aren't going to be walking into it. - /obj/structure/closet/walllocker/emerglocker name = "emergency locker" desc = "A wall mounted locker with emergency supplies" @@ -22,6 +20,7 @@ icon_closed = "emerg" icon_opened = "emergopen" + /obj/structure/closet/walllocker/emerglocker/populate_contents() new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/tank/internals/emergency_oxygen(src) diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index 491ce2f5523..cd532bf025c 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -4,13 +4,15 @@ icon_state = "echair0" item_chair = null anchored = TRUE - var/obj/item/assembly/shock_kit/part = null - var/last_time = 1.0 - var/delay_time = 50 + var/obj/item/assembly/shock_kit/part + var/last_time = 0 + var/delay_time = 5 SECONDS + var/shocking = FALSE + /obj/structure/chair/e_chair/Initialize(mapload, obj/item/assembly/shock_kit/sk) . = ..() - overlays += image('icons/obj/chairs.dmi', src, "echair_over", MOB_LAYER + 1, dir) + update_icon(UPDATE_OVERLAYS) if(sk) part = sk @@ -25,64 +27,96 @@ part.part1 = part1 part.part2 = part2 -/obj/structure/chair/e_chair/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/wrench)) - var/obj/structure/chair/C = new /obj/structure/chair(loc) - transfer_fingerprints_to(C) - playsound(loc, W.usesound, 50, 1) - C.dir = dir - part.loc = loc + +/obj/structure/chair/e_chair/Destroy() + if(part) + QDEL_NULL(part) + return ..() + + +/obj/structure/chair/e_chair/rotate() + if(..()) + update_icon(UPDATE_OVERLAYS) + + +/obj/structure/chair/e_chair/update_icon_state() + icon_state = "echair[shocking]" + + +/obj/structure/chair/e_chair/update_overlays() + . = ..() + . += image(icon, icon_state = "echair_over", layer = ABOVE_MOB_LAYER, dir = src.dir) + if(shocking) + . += image(icon, icon_state = "echair_shock", layer = ABOVE_MOB_LAYER) + + +/obj/structure/chair/e_chair/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour == TOOL_WRENCH) + var/obj/structure/chair/chair = new (loc) + transfer_fingerprints_to(chair) + playsound(loc, W.usesound, 50, TRUE) + chair.dir = dir + part.forceMove(loc) part.master = null part = null qdel(src) return return ..() + +/obj/structure/chair/e_chair/examine(mob/user) + . = ..() + . += span_warning("You can Alt-Shift-Click [src] to activate it.") + + +/obj/structure/chair/e_chair/AltShiftClick(mob/living/user) + if(!Adjacent(user)) + return ..() + shock(user) + + /obj/structure/chair/e_chair/verb/activate_e_chair() set name = "Activate Electric Chair" set category = "Object" set src in oview(1) - if(usr.stat || !usr.canmove || usr.restrained()) - return - if(last_time + delay_time > world.time) - to_chat(usr, "\The [src] is not ready yet!") - return - to_chat(usr, "You activate \the [src].") - shock() -/obj/structure/chair/e_chair/rotate() - ..() - overlays.Cut() - overlays += image('icons/obj/chairs.dmi', src, "echair_over", MOB_LAYER + 1, dir) //there's probably a better way of handling this, but eh. -Pete + shock(usr) -/obj/structure/chair/e_chair/proc/shock() - if(last_time + delay_time > world.time) - return - last_time = world.time - icon_state = "echair1" - spawn(delay_time) - icon_state = "echair0" +/obj/structure/chair/e_chair/proc/shock(mob/living/user) + if(isliving(user) && (user.incapacitated() || user.restrained())) + return // special power handling - var/area/A = get_area(src) - if(!isarea(A)) + var/area/our_area = get_area(src) + if(!our_area || !our_area.powered(EQUIP)) return - if(!A.powered(EQUIP)) + + if(last_time + delay_time > world.time) + if(user) + to_chat(user, span_warning("[src] is not ready yet!")) return - A.use_power(5000, EQUIP) - var/light = A.power_light - A.updateicon() + last_time = world.time + our_area.use_power(5000, EQUIP) + our_area.update_icon(UPDATE_ICON_STATE) + + if(user) + to_chat(user, span_notice("You activate [src].")) - flick("echair_shock", src) + shocking = TRUE + update_icon() do_sparks(12, 1, src) - visible_message("The electric chair went off!", "You hear a deep sharp shock!") + visible_message(span_danger("The electric chair went off!")) + addtimer(CALLBACK(src, PROC_REF(reset_echair)), delay_time, TIMER_DELETE_ME) + if(has_buckled_mobs()) - for(var/m in buckled_mobs) - var/mob/living/buckled_mob = m + for(var/mob/living/buckled_mob as anything in buckled_mobs) buckled_mob.electrocute_act(110, src, 1) - to_chat(buckled_mob, "You feel a deep shock course through your body!") - spawn(1) - buckled_mob.electrocute_act(110, src, 1) - A.power_light = light - A.updateicon() + to_chat(buckled_mob, span_userdanger("You feel a deep shock course through your body!")) + addtimer(CALLBACK(buckled_mob, TYPE_PROC_REF(/mob/living, electrocute_act), 110, src, 1), 0.1 SECONDS, TIMER_DELETE_ME) + + +/obj/structure/chair/e_chair/proc/reset_echair() + shocking = FALSE + update_icon() + diff --git a/code/game/objects/structures/engicart.dm b/code/game/objects/structures/engicart.dm index 9de1ce1c470..840e67e89be 100644 --- a/code/game/objects/structures/engicart.dm +++ b/code/game/objects/structures/engicart.dm @@ -38,7 +38,7 @@ add_fingerprint(user) put_in_cart(I, user) myglass=I - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, fail_msg) else if(istype(I, /obj/item/stack/sheet/metal)) @@ -46,7 +46,7 @@ add_fingerprint(user) put_in_cart(I, user) mymetal=I - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, fail_msg) else if(istype(I, /obj/item/stack/sheet/plasteel)) @@ -54,7 +54,7 @@ add_fingerprint(user) put_in_cart(I, user) myplasteel=I - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, fail_msg) else if(istype(I, /obj/item/flashlight)) @@ -62,7 +62,7 @@ add_fingerprint(user) put_in_cart(I, user) myflashlight=I - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, fail_msg) else if(istype(I, /obj/item/storage/toolbox/mechanical)) @@ -70,7 +70,7 @@ add_fingerprint(user) put_in_cart(I, user) mybluetoolbox=I - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, fail_msg) else if(istype(I, /obj/item/storage/toolbox/electrical)) @@ -78,7 +78,7 @@ add_fingerprint(user) put_in_cart(I, user) myyellowtoolbox=I - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, fail_msg) else if(istype(I, /obj/item/storage/toolbox)) @@ -86,10 +86,10 @@ add_fingerprint(user) put_in_cart(I, user) myredtoolbox=I - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, fail_msg) - else if(istype(I, /obj/item/wrench)) + else if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) if(!anchored && !isinspace()) playsound(src.loc, I.usesound, 50, 1) @@ -178,22 +178,24 @@ to_chat(user, "You take [myyellowtoolbox] from [src].") myyellowtoolbox = null - update_icon() + update_icon(UPDATE_OVERLAYS) updateUsrDialog() -/obj/structure/engineeringcart/update_icon() - overlays.Cut() + +/obj/structure/engineeringcart/update_overlays() + . = ..() if(myglass) - overlays += "cart_glass" + . += "cart_glass" if(mymetal) - overlays += "cart_metal" + . += "cart_metal" if(myplasteel) - overlays += "cart_plasteel" + . += "cart_plasteel" if(myflashlight) - overlays += "cart_flashlight" + . += "cart_flashlight" if(mybluetoolbox) - overlays += "cart_bluetoolbox" + . += "cart_bluetoolbox" if(myredtoolbox) - overlays += "cart_redtoolbox" + . += "cart_redtoolbox" if(myyellowtoolbox) - overlays += "cart_yellowtoolbox" + . += "cart_yellowtoolbox" + diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 20c58523d17..00b51055261 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -29,6 +29,7 @@ has_extinguisher = new/obj/item/extinguisher/mini(src) else has_extinguisher = new/obj/item/extinguisher(src) + update_icon(UPDATE_ICON_STATE) /obj/structure/extinguisher_cabinet/examine(mob/user) . = ..() @@ -44,7 +45,7 @@ return playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/extinguisher_cabinet/Destroy() QDEL_NULL(has_extinguisher) @@ -58,7 +59,7 @@ /obj/structure/extinguisher_cabinet/handle_atom_del(atom/A) if(A == has_extinguisher) has_extinguisher = null - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/extinguisher_cabinet/attackby(obj/item/O, mob/user, params) if(isrobot(user) || isalien(user)) @@ -69,18 +70,18 @@ return add_fingerprint(user) has_extinguisher = O - update_icon() + update_icon(UPDATE_ICON_STATE) to_chat(user, "You place [O] in [src].") return TRUE else playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened - update_icon() + update_icon(UPDATE_ICON_STATE) else if(user.a_intent != INTENT_HARM) add_fingerprint(user) playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened - update_icon() + update_icon(UPDATE_ICON_STATE) else return ..() @@ -123,7 +124,7 @@ else playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/extinguisher_cabinet/attack_tk(mob/user) if(has_extinguisher) @@ -136,7 +137,7 @@ else playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) opened = !opened - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/extinguisher_cabinet/obj_break(damage_flag) if(!broken && !(flags & NODECONSTRUCT)) @@ -145,7 +146,7 @@ if(has_extinguisher) has_extinguisher.forceMove(loc) has_extinguisher = null - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/extinguisher_cabinet/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) @@ -155,7 +156,7 @@ has_extinguisher = null qdel(src) -/obj/structure/extinguisher_cabinet/update_icon() +/obj/structure/extinguisher_cabinet/update_icon_state() if(!opened) icon_state = "extinguisher_closed" return diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 2847d2f54af..4eb87c6d37b 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -45,13 +45,14 @@ var/healthpercent = (obj_integrity/max_integrity) * 100 switch(healthpercent) if(100) - return "It looks fully intact." + . = "It looks fully intact." if(70 to 99) - return "It looks slightly damaged." + . = "It looks slightly damaged." if(40 to 70) - return "It looks moderately damaged." + . = "It looks moderately damaged." if(0 to 40) - return "It looks heavily damaged." + . = "It looks heavily damaged." + . += "
    Using a lit welding tool on this item will allow you to slice through it, eventually removing the outer layer." /obj/structure/falsewall/ratvar_act() new /obj/structure/falsewall/brass(loc) @@ -73,31 +74,31 @@ . = ..() toggle(user) + /obj/structure/falsewall/proc/toggle(mob/user) if(opening) return - - opening = 1 + opening = TRUE if(density) add_fingerprint(user) do_the_flick() - sleep(4) - density = 0 - set_opacity(0) - update_icon(0) + sleep(0.4 SECONDS) + density = FALSE + set_opacity(FALSE) else var/srcturf = get_turf(src) for(var/mob/living/obstacle in srcturf) //Stop people from using this as a shield - opening = 0 + opening = FALSE return add_fingerprint(user) do_the_flick() - density = 1 - sleep(4) - set_opacity(1) - update_icon() - air_update_turf(1) - opening = 0 + density = TRUE + sleep(0.4 SECONDS) + set_opacity(TRUE) + air_update_turf(TRUE) + opening = FALSE + update_icon(UPDATE_ICON_STATE) + /obj/structure/falsewall/proc/do_the_flick() if(density) @@ -107,7 +108,8 @@ else flick("fwall_closing", src) -/obj/structure/falsewall/update_icon() + +/obj/structure/falsewall/update_icon_state() if(density) icon_state = initial(icon_state) smooth = SMOOTH_TRUE @@ -115,6 +117,7 @@ else icon_state = "fwall_open" + /obj/structure/falsewall/proc/ChangeToWall(delete = TRUE) var/turf/T = get_turf(src) T.ChangeTurf(walltype) @@ -132,7 +135,7 @@ if(T.density) to_chat(user, "[src] is blocked!") return - if(istype(W, /obj/item/screwdriver)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) if(!istype(T, /turf/simulated/floor)) to_chat(user, "[src] bolts must be tightened on the floor!") return diff --git a/code/game/objects/structures/firepit.dm b/code/game/objects/structures/firepit.dm index 075c83e7033..f3f48243f0a 100644 --- a/code/game/objects/structures/firepit.dm +++ b/code/game/objects/structures/firepit.dm @@ -2,7 +2,7 @@ name = "firepit" desc = "Warm and toasty." icon = 'icons/obj/fireplace.dmi' - icon_state = "firepit-active" + icon_state = "firepit" density = FALSE anchored = TRUE max_integrity = 50 @@ -10,9 +10,6 @@ var/lighter // Who lit the thing var/fire_stack_strength = 5 -/obj/structure/firepit/Initialize(mapload) - . = ..() - update_icon() /obj/structure/firepit/attack_hand(mob/living/user) if(active) @@ -31,18 +28,26 @@ else W.fire_act() -/obj/structure/firepit/update_icon() - . = ..() + +/obj/structure/firepit/proc/adjust_light() if(active) set_light(4, ,"#ffb366") - icon_state = "firepit-active" else set_light(0) + + +/obj/structure/firepit/update_icon_state() + if(active) + icon_state = "firepit-active" + else icon_state = "firepit" + /obj/structure/firepit/proc/toggleFirepit() active = !active - update_icon() + update_icon(UPDATE_ICON_STATE) + adjust_light() + /obj/structure/firepit/extinguish() . = ..() diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index 10a5bf70a74..948020d288b 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -69,10 +69,15 @@ else . = ..() -/obj/structure/fireplace/update_icon() + +/obj/structure/fireplace/update_desc(updates = ALL) + . = ..() + desc = lit ? "A large stone brick fireplace, warm and cozy." : initial(desc) + + +/obj/structure/fireplace/update_overlays() . = ..() - overlays.Cut() if(!lit) return @@ -81,17 +86,18 @@ switch(burn_time_remaining()) if(0 to 500) firepower = "fireplace_fire0" - if(500 to 1000) + if(501 to 1000) firepower = "fireplace_fire1" - if(1000 to 1500) + if(1001 to 1500) firepower = "fireplace_fire2" - if(1500 to 2000) + if(1501 to 2000) firepower = "fireplace_fire3" - if(2000 to MAXIMUM_BURN_TIMER) + if(2001 to MAXIMUM_BURN_TIMER) firepower = "fireplace_fire4" - overlays += icon('icons/obj/fireplace.dmi', "[firepower]") - overlays += icon('icons/obj/fireplace.dmi', "fireplace_glow") + . += "[firepower]" + . += "fireplace_glow" + /obj/structure/fireplace/proc/adjust_light() if(!lit) @@ -101,15 +107,16 @@ switch(burn_time_remaining()) if(0 to 500) set_light(1, ,"#ffb366") - if(500 to 1000) + if(501 to 1000) set_light(2, ,"#ffb366") - if(1000 to 1500) + if(1001 to 1500) set_light(3, ,"#ffb366") - if(1500 to 2000) + if(1501 to 2000) set_light(4, ,"#ffb366") - if(2000 to MAXIMUM_BURN_TIMER) + if(2001 to MAXIMUM_BURN_TIMER) set_light(6, ,"#ffb366") + /obj/structure/fireplace/process(seconds_per_tick) if(!lit) return @@ -120,9 +127,10 @@ playsound(src, 'sound/effects/comfyfire.ogg',40,FALSE, FALSE, TRUE) var/turf/T = get_turf(src) T.hotspot_expose(700, 2.5 * seconds_per_tick) - update_icon() + update_icon(UPDATE_OVERLAYS) adjust_light() + /obj/structure/fireplace/extinguish() . = ..() if(lit) @@ -131,6 +139,7 @@ put_out() adjust_fuel_timer(fuel) + /obj/structure/fireplace/proc/adjust_fuel_timer(amount) if(lit) flame_expiry_timer += amount @@ -139,25 +148,27 @@ else fuel_added = clamp(fuel_added + amount, 0, MAXIMUM_BURN_TIMER) + /obj/structure/fireplace/proc/burn_time_remaining() if(lit) return max(0, flame_expiry_timer - world.time) else return max(0, fuel_added) + /obj/structure/fireplace/proc/ignite() lit = TRUE - desc = "A large stone brick fireplace, warm and cozy." flame_expiry_timer = world.time + fuel_added fuel_added = 0 - update_icon() + update_appearance(UPDATE_OVERLAYS|UPDATE_DESC) adjust_light() + /obj/structure/fireplace/proc/put_out() lit = FALSE - update_icon() + update_appearance(UPDATE_OVERLAYS|UPDATE_DESC) adjust_light() - desc = initial(desc) + #undef LOG_BURN_TIMER #undef PAPER_BURN_TIMER diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 4fbe7ef4542..66f7b6e1792 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -11,7 +11,7 @@ var/deconstructible = TRUE /obj/structure/fluff/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/wrench) && deconstructible) + if(I.tool_behaviour == TOOL_WRENCH && deconstructible) user.visible_message("[user] starts disassembling [src]...", "You start disassembling [src]...") playsound(loc, I.usesound, 50, 1) if(do_after(src, 50 * I.toolspeed * gettoolspeedmod(user), target = src)) diff --git a/code/game/objects/structures/foodcart.dm b/code/game/objects/structures/foodcart.dm index 24d051e6b89..8f7dcda91d8 100644 --- a/code/game/objects/structures/foodcart.dm +++ b/code/game/objects/structures/foodcart.dm @@ -39,7 +39,6 @@ add_fingerprint(user) put_in_cart(I, user) food_slots[s]=I - update_icon() success = 1 break if(!success) @@ -51,12 +50,11 @@ add_fingerprint(user) put_in_cart(I, user) drink_slots[s]=I - update_icon() success = 1 break if(!success) to_chat(user, fail_msg) - else if(istype(I, /obj/item/wrench)) + else if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) if(!anchored && !isinspace()) playsound(src.loc, I.usesound, 50, 1) @@ -198,7 +196,6 @@ to_chat(user, "You take [drink] from [src].") drink_slots[6] = null - update_icon() //Not really needed without overlays, but keeping just in case updateUsrDialog() /obj/structure/foodcart/deconstruct(disassembled = TRUE) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 2a7cbe1ffc7..a8c693301b8 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -43,9 +43,6 @@ //height=42 icon='icons/obj/fence-ns.dmi' -/obj/structure/grille/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration) - . = ..() - update_icon() /obj/structure/grille/examine(mob/user) . = ..() diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm index c1fbb87d958..9106bf66cb6 100644 --- a/code/game/objects/structures/guillotine.dm +++ b/code/game/objects/structures/guillotine.dm @@ -2,15 +2,18 @@ #define GUILLOTINE_DECAP_MIN_SHARP 7 // Minimum amount of sharpness for decapitation. Any less and it will just deal brute damage #define GUILLOTINE_ANIMATION_LENGTH 9 // How many deciseconds the animation is #define GUILLOTINE_BLADE_RAISED 1 -#define GUILLOTINE_BLADE_MOVING 2 -#define GUILLOTINE_BLADE_DROPPED 3 -#define GUILLOTINE_BLADE_SHARPENING 4 +#define GUILLOTINE_BLADE_RAISING 2 +#define GUILLOTINE_BLADE_DROPPING 3 +#define GUILLOTINE_BLADE_DROPPED 4 +#define GUILLOTINE_BLADE_SHARPENING 5 + #define GUILLOTINE_HEAD_OFFSET 16 // How much we need to move the player to center their head #define GUILLOTINE_LAYER_DIFF 1.2 // How much to increase/decrease a head when it's buckled/unbuckled #define GUILLOTINE_ACTIVATE_DELAY 30 // Delay for executing someone #define GUILLOTINE_WRENCH_DELAY 10 -#define GUILLOTINE_ACTION_INUSE 5 -#define GUILLOTINE_ACTION_WRENCH 6 + +#define GUILLOTINE_ACTION_INUSE 1 +#define GUILLOTINE_ACTION_WRENCH 2 /obj/structure/guillotine name = "guillotine" @@ -26,7 +29,7 @@ var/blade_sharpness = GUILLOTINE_BLADE_MAX_SHARP // How sharp the blade is var/kill_count = 0 var/force_clap = FALSE //You WILL clap if I want you to - var/current_action = 0 // What's currently happening to the guillotine + var/current_action = NONE// What's currently happening to the guillotine /obj/structure/guillotine/Initialize(mapload) LAZYINITLIST(buckled_mobs) @@ -51,6 +54,31 @@ msg += "
    " msg += "Someone appears to be strapped in. You can help them out, or you can harm them by activating the guillotine." . += "[msg]" + + +/obj/structure/guillotine/update_icon_state() + switch(blade_status) + if(GUILLOTINE_BLADE_DROPPED) + icon_state = "guillotine" + if(GUILLOTINE_BLADE_RAISED) + icon_state = "guillotine_raised" + if(GUILLOTINE_BLADE_RAISING) + icon_state = "guillotine_raise" + if(GUILLOTINE_BLADE_DROPPING) + icon_state = "guillotine_drop" + + +/obj/structure/guillotine/update_overlays() + . = ..() + switch(kill_count) + if(1) + . += mutable_appearance(icon, "guillotine_bloody_overlay") + if(2) + . += mutable_appearance(icon, "guillotine_bloodier_overlay") + if(3 to INFINITY) + . += mutable_appearance(icon, "guillotine_bloodiest_overlay") + + /obj/structure/guillotine/attack_hand(mob/user) // Currently being used by something @@ -58,12 +86,12 @@ return switch(blade_status) - if(GUILLOTINE_BLADE_MOVING) + if(GUILLOTINE_BLADE_RAISING, GUILLOTINE_BLADE_DROPPING) return if(GUILLOTINE_BLADE_DROPPED) add_fingerprint(user) - blade_status = GUILLOTINE_BLADE_MOVING - icon_state = "guillotine_raise" + blade_status = GUILLOTINE_BLADE_RAISING + update_icon(UPDATE_ICON_STATE) addtimer(CALLBACK(src, PROC_REF(raise_blade)), GUILLOTINE_ANIMATION_LENGTH) return if(GUILLOTINE_BLADE_RAISED) @@ -75,26 +103,28 @@ if(do_after(user, GUILLOTINE_ACTIVATE_DELAY, target = src) && blade_status == GUILLOTINE_BLADE_RAISED) add_fingerprint(user) - current_action = 0 - blade_status = GUILLOTINE_BLADE_MOVING - icon_state = "guillotine_drop" + current_action = NONE + blade_status = GUILLOTINE_BLADE_DROPPING + update_icon(UPDATE_ICON_STATE) playsound(src, 'sound/items/unsheath.ogg', 100, 1) addtimer(CALLBACK(src, PROC_REF(drop_blade), user), GUILLOTINE_ANIMATION_LENGTH - 2) // Minus two so we play the sound and decap faster else - current_action = 0 + current_action = NONE else add_fingerprint(user) unbuckle_all_mobs() else add_fingerprint(user) - blade_status = GUILLOTINE_BLADE_MOVING - icon_state = "guillotine_drop" + blade_status = GUILLOTINE_BLADE_DROPPING + update_icon(UPDATE_ICON_STATE) playsound(src, 'sound/items/unsheath.ogg', 100, 1) addtimer(CALLBACK(src, PROC_REF(drop_blade)), GUILLOTINE_ANIMATION_LENGTH) + /obj/structure/guillotine/proc/raise_blade() blade_status = GUILLOTINE_BLADE_RAISED - icon_state = "guillotine_raised" + update_icon(UPDATE_ICON_STATE) + /obj/structure/guillotine/proc/drop_blade(mob/user) if(has_buckled_mobs() && blade_sharpness) @@ -102,14 +132,14 @@ if(!H) blade_status = GUILLOTINE_BLADE_DROPPED - icon_state = "guillotine" + update_icon(UPDATE_ICON_STATE) return var/obj/item/organ/external/head/head = H.get_organ(BODY_ZONE_HEAD) if(QDELETED(head)) blade_status = GUILLOTINE_BLADE_DROPPED - icon_state = "guillotine" + update_icon(UPDATE_ICON_STATE) return playsound(src, 'sound/weapons/bladeslice.ogg', 100, 1) @@ -118,18 +148,8 @@ add_attack_logs(user, H, "beheaded with [src]") H.regenerate_icons() unbuckle_all_mobs() - kill_count += 1 - - var/blood_overlay = "bloody" - - if(kill_count == 2) - blood_overlay = "bloodier" - else if(kill_count > 2) - blood_overlay = "bloodiest" - - blood_overlay = "guillotine_" + blood_overlay + "_overlay" - overlays.Cut() - overlays += mutable_appearance(icon, blood_overlay) + kill_count++ + update_icon(UPDATE_OVERLAYS) if(force_clap) // The crowd is pleased @@ -147,7 +167,7 @@ blade_sharpness -= 1 blade_status = GUILLOTINE_BLADE_DROPPED - icon_state = "guillotine" + update_icon(UPDATE_ICON_STATE) /obj/structure/guillotine/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/whetstone)) @@ -185,13 +205,13 @@ return current_action = GUILLOTINE_ACTION_WRENCH if(!I.use_tool(src, user, GUILLOTINE_WRENCH_DELAY, volume = I.tool_volume)) - current_action = 0 + current_action = NONE return if(has_buckled_mobs()) to_chat(user, "Can't unfasten, someone's strapped in!") return - current_action = 0 + current_action = NONE to_chat(user, "You [anchored ? "un" : ""]secure [src].") anchored = !anchored playsound(src, 'sound/items/deconstruct.ogg', 50, 1) @@ -244,7 +264,8 @@ #undef GUILLOTINE_DECAP_MIN_SHARP #undef GUILLOTINE_ANIMATION_LENGTH #undef GUILLOTINE_BLADE_RAISED -#undef GUILLOTINE_BLADE_MOVING +#undef GUILLOTINE_BLADE_RAISING +#undef GUILLOTINE_BLADE_DROPPING #undef GUILLOTINE_BLADE_DROPPED #undef GUILLOTINE_BLADE_SHARPENING #undef GUILLOTINE_HEAD_OFFSET diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index a13532d1f0f..5dc13e56008 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -15,9 +15,9 @@ /obj/structure/inflatable name = "inflatable wall" desc = "An inflated membrane. Do not puncture." - density = 1 - anchored = 1 - opacity = 0 + density = TRUE + anchored = TRUE + opacity = FALSE max_integrity = 50 icon = 'icons/obj/inflatable.dmi' icon_state = "wall" @@ -39,20 +39,30 @@ else return FALSE + /obj/structure/inflatable/CanAtmosPass(turf/T) return !density -/obj/structure/inflatable/attack_hand(mob/user as mob) + +/obj/structure/inflatable/attackby(obj/item/I, mob/living/user, params) + if(I.sharp || is_type_in_typecache(I, GLOB.pointed_types)) + user.do_attack_animation(src, used_item = I) + deconstruct(FALSE) + return FALSE + return ..() + +/obj/structure/inflatable/attack_hand(mob/user) add_fingerprint(user) /obj/structure/inflatable/AltClick(mob/living/user) - if(!istype(user) || user.incapacitated() || user.restrained()) + if(!istype(user) || user.incapacitated()) to_chat(user, "You can't do that right now!") return if(!Adjacent(user)) return deconstruct(TRUE) + /obj/structure/inflatable/deconstruct(disassembled = TRUE) playsound(loc, 'sound/machines/hiss.ogg', 75, 1) if(!disassembled) @@ -62,17 +72,20 @@ 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_REF(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" set category = "Object" set src in oview(1) - if(usr.stat || usr.restrained()) + if(usr.incapacitated()) return deconstruct(TRUE) @@ -93,27 +106,24 @@ /obj/structure/inflatable/door //Based on mineral door code name = "inflatable door" - density = 1 - anchored = 1 - opacity = 0 - icon = 'icons/obj/inflatable.dmi' icon_state = "door_closed" + opacity = TRUE torn = /obj/item/inflatable/door/torn intact = /obj/item/inflatable/door - var/state = 0 //closed, 1 == open - var/isSwitchingStates = 0 + var/state_closed = TRUE + var/is_operating = FALSE -/obj/structure/inflatable/door/attack_ai(mob/user as mob) //those aren't machinery, they're just big fucking slabs of a mineral +/obj/structure/inflatable/door/attack_ai(mob/user) //those aren't machinery, they're just big fucking slabs of a mineral if(isAI(user)) //so the AI can't open it return else if(isrobot(user)) //but cyborgs can if(get_dist(user,src) <= 1) //not remotely though - return TryToSwitchState(user) + return try_to_operate(user) -/obj/structure/inflatable/door/attack_hand(mob/user as mob) - return TryToSwitchState(user) +/obj/structure/inflatable/door/attack_hand(mob/user) + return try_to_operate(user) /obj/structure/inflatable/door/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover) && mover.checkpass(PASS_OTHER_THINGS)) @@ -125,59 +135,45 @@ /obj/structure/inflatable/door/CanAtmosPass(turf/T) return !density -/obj/structure/inflatable/door/proc/TryToSwitchState(atom/user) - if(isSwitchingStates) + +/obj/structure/inflatable/door/proc/try_to_operate(atom/user) + if(is_operating) return if(ismob(user)) var/mob/M = user - if(world.time - user.last_bumped <= 60) - return //NOTE do we really need that? if(M.client) if(iscarbon(M)) var/mob/living/carbon/C = M if(!C.handcuffed) - add_fingerprint(user) - SwitchState() + operate() else - add_fingerprint(user) - SwitchState() - else if(istype(user, /obj/mecha)) - SwitchState() - -/obj/structure/inflatable/door/proc/SwitchState() - if(state) - Close() - else - Open() - air_update_turf(1) - -/obj/structure/inflatable/door/proc/Open() - isSwitchingStates = 1 - //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) - flick("door_opening",src) - sleep(10) - density = 0 - opacity = 0 - state = 1 - update_icon() - isSwitchingStates = 0 - -/obj/structure/inflatable/door/proc/Close() - isSwitchingStates = 1 - //playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 100, 1) - flick("door_closing",src) - sleep(10) - density = 1 - opacity = 0 - state = 0 - update_icon() - isSwitchingStates = 0 - -/obj/structure/inflatable/door/update_icon() - if(state) - icon_state = "door_open" + operate() + else if(ismecha(user)) + operate() + + +/obj/structure/inflatable/door/proc/operate() + is_operating = TRUE + if(state_closed) + flick("door_opening", src) else - icon_state = "door_closed" + flick("door_closing", src) + + sleep(1 SECONDS) + if(QDELETED(src)) + return + + state_closed = !state_closed + density = state_closed + set_opacity(state_closed) + update_icon(UPDATE_ICON_STATE) + air_update_turf(TRUE) + is_operating = FALSE + + +/obj/structure/inflatable/door/update_icon_state() + icon_state = "door_[state_closed ? "closed" : "open"]" + /obj/item/inflatable/torn name = "torn inflatable wall" @@ -206,6 +202,7 @@ item_state = "syringe_kit" max_combined_w_class = 21 w_class = WEIGHT_CLASS_NORMAL + can_hold = list(/obj/item/inflatable) /obj/item/storage/briefcase/inflatable/populate_contents() new /obj/item/inflatable/door(src) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index dc2567bc6a7..ed9614e9ad0 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -5,8 +5,8 @@ desc = "This is the alpha and omega of sanitation." icon = 'icons/obj/janitor.dmi' icon_state = "cart" - anchored = 0 - density = 1 + anchored = FALSE + density = TRUE container_type = OPENCONTAINER pull_push_speed_modifier = 1 //copypaste sorry @@ -32,14 +32,16 @@ QDEL_NULL(myreplacer) return ..() + /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) user.drop_transfer_item_to_loc(I, src) updateUsrDialog() to_chat(user, "You put [I] into [src].") - return + update_icon(UPDATE_OVERLAYS) + /obj/structure/janitorialcart/on_reagent_change() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/structure/janitorialcart/attackby(obj/item/I, mob/user, params) var/fail_msg = "There is already one of those in [src]." @@ -66,9 +68,8 @@ else if(istype(I, /obj/item/reagent_containers/spray/cleaner)) if(!myspray) add_fingerprint(user) - put_in_cart(I, user) myspray=I - update_icon() + put_in_cart(I, user) else to_chat(user, fail_msg) else if(istype(I, /obj/item/lightreplacer)) @@ -81,19 +82,18 @@ else if(istype(I, /obj/item/caution)) if(signs < max_signs) add_fingerprint(user) - put_in_cart(I, user) signs++ - update_icon() + put_in_cart(I, user) else to_chat(user, "[src] can't hold any more signs.") - else if(istype(I, /obj/item/crowbar)) + else if(I.tool_behaviour == TOOL_CROWBAR) user.visible_message("[user] begins to empty the contents of [src].") if(do_after(user, 30 * I.toolspeed * gettoolspeedmod(user), target = src)) add_fingerprint(user) to_chat(usr, "You empty the contents of [src]'s bucket onto the floor.") reagents.reaction(src.loc) src.reagents.clear_reagents() - else if(istype(I, /obj/item/wrench)) + else if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) if(!anchored && !isinspace()) playsound(src.loc, I.usesound, 50, 1) @@ -176,26 +176,26 @@ WARNING("Signs ([signs]) didn't match contents") signs = 0 - update_icon() + update_icon(UPDATE_OVERLAYS) updateUsrDialog() -/obj/structure/janitorialcart/update_icon() - overlays = null +/obj/structure/janitorialcart/update_overlays() + . = ..() if(mybag) - overlays += "cart_garbage" + . += "cart_garbage" if(mymop) - overlays += "cart_mop" + . += "cart_mop" if(myspray) - overlays += "cart_spray" + . += "cart_spray" if(myreplacer) - overlays += "cart_replacer" + . += "cart_replacer" if(signs) - overlays += "cart_sign[signs]" + . += "cart_sign[signs]" if(reagents.total_volume > 0) var/image/reagentsImage = image(icon,src,"cart_reagents0") reagentsImage.alpha = 150 - switch((reagents.total_volume/reagents.maximum_volume)*100) + switch((reagents.total_volume / reagents.maximum_volume) * 100) if(1 to 25) reagentsImage.icon_state = "cart_reagents1" if(26 to 50) @@ -205,4 +205,5 @@ if(76 to 100) reagentsImage.icon_state = "cart_reagents4" reagentsImage.icon += mix_color_from_reagents(reagents.reagent_list) - add_overlay(reagentsImage) + . += reagentsImage + diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 0245e372f36..9efb35006f1 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -11,7 +11,7 @@ max_integrity = 200 /obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/wrench)) + if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) if(anchored) to_chat(user, "You unwrench [src] from the floor.") @@ -53,7 +53,7 @@ ..() /obj/structure/kitchenspike/attackby(obj/item/grab/G, mob/user) - if(istype(G, /obj/item/crowbar)) + if(G.tool_behaviour == TOOL_CROWBAR) if(!has_buckled_mobs()) playsound(loc, G.usesound, 100, 1) if(do_after(user, 20 * G.toolspeed * gettoolspeedmod(user), target = src)) diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm index cb093c9521a..de42568a598 100644 --- a/code/game/objects/structures/ladders.dm +++ b/code/game/objects/structures/ladders.dm @@ -14,11 +14,11 @@ if (up) src.up = up up.down = src - up.update_icon() + up.update_icon(UPDATE_ICON_STATE) if (down) src.down = down down.up = src - down.update_icon() + down.update_icon(UPDATE_ICON_STATE) return INITIALIZE_HINT_LATELOAD /obj/structure/ladder/Destroy(force) @@ -35,7 +35,7 @@ for(var/obj/structure/ladder/L in locate(T.x, T.y, T.z - 1)) down = L L.up = src // Don't waste effort looping the other way - L.update_icon() + L.update_icon(UPDATE_ICON_STATE) break if(!up) for (var/obj/structure/ladder/L in locate(T.x, T.y, T.z + 1)) @@ -44,7 +44,7 @@ L.update_icon() break - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/ladder/proc/disconnect() if(up && up.down == src) @@ -55,7 +55,7 @@ down.update_icon() up = down = null -/obj/structure/ladder/update_icon() +/obj/structure/ladder/update_icon_state() if(up && down) icon_state = "ladder11" @@ -153,7 +153,7 @@ /obj/structure/ladder/unbreakable/LateInitialize() // Override the parent to find ladders based on being height-linked if(!id || (up && down)) - update_icon() + update_icon(UPDATE_ICON_STATE) return for(var/O in GLOB.ladders) @@ -163,17 +163,17 @@ if(!down && L.height == height - 1) down = L L.up = src - L.update_icon() + L.update_icon(UPDATE_ICON_STATE) if (up) break // break if both our connections are filled else if(!up && L.height == height + 1) up = L L.down = src - L.update_icon() + L.update_icon(UPDATE_ICON_STATE) if (down) break // break if both our connections are filled - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/ladder/unbreakable/dive_point/buoy name = "diving point buoy" @@ -198,5 +198,5 @@ . = ..() set_light(light_range, light_power) //magical glowing anchor -/obj/structure/ladder/unbreakable/dive_point/update_icon() +/obj/structure/ladder/unbreakable/dive_point/update_icon_state() return diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index 62a3c559d0b..653e180cc23 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -26,37 +26,40 @@ if(in_range(user, src)) . += "[bicon(src)] [src] contains [reagents.total_volume] units of water left." -/obj/structure/mopbucket/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/structure/mopbucket/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/mop)) - var/obj/item/mop/m = W - if(m.reagents.total_volume < m.reagents.maximum_volume) + var/obj/item/mop/mop = W + if(mop.reagents.total_volume < mop.reagents.maximum_volume) add_fingerprint(user) - m.wet_mop(src, user) + mop.wet_mop(src, user) return if(!mymop) add_fingerprint(user) - m.janicart_insert(user, src) + mop.mopbucket_insert(user, src) return to_chat(user, "Theres already a mop in the mopbucket.") return return ..() + /obj/structure/mopbucket/proc/put_in_cart(obj/item/mop/I, mob/user) user.drop_transfer_item_to_loc(I, src) to_chat(user, "You put [I] into [src].") - return + update_icon(UPDATE_OVERLAYS) + /obj/structure/mopbucket/on_reagent_change() - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/structure/mopbucket/update_icon() - overlays.Cut() + +/obj/structure/mopbucket/update_overlays() + . = ..() if(mymop) - overlays += image(icon,"mopbucket_mop") + . += "mopbucket_mop" if(reagents.total_volume > 0) var/image/reagentsImage = image(icon, src, "mopbucket_reagents0") reagentsImage.alpha = 150 - switch((reagents.total_volume/reagents.maximum_volume)*100) + switch((reagents.total_volume / reagents.maximum_volume) * 100) if(1 to 25) reagentsImage.icon_state = "mopbucket_reagents1" if(26 to 50) @@ -66,7 +69,8 @@ if(76 to 100) reagentsImage.icon_state = "mopbucket_reagents4" reagentsImage.icon += mix_color_from_reagents(reagents.reagent_list) - add_overlay(reagentsImage) + . += reagentsImage + /obj/structure/mopbucket/attack_hand(mob/living/user) . = ..() @@ -75,5 +79,5 @@ user.put_in_hands(mymop, ignore_anim = FALSE) to_chat(user, "You take [mymop] from [src].") mymop = null - update_icon() - return + update_icon(UPDATE_OVERLAYS) + diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index c88387ee183..d0c22b44715 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -139,12 +139,18 @@ return ..() -/obj/structure/morgue/wirecutter_act(mob/user) - if(name != initial(name)) - to_chat(user, span_notice("You cut the tag off the morgue.")) - name = initial(name) - update_icon(UPDATE_OVERLAYS) - return TRUE +/obj/structure/morgue/wirecutter_act(mob/user, obj/item/I) + if(name == initial(name)) + return FALSE + + . = TRUE + + if(!I.use_tool(src, user, 0, volume = I.tool_volume)) + return . + + to_chat(user, span_notice("You cut the tag off the morgue.")) + name = initial(name) + update_icon(UPDATE_OVERLAYS) /obj/structure/morgue/attack_hand(mob/user) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 4d05534d468..737ce80494f 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -25,6 +25,7 @@ break . += image(src.icon, icon_state = "[src.icon_state][I]") + //attaching papers!! /obj/structure/noticeboard/attackby(obj/item/item, mob/user, params) if(istype(item, /obj/item/paper)) diff --git a/code/game/objects/structures/pit.dm b/code/game/objects/structures/pit.dm index 99b778479b3..9b6ca752a84 100644 --- a/code/game/objects/structures/pit.dm +++ b/code/game/objects/structures/pit.dm @@ -45,9 +45,11 @@ return ..() -/obj/structure/pit/update_icon() + +/obj/structure/pit/update_icon_state() icon_state = "pit[open][icon_floor_type]" + /obj/structure/pit/Initialize(mapload) . = ..() if(mapload && !open) @@ -64,12 +66,13 @@ icon_floor_type = "sand" if(istype(loc, /turf/simulated/floor/grass)) icon_floor_type = "mud" - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/pit/proc/take_contents() var/itemcount = 0 for(var/atom/movable/A in loc) - if(A.density || A.anchored || A == src || open) continue + if(A.density || A.anchored || A == src || open) + continue A.forceMove(src) itemcount += 1 if(itemcount >= storage_capacity) @@ -87,7 +90,7 @@ if(istype(A, /obj/structure/closet)) for(var/mob/living/carbon/M in A.contents) M.update_tint() - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/pit/proc/close(var/user) name = "mound" @@ -108,7 +111,7 @@ if(istype(A, /obj/structure/closet)) for(var/mob/living/carbon/M in A.contents) M.overlay_fullscreen("tint", /obj/screen/fullscreen/blind) - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/pit/remove_air(amount) return 0 diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 06cd6627178..f2f64492a6e 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -112,7 +112,8 @@ GLOBAL_LIST_EMPTY(safes) /obj/structure/safe/examine_status(mob/user) return -/obj/structure/safe/update_icon() + +/obj/structure/safe/update_icon_state() if(open) if(broken) icon_state = "[initial(icon_state)]-open-broken" @@ -124,17 +125,15 @@ GLOBAL_LIST_EMPTY(safes) else icon_state = initial(icon_state) - var/list/overlays_to_cut = list(drill_overlay) - if(!drill_timer) - overlays_to_cut += progress_bar - - cut_overlay(overlays_to_cut) +/obj/structure/safe/update_overlays() + . = ..() if(istype(drill, /obj/item/thermal_drill)) var/drill_icon = istype(drill, /obj/item/thermal_drill/diamond_drill) ? "d" : "h" var/state = "[initial(icon_state)]_[drill_icon]-drill-[drill_timer ? "on" : "off"]" drill_overlay = image(icon = 'icons/effects/drill.dmi', icon_state = state, pixel_x = drill_x_offset, pixel_y = drill_y_offset) - add_overlay(drill_overlay) + . += drill_overlay + /obj/structure/safe/attack_ghost(mob/user) if(..() || drill) @@ -376,7 +375,7 @@ GLOBAL_LIST_EMPTY(safes) hide(T.intact) /obj/structure/safe/floor/hide(intact) - invisibility = intact ? INVISIBILITY_ABSTRACT : 0 + invisibility = intact ? INVISIBILITY_MAXIMUM : 0 /** * # Safe Internals diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index c841de19414..30fe46a8e8a 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -5,8 +5,28 @@ density = 0 layer = 3.5 max_integrity = 100 + blocks_emissive = EMISSIVE_BLOCK_GENERIC + var/does_emissive = FALSE armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + +/obj/structure/sign/Initialize(mapload) + . = ..() + if(does_emissive) + update_icon(UPDATE_OVERLAYS) + set_light(1, LIGHTING_MINIMUM_POWER) + + +/obj/structure/sign/update_overlays() + . = ..() + + underlays.Cut() + if(!does_emissive) + return + + underlays += emissive_appearance(icon,"[icon_state]_lightmask") + + /obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) @@ -17,6 +37,7 @@ if(BURN) playsound(loc, 'sound/items/welder.ogg', 80, TRUE) + /obj/structure/sign/screwdriver_act(mob/user, obj/item/I) if(istype(src, /obj/structure/sign/double)) return @@ -42,33 +63,36 @@ resistance_flags = FLAMMABLE var/sign_state = "" -/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(istype(tool, /obj/item/screwdriver) && isturf(user.loc)) - var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel") - if(direction == "Cancel") - return - if(QDELETED(src)) - return - var/obj/structure/sign/S = new(user.loc) - switch(direction) - if("North") - S.pixel_y = 32 - if("East") - S.pixel_x = 32 - if("South") - S.pixel_y = -32 - if("West") - S.pixel_x = -32 - else - return - S.name = name - S.desc = desc - S.icon_state = sign_state - src.transfer_fingerprints_to(S) - to_chat(user, "You fasten \the [S] with your [tool].") - qdel(src) - else - return ..() + +/obj/item/sign/screwdriver_act(mob/living/user, obj/item/I) + if(!isturf(loc)) + return + + var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel") + if(direction == "Cancel") + return TRUE // These gotta be true or we stab the sign + if(QDELETED(src)) + return TRUE // Unsure about this, but stabbing something that doesnt exist seems like a bad idea + + var/obj/structure/sign/sign = new(loc) + switch(direction) + if("North") + sign.pixel_y = 32 + if("East") + sign.pixel_x = 32 + if("South") + sign.pixel_y = -32 + if("West") + sign.pixel_x = -32 + else + return TRUE // We dont want to stab it or place it, so we return + sign.name = name + sign.desc = desc + sign.icon_state = sign_state + to_chat(user, span_notice("You fasten [sign] with your [I].")) + qdel(src) + return TRUE + /obj/structure/sign/double/map name = "station map" @@ -212,11 +236,15 @@ name = "\improper barber shop sign" desc = "A spinning sign indicating a barbershop is near." icon_state = "barber" + does_emissive = TRUE + blocks_emissive = FALSE /obj/structure/sign/chinese name = "\improper chinese restaurant sign" desc = "A glowing dragon invites you in." icon_state = "chinese" + does_emissive = TRUE + blocks_emissive = FALSE /obj/structure/sign/science name = "\improper SCIENCE!" diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 8ad8842a508..eb704a4f139 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -409,15 +409,11 @@ var/lit = 0 layer = EDGED_TURF_LAYER -/obj/structure/statue/unknown/Destroy() - return ..() -/obj/structure/statue/unknown/update_icon() - if(lit) - lit = 1 - icon_state = "unknown_lit" - else - icon_state = "unknown" +/obj/structure/statue/unknown/update_icon_state() + icon_state = "unknown[lit ? "_lit" : ""]" + + /obj/structure/statue/unknown/attackby(obj/item/W, mob/user, params) if(is_hot(W)) @@ -425,29 +421,33 @@ return return ..() + /obj/structure/statue/unknown/welder_act(mob/user, obj/item/I) . = TRUE if(I.tool_use_check(user, 0)) light(span_notice("[user] casually lights the [name] with [I], what a badass.")) + /obj/structure/statue/unknown/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) if(!lit) light() return ..() + /obj/structure/statue/unknown/proc/light(show_message) if(!lit) - lit = 1 + lit = TRUE if(show_message) usr.visible_message(show_message) set_light(CANDLE_LUM) - update_icon() + update_icon(UPDATE_ICON_STATE) + /obj/structure/statue/unknown/attack_hand(mob/user) if(lit) user.visible_message(span_notice("[user] snuffs out [src].")) - lit = 0 - update_icon() + lit = FALSE + update_icon(UPDATE_ICON_STATE) set_light(0) //////////////////////////////// diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index eaeabd374a5..5f44986b557 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -149,16 +149,18 @@ forceMove(RH) RH.held = src -/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location) - ..() - if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src))) - if(!ishuman(usr) || usr.incapacitated()) - return - if(has_buckled_mobs()) - return 0 - usr.visible_message("[usr] collapses \the [name].", "You collapse \the [name].") + +/obj/structure/bed/roller/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(!has_buckled_mobs() && over_object == usr && ishuman(usr) && !usr.incapacitated() && usr.Adjacent(src)) + usr.visible_message( + span_notice("[usr] collapses [src]."), + span_notice("You collapse [src]."), + ) new folded(get_turf(src)) qdel(src) + return FALSE + return ..() + /obj/item/roller/holo name = "holo stretcher" diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index c7895e40f5c..0af76ed1295 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -73,11 +73,9 @@ new buildstacktype(loc, buildstackamount) ..() -/obj/structure/chair/MouseDrop(over_object, src_location, over_location) - . = ..() - if(over_object == usr && Adjacent(usr)) - if(!item_chair || has_buckled_mobs() || anchored) - return + +/obj/structure/chair/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(over_object == usr && ishuman(usr) && item_chair && !anchored && !has_buckled_mobs() && usr.Adjacent(src)) if(usr.incapacitated()) to_chat(usr, span_warning("You can't do that right now!")) return @@ -87,13 +85,18 @@ if(usr.get_active_hand() && usr.get_inactive_hand()) to_chat(usr, span_warning("You try to grab the chair, but your hands are already full!")) return - if(!ishuman(usr)) - return - usr.visible_message(span_notice("[usr] grabs \the [src]."), span_notice("You grab \the [src].")) - var/C = new item_chair(drop_location()) - usr.put_in_hands(C, ignore_anim = FALSE) - transfer_fingerprints_to(C) + usr.visible_message( + span_notice("[usr] grabs [src]."), + span_notice("You grab [src]."), + ) + var/new_chair = new item_chair(drop_location()) + transfer_fingerprints_to(new_chair) + usr.put_in_hands(new_chair, ignore_anim = FALSE) qdel(src) + return FALSE + + return ..() + /obj/structure/chair/attack_tk(mob/user) if(!anchored || has_buckled_mobs() || !isturf(user.loc)) @@ -101,53 +104,65 @@ else rotate() + /obj/structure/chair/proc/handle_rotation(direction) handle_layer() if(has_buckled_mobs()) - for(var/m in buckled_mobs) - var/mob/living/buckled_mob = m + for(var/mob/living/buckled_mob as anything in buckled_mobs) buckled_mob.setDir(direction) + /obj/structure/chair/proc/handle_layer() if(has_buckled_mobs() && dir == NORTH) layer = ABOVE_MOB_LAYER else layer = OBJ_LAYER + /obj/structure/chair/post_buckle_mob(mob/living/M) . = ..() handle_layer() + /obj/structure/chair/post_unbuckle_mob() . = ..() handle_layer() + /obj/structure/chair/setDir(newdir) ..() handle_rotation(newdir) -/obj/structure/chair/verb/rotate() - set name = "Rotate Chair" - set category = "Object" - set src in oview(1) - if(CONFIG_GET(flag/ghost_interaction)) - add_fingerprint(usr) - setDir(turn(dir, 90)) - handle_rotation() - return +/obj/structure/chair/examine(mob/user) + . = ..() + . += span_info("You can Alt-Click [src] to rotate it.") - if(usr.incapacitated()) - return - add_fingerprint(usr) +/obj/structure/chair/proc/rotate(mob/living/user) + if(user) + if(isobserver(user)) + if(!CONFIG_GET(flag/ghost_interaction)) + return FALSE + else if(!isliving(user) || user.incapacitated() || user.restrained() || !Adjacent(user)) + return FALSE + setDir(turn(dir, 90)) handle_rotation() + return TRUE + + +/obj/structure/chair/AltClick(mob/living/user) + rotate(user) + + +/obj/structure/chair/verb/rotate_chair() + set name = "Rotate Chair" + set category = "Object" + set src in oview(1) + + rotate(usr) -/obj/structure/chair/AltClick(mob/user) - if(!Adjacent(user)) - return - rotate() // CHAIR TYPES @@ -288,7 +303,7 @@ anchored = TRUE item_chair = null comfort = 0.6 - var/image/armrest = null + var/mutable_appearance/armrest /obj/structure/chair/sofa/Initialize(mapload) armrest = GetArmrest() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 186ec4ea419..9364329513e 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -34,52 +34,72 @@ var/buildstackamount = 1 var/framestackamount = 2 var/deconstruction_ready = TRUE - var/flipped = 0 + var/flip_sound = 'sound/machines/wooden_closet_close.ogg' + var/flipped = FALSE + /// Can this table be flipped? + var/can_be_flipped = TRUE + /obj/structure/table/Initialize(mapload) . = ..() if(flipped) - update_icon() + update_icon(UPDATE_ICON_STATE) + /obj/structure/table/examine(mob/user) . = ..() . += deconstruction_hints(user) + if(can_be_flipped) + if(flipped) + . += span_info("Alt-Shift-Click to right the table again.") + else + . += span_info("Alt-Shift-Click to flip over the table.") + /obj/structure/table/proc/deconstruction_hints(mob/user) return "The top is screwed on, but the main bolts are also visible." -/obj/structure/table/update_icon() + +/obj/structure/table/update_icon(updates = ALL) + . = ..() + update_smoothing() + + +/obj/structure/table/update_icon_state() if(smooth && !flipped) icon_state = "" - queue_smooth(src) - queue_smooth_neighbors(src) if(flipped) - clear_smooth_overlays() - var/type = 0 var/subtype = null for(var/direction in list(turn(dir,90), turn(dir,-90)) ) - var/obj/structure/table/T = locate(/obj/structure/table,get_step(src,direction)) - if(T && T.flipped) + var/obj/structure/table/other_table = locate(/obj/structure/table,get_step(src,direction)) + if(other_table?.flipped) type++ if(type == 1) subtype = direction == turn(dir,90) ? "-" : "+" var/base = "table" if(istype(src, /obj/structure/table/wood)) base = "wood" - if(istype(src, /obj/structure/table/reinforced)) + else if(istype(src, /obj/structure/table/reinforced)) base = "rtable" - if(istype(src, /obj/structure/table/wood/poker)) + else if(istype(src, /obj/structure/table/wood/poker)) base = "poker" - if(istype(src, /obj/structure/table/wood/fancy)) + else if(istype(src, /obj/structure/table/wood/fancy)) base = "fancy" - if(istype(src, /obj/structure/table/wood/fancy/black)) + else if(istype(src, /obj/structure/table/wood/fancy/black)) base = "fancyblack" - icon_state = "[base]flip[type][type == 1 ? subtype : ""]" - return 1 + +/obj/structure/table/proc/update_smoothing() + if(smooth) + queue_smooth(src) + queue_smooth_neighbors(src) + + if(flipped) + clear_smooth_overlays() + /obj/structure/table/narsie_act() new /obj/structure/table/wood(loc) @@ -117,28 +137,29 @@ var/mob/living/user = AM clumse_stuff(user) + /obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0) if(height == 0) - return 1 + return TRUE if(istype(mover,/obj/item/projectile)) - return (check_cover(mover,target)) + return check_cover(mover,target) if(ismob(mover)) - var/mob/M = mover + var/mob/living/M = mover if(M.flying) - return 1 + return TRUE if(istype(mover) && mover.checkpass(PASSTABLE)) - return 1 + return TRUE if(mover.throwing) - return 1 + return TRUE + if(length(get_atoms_of_type(get_turf(mover), /obj/structure/table) - mover)) + var/obj/structure/table/other_table = locate(/obj/structure/table) in get_turf(mover) + if(!other_table.flipped) + return TRUE if(flipped) if(get_dir(loc, target) == dir) return !density - else - return 1 - var/obj/structure/table/S = locate(/obj/structure/table) in get_turf(mover) - if(S?.flipped == 0) - return 1 - return 0 + return TRUE + return FALSE /obj/structure/table/CanPathfindPass(obj/item/card/id/ID, dir, caller, no_id = FALSE) @@ -157,53 +178,48 @@ * * from - Where the projectile is located. */ /obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from) - var/turf/cover = flipped ? get_turf(src) : get_step(loc, get_dir(from, loc)) - if(get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close - return 1 - if(get_turf(P.original) == cover) - var/chance = 20 - if(ismob(P.original)) - var/mob/M = P.original - if(M.lying) - chance += 20 //Lying down lets you catch less bullets - if(flipped) - if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets - chance += 20 - else - return 1 //But only from one side - if(prob(chance)) - obj_integrity -= P.damage/2 - if(obj_integrity > 0) - visible_message("[P] hits \the [src]!") - return 0 - else - visible_message("[src] breaks down!") - deconstruct(FALSE) - return 1 - return 1 - -/obj/structure/table/CheckExit(atom/movable/O, turf/target) - if(istype(O) && O.checkpass(PASSTABLE)) - return 1 - if(flipped) - if(get_dir(loc, target) == dir) - return !density - else - return 1 - return 1 + . = TRUE -/obj/structure/table/MouseDrop_T(obj/O, mob/user) - ..() - if((!( istype(O, /obj/item) ) || user.get_active_hand() != O)) - return + if(!flipped) + return . + + if(in_range(P.starting, loc)) // Tables won't help you if people are THIS close + return . + + var/proj_dir = get_dir(from, loc) + var/block_dir = get_dir(get_step(loc, dir), loc) + var/full_protection = (proj_dir & block_dir) + var/half_protection = ((proj_dir == get_clockwise_dir(block_dir)) || (proj_dir == get_anticlockwise_dir(block_dir))) + + if(!full_protection && !half_protection) // Back/side shots may pass + return . + + if(prob(half_protection ? 40 : 60)) + return FALSE // Blocked + + +/obj/structure/table/CheckExit(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSTABLE)) + return TRUE + if(flipped && get_dir(loc, target) == dir) + return !density + return TRUE + + +/obj/structure/table/MouseDrop_T(obj/dropping, mob/user, params) + if(..()) + return TRUE + if(!isitem(dropping) || user.get_active_hand() != dropping) + return FALSE if(isrobot(user)) - return - if(!user.drop_from_active_hand()) - return - if(O.loc != src.loc) + return FALSE + if(!user.drop_item_ground(dropping)) + return FALSE + if(dropping.loc != loc) add_fingerprint(user) - step(O, get_dir(O, src)) - return + step(dropping, get_dir(dropping, src)) + return TRUE + /obj/structure/table/proc/tablepush(obj/item/grab/G, mob/user) if(HAS_TRAIT(user, TRAIT_PACIFISM) || GLOB.pacifism_after_gt) @@ -232,6 +248,7 @@ return TRUE qdel(G) + /obj/structure/table/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/grab)) add_fingerprint(user) @@ -269,6 +286,7 @@ deconstruct(TRUE) TOOL_DISMANTLE_SUCCESS_MESSAGE + /obj/structure/table/wrench_act(mob/user, obj/item/I) if(flags & NODECONSTRUCT) return @@ -282,6 +300,7 @@ deconstruct(TRUE, 1) TOOL_DISMANTLE_SUCCESS_MESSAGE + /obj/structure/table/deconstruct(disassembled = TRUE, wrench_disassembly = 0) if(!(flags & NODECONSTRUCT)) var/turf/T = get_turf(src) @@ -292,119 +311,113 @@ new framestack(T, framestackamount) qdel(src) + /obj/structure/table/proc/straight_table_check(direction) - var/obj/structure/table/T - for(var/angle in list(-90,90)) - T = locate() in get_step(loc,turn(direction,angle)) - if(T && !T.flipped) - return 0 - T = locate() in get_step(loc,direction) - if(!T || T.flipped) - return 1 - if(istype(T,/obj/structure/table/reinforced/)) - if(!T.deconstruction_ready) - return 0 - return T.straight_table_check(direction) + var/obj/structure/table/check_table + for(var/angle in list(-90, 90)) + check_table = locate() in get_step(loc, turn(direction, angle)) + if(check_table && !check_table.flipped) + return FALSE + check_table = locate() in get_step(loc, direction) + if(!check_table || check_table.flipped) + return TRUE + if(istype(check_table, /obj/structure/table/reinforced) && !check_table.deconstruction_ready) + return FALSE + return check_table.straight_table_check(direction) -/obj/structure/table/verb/do_flip() - set name = "Flip table" - set desc = "Flips a non-reinforced table" - set category = null - set src in oview(1) - if(!can_touch(usr) || ismouse(usr)) - return +/obj/structure/table/AltShiftClick(mob/user) + actual_flip(user) - if(!flip(get_cardinal_dir(usr,src))) - to_chat(usr, "It won't budge.") - return - add_fingerprint(usr) - usr.visible_message("[usr] flips \the [src]!") +/obj/structure/table/verb/do_flip() + set name = "Flip/Unflip table" + set desc = "Flips or unflips a table" + set category = null + set src in oview(1) + actual_flip(usr) - if(climbable) - structure_shaken() - return +/obj/structure/table/proc/actual_flip(mob/living/user) + if(!can_be_flipped || !can_touch(user)) + return FALSE -/obj/structure/table/proc/do_put() - set name = "Put table back" - set desc = "Puts flipped table back" - set category = "Object" - set src in oview(1) + if(!flipped) + if(!flip(get_cardinal_dir(user, src))) + to_chat(user, span_notice("It won't budge.")) + return - if(!can_touch(usr) || ismouse(usr)) - return + user.visible_message("[user] flips \the [src]!") - if(!unflip()) - to_chat(usr, "It won't budge.") - return + if(climbable) + structure_shaken() + else + if(!unflip()) + to_chat(user, span_notice("It won't budge.")) /obj/structure/table/proc/flip(direction) if(flipped) - return 0 + return FALSE - if( !straight_table_check(turn(direction,90)) || !straight_table_check(turn(direction,-90)) ) - return 0 - - verbs -=/obj/structure/table/verb/do_flip - verbs +=/obj/structure/table/proc/do_put + if(!straight_table_check(turn(direction,90)) || !straight_table_check(turn(direction,-90))) + return FALSE var/list/targets = list(get_step(src,dir),get_step(src,turn(dir, 45)),get_step(src,turn(dir, -45))) - for(var/atom/movable/A in get_turf(src)) - if(!A.anchored) - spawn(0) - A.throw_at(pick(targets),1,1) + for(var/atom/movable/thing in get_turf(src)) + if(!thing.anchored) + INVOKE_ASYNC(thing, TYPE_PROC_REF(/atom/movable, throw_at), pick(targets), 1, 1) dir = direction if(dir != NORTH) layer = 5 - flipped = 1 + flipped = TRUE smooth = SMOOTH_FALSE flags |= ON_BORDER - for(var/D in list(turn(direction, 90), turn(direction, -90))) - if(locate(/obj/structure/table,get_step(src,D))) - var/obj/structure/table/T = locate(/obj/structure/table,get_step(src,D)) - T.flip(direction) - update_icon() + playsound(loc, flip_sound, 100, TRUE) + + for(var/check_dir in list(turn(direction, 90), turn(direction, -90))) + var/obj/structure/table/other_table = locate(/obj/structure/table, get_step(src, check_dir)) + if(other_table) + other_table.flip(direction) + update_icon(UPDATE_ICON_STATE) creates_cover = FALSE if(isturf(loc)) REMOVE_TRAIT(loc, TRAIT_TURF_COVERED, UNIQUE_TRAIT_SOURCE(src)) - return 1 + return TRUE + /obj/structure/table/proc/unflip() if(!flipped) - return 0 + return FALSE - var/can_flip = 1 - for(var/mob/A in oview(src,0))//loc) - if(istype(A)) - can_flip = 0 + var/can_flip = TRUE + for(var/mob/check in oview(src, 0)) + can_flip = FALSE + break if(!can_flip) - return 0 - - verbs -=/obj/structure/table/proc/do_put - verbs +=/obj/structure/table/verb/do_flip + return FALSE layer = initial(layer) - flipped = 0 + flipped = FALSE smooth = initial(smooth) flags &= ~ON_BORDER - for(var/D in list(turn(dir, 90), turn(dir, -90))) - if(locate(/obj/structure/table,get_step(src,D))) - var/obj/structure/table/T = locate(/obj/structure/table,get_step(src,D)) - T.unflip() + playsound(loc, flip_sound, 100, TRUE) + + for(var/check_dir in list(turn(dir, 90), turn(dir, -90))) + var/obj/structure/table/other_table = locate(/obj/structure/table, get_step(src, check_dir)) + if(other_table) + other_table.unflip() dir = initial(dir) - update_icon() + update_icon(UPDATE_ICON_STATE) creates_cover = TRUE if(isturf(loc)) ADD_TRAIT(loc, TRAIT_TURF_COVERED, UNIQUE_TRAIT_SOURCE(src)) - return 1 + return TRUE /* @@ -433,25 +446,30 @@ qdel(i) . = ..() + /obj/structure/table/glass/Crossed(atom/movable/AM, oldloc) . = ..() if(flags & NODECONSTRUCT) return if(!isliving(AM)) return + + var/mob/living/check = AM + if(check.incorporeal_move || check.flying || check.floating) + return + // Don't break if they're just flying past if(AM.throwing) addtimer(CALLBACK(src, PROC_REF(throw_check), AM), 5) else check_break(AM) + /obj/structure/table/glass/proc/throw_check(mob/living/M) if(M.loc == get_turf(src)) check_break(M) /obj/structure/table/glass/proc/check_break(mob/living/M) - if(M.flying || M.incorporeal_move) - return if(has_gravity(M) && M.mob_size > MOB_SIZE_SMALL) table_shatter(M) @@ -628,9 +646,8 @@ /obj/structure/table/reinforced/flip(direction) if(!deconstruction_ready) - return 0 - else - return ..() + return FALSE + return ..() /obj/structure/table/reinforced/welder_act(mob/user, obj/item/I) . = TRUE @@ -683,15 +700,15 @@ icon_state = "tray" buildstack = /obj/item/stack/sheet/mineral/titanium buildstackamount = 2 + can_be_flipped = FALSE var/list/typecache_can_hold = list(/mob, /obj/item) var/list/held_items = list() /obj/structure/table/tray/Initialize() . = ..() - 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) @@ -717,10 +734,26 @@ continue held.forceMove(NewLoc) + +/obj/structure/table/tray/can_be_pulled(user, force, show_message) + var/atom/movable/puller = user + if(loc != puller.loc) + held_items -= puller.UID() + if(isliving(user)) + var/mob/living/M = user + if(M.UID() in held_items) + return FALSE + return ..() + + /obj/structure/table/tray/item_placed(atom/movable/item) . = ..() if(is_type_in_typecache(item, typecache_can_hold)) held_items += item.UID() + if(isliving(item)) + var/mob/living/M = item + if(M.pulling == src) + M.stop_pulling() /obj/structure/table/tray/deconstruct(disassembled = TRUE, wrench_disassembly = 0) if(!(flags & NODECONSTRUCT)) @@ -758,17 +791,17 @@ . = ..() . += "It's held together by a couple of bolts." + /obj/structure/rack/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) - return 1 - if(density == 0) //Because broken racks -Agouri |TODO: SPRITE!| - return 1 + return TRUE + if(!density) //Because broken racks -Agouri |TODO: SPRITE!| + return TRUE if(istype(mover) && mover.checkpass(PASSTABLE)) - return 1 + return TRUE if(mover.throwing) - return 1 - else - return 0 + return TRUE + return FALSE /obj/structure/rack/CanPathfindPass(obj/item/card/id/ID, dir, caller, no_id = FALSE) @@ -778,23 +811,25 @@ . = . || mover.checkpass(PASSTABLE) -/obj/structure/rack/MouseDrop_T(obj/item/O, mob/user) - if((!(istype(O)) || user.get_active_hand() != O)) - return +/obj/structure/rack/MouseDrop_T(obj/item/dropping, mob/user, params) + . = FALSE + if((!isitem(dropping)) || user.get_active_hand() != dropping) + return . if(isrobot(user)) - return - if(O.loc != src.loc) - if(user.transfer_item_to_loc(O, src.loc)) - add_fingerprint(user) + return . + if(dropping.loc != loc && user.transfer_item_to_loc(dropping, src.loc)) + add_fingerprint(user) + return TRUE + -/obj/structure/rack/attackby(obj/item/W, mob/user, params) +/obj/structure/rack/attackby(obj/item/I, mob/user, params) if(isrobot(user)) return if(user.a_intent == INTENT_HARM) return ..() - if(!(W.flags & ABSTRACT)) - if(user.transfer_item_to_loc(W, src.loc)) - add_fingerprint(user) + if(!(I.flags & ABSTRACT) && user.transfer_item_to_loc(I, loc)) + add_fingerprint(user) + /obj/structure/rack/wrench_act(mob/user, obj/item/I) . = TRUE @@ -842,46 +877,45 @@ desc = "A gun rack for storing guns." icon_state = "gunrack" -/obj/structure/rack/gunrack/MouseDrop_T(obj/O, mob/user) - if(isrobot(user)) - return - if(!user.drop_from_active_hand()) - return - if(!(istype(O, /obj/item/gun))) - to_chat(user, "This item doesn't fit!") - return - if(O.loc != src.loc) - add_fingerprint(user) - var/obj/item/gun/our_gun = O - our_gun.reset_direction() - our_gun.place_on_rack() - our_gun.do_drop_animation(src) - our_gun.Move(loc) -/obj/structure/rack/gunrack/attackby(obj/item/W, mob/user, params) +/obj/structure/rack/gunrack/proc/place_gun(obj/item/gun/our_gun, mob/user, params) + . = FALSE if(!ishuman(user)) - return - if(user.a_intent == INTENT_HARM) - return ..() - if(!(istype(W, /obj/item/gun))) - to_chat(user, "This item doesn't fit!") - return - if(!(W.flags & ABSTRACT) && user.drop_from_active_hand()) + return . + if(!(istype(our_gun))) + to_chat(user, span_warning("This item doesn't fit!")) + return . + if(our_gun.flags & ABSTRACT) + return . + if(!user.drop_item_ground(our_gun)) + return . + if(our_gun.loc != loc) add_fingerprint(user) - var/obj/item/gun/our_gun = W + our_gun.reset_direction() our_gun.place_on_rack() our_gun.do_drop_animation(src) our_gun.Move(loc) var/list/click_params = params2list(params) //Center the icon where the user clicked. if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) - return + return . //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - W.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - W.pixel_y = 0 - else + our_gun.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + our_gun.pixel_y = 0 + return TRUE + + +/obj/structure/rack/gunrack/MouseDrop_T(obj/item/gun/our_gun, mob/user, params) + return place_gun(our_gun, user, params) + + +/obj/structure/rack/gunrack/attackby(obj/item/I, mob/user, params) + if(!ishuman(user)) return - return + if(user.a_intent == INTENT_HARM) + return ..() + place_gun(I, user, params) + /obj/structure/rack/gunrack/wrench_act(mob/user, obj/item/I) . = TRUE @@ -889,13 +923,15 @@ return deconstruct(TRUE) + /obj/structure/rack/gunrack/Initialize(mapload) . = ..() - if(mapload) - for(var/obj/item/I in loc.contents) - if(istype(I, /obj/item/gun)) - var/obj/item/gun/to_place = I - to_place.place_on_rack() + if(!mapload) + return + + for(var/obj/item/gun/gun in loc) + gun.place_on_rack() + /obj/structure/rack/gunrack/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index e773b66baf2..3fdc6d574aa 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -21,7 +21,7 @@ /obj/structure/dispenser/Initialize(mapload) . = ..() initialize_tanks() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/structure/dispenser/Destroy() QDEL_LIST(stored_plasma_tanks) @@ -37,21 +37,23 @@ var/obj/item/tank/internals/oxygen/O = new(src) stored_oxygen_tanks.Add(O) -/obj/structure/dispenser/update_icon() - cut_overlays() + +/obj/structure/dispenser/update_overlays() + . = ..() var/oxy_tank_amount = LAZYLEN(stored_oxygen_tanks) switch(oxy_tank_amount) if(1 to 3) - overlays += "oxygen-[oxy_tank_amount]" + . += "oxygen-[oxy_tank_amount]" if(4 to INFINITY) - overlays += "oxygen-4" + . += "oxygen-4" var/pla_tank_amount = LAZYLEN(stored_plasma_tanks) switch(pla_tank_amount) if(1 to 4) - overlays += "plasma-[pla_tank_amount]" + . += "plasma-[pla_tank_amount]" if(5 to INFINITY) - overlays += "plasma-5" + . += "plasma-5" + /obj/structure/dispenser/attack_hand(mob/user) if(..()) @@ -100,7 +102,7 @@ try_insert_tank(user, stored_plasma_tanks, I) return - if(istype(I, /obj/item/wrench)) + if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) if(anchored) to_chat(user, "You lean down and unwrench [src].") @@ -116,14 +118,14 @@ if(!LAZYLEN(tank_list)) return // There are no tanks left to withdraw. - var/obj/item/tank/internals/T = tank_list[1] - tank_list.Remove(T) + var/obj/item/tank/internals/tank = tank_list[1] + tank_list.Remove(tank) - T.forceMove_turf() - user.put_in_hands(T) + tank.forceMove_turf() + user.put_in_hands(tank, ignore_anim = FALSE) - to_chat(user, "You take [T] out of [src].") - update_icon() + to_chat(user, "You take [tank] out of [src].") + update_icon(UPDATE_OVERLAYS) /// Called when the user clicks on the dispenser with a tank. Tries to insert the tank into the dispenser, and updates the UI if successful. /obj/structure/dispenser/proc/try_insert_tank(mob/living/user, list/tank_list, obj/item/tank/T) @@ -137,7 +139,7 @@ add_fingerprint(user) tank_list.Add(T) - update_icon() + update_icon(UPDATE_OVERLAYS) to_chat(user, "You put [T] in [src].") SStgui.update_uis(src) diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 12e14dcf80d..7ebd461fd7e 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -1,15 +1,14 @@ #define CLOSE_DURATION 6 #define OPEN_DURATION 6 -#define LAUNCH_COOLDOWN 50 - - +#define LAUNCH_COOLDOWN 30 // A place where tube pods stop, and people can get in or out. -// Mappers: use "Generate Instances from Directions" for this -// one. +// Mappers: use "Generate Instances from Directions" for this one. /obj/structure/transit_tube/station name = "station tube station" + desc = "The lynchpin of the transit system." icon = 'icons/obj/pipes_and_stuff/not_atmos/transit_tube_station.dmi' - icon_state = "closed" + icon_state = "closed_station0" + base_icon_state = "station0" exit_delay = 1 enter_delay = 2 var/pod_moving = FALSE @@ -18,6 +17,8 @@ var/hatch_state = TRANSIT_TUBE_CLOSED var/list/disallowed_mobs = list(/mob/living/silicon/ai) + /// Direction by which you can board the tube + var/boarding_dir /obj/structure/transit_tube/station/Initialize(mapload) . = ..() @@ -27,26 +28,32 @@ STOP_PROCESSING(SSobj, src) return ..() -// Stations which will send the tube in the opposite direction after their stop. -/obj/structure/transit_tube/station/reverse - reverse_launch = TRUE +/obj/structure/transit_tube/station/init_tube_dirs() + // Tube station directions are simply 90 to either side of + // the exit. + switch(dir) + if(NORTH) + tube_dirs = list(EAST, WEST) + if(SOUTH) + tube_dirs = list(EAST, WEST) + if(EAST) + tube_dirs = list(NORTH, SOUTH) + if(WEST) + tube_dirs = list(NORTH, SOUTH) + boarding_dir = reverse_direction(dir) /obj/structure/transit_tube/station/should_stop_pod(pod, from_dir) return TRUE -/obj/structure/transit_tube/station/Bumped(atom/movable/moving_atom) - if(!pod_moving && hatch_state == TRANSIT_TUBE_OPEN && isliving(moving_atom) && !is_type_in_list(moving_atom, disallowed_mobs)) - var/failed = FALSE +/obj/structure/transit_tube/station/Bumped(mob/living/L) + if(!pod_moving && L.dir == boarding_dir && hatch_state == TRANSIT_TUBE_OPEN && isliving(L) && !is_type_in_list(L, disallowed_mobs)) for(var/obj/structure/transit_tube_pod/pod in loc) - if(pod.contents.len) - failed = TRUE - else if(!pod.moving && (pod.dir in directions())) - pod.move_into(moving_atom) + if(length(pod.contents)) + to_chat(L, "The pod is already occupied.") + return + if(!pod.moving && ((pod.dir in directions()) || (reverse_launch && (turn(pod.dir, 180) in directions())))) + pod.move_into(L) return - if(failed) - to_chat(moving_atom, "The pod is already occupied.") - - /obj/structure/transit_tube/station/attack_hand(mob/user) if(pod_moving) @@ -66,9 +73,7 @@ "You start emptying [pod]'s contents onto the floor.", "You hear a loud noise! As if somebody is throwing stuff on the floor!") if(!do_after(user, 20, target = pod)) return - add_fingerprint(user) for(var/atom/movable/AM in pod) - AM.add_fingerprint(user) pod.eject(AM) if(isliving(AM)) var/mob/living/L = AM @@ -82,7 +87,7 @@ if(ismob(G.affecting) && G.state >= GRAB_AGGRESSIVE) var/mob/living/GM = G.affecting for(var/obj/structure/transit_tube_pod/pod in loc) - pod.visible_message("[user] starts putting [GM] into the [pod]!") + pod.visible_message("[user] starts putting [GM] into [pod]!") if(do_after(user, 30, target = GM) && GM && G && G.affecting == GM) GM.add_fingerprint(user) GM.Weaken(10 SECONDS) @@ -92,31 +97,36 @@ /obj/structure/transit_tube/station/proc/open_hatch() if(hatch_state == TRANSIT_TUBE_CLOSED) - icon_state = "opening" + icon_state = "opening_[base_icon_state]" hatch_state = TRANSIT_TUBE_OPENING - addtimer(CALLBACK(src, PROC_REF(open_hatch_callback)), OPEN_DURATION) - -/obj/structure/transit_tube/station/proc/open_hatch_callback() - if(hatch_state == TRANSIT_TUBE_OPENING) - icon_state = "open" - hatch_state = TRANSIT_TUBE_OPEN - - + addtimer(CALLBACK(src, PROC_REF(finish_animation)), OPEN_DURATION) /obj/structure/transit_tube/station/proc/close_hatch() if(hatch_state == TRANSIT_TUBE_OPEN) - icon_state = "closing" + icon_state = "closing_[base_icon_state]" hatch_state = TRANSIT_TUBE_CLOSING - addtimer(CALLBACK(src, PROC_REF(close_hatch_calllback)), CLOSE_DURATION) + addtimer(CALLBACK(src, PROC_REF(finish_animation)), CLOSE_DURATION) -/obj/structure/transit_tube/station/proc/close_hatch_calllback() - if(hatch_state == TRANSIT_TUBE_CLOSING) - icon_state = "closed" - hatch_state = TRANSIT_TUBE_CLOSED +/obj/structure/transit_tube/station/proc/finish_animation() + switch(hatch_state) + if(TRANSIT_TUBE_OPENING) + icon_state = "open_[base_icon_state]" + hatch_state = TRANSIT_TUBE_OPEN + for(var/obj/structure/transit_tube_pod/pod in loc) + for(var/thing in pod) + if(ismob(thing)) + var/mob/mob_content = thing + if(mob_content.client && mob_content.stat < UNCONSCIOUS) + continue // Let the mobs with clients decide what they want to do themselves. + var/atom/movable/movable_content = thing + movable_content.forceMove(loc) //Everything else is moved out of. + if(TRANSIT_TUBE_CLOSING) + icon_state = "closed_[base_icon_state]" + hatch_state = TRANSIT_TUBE_CLOSED /obj/structure/transit_tube/station/proc/launch_pod() for(var/obj/structure/transit_tube_pod/pod in loc) - if(!pod.moving && (pod.dir in directions())) + if(!pod.moving && ((pod.dir in directions()) || (reverse_launch && (turn(pod.dir, 180) in directions())))) addtimer(CALLBACK(src, PROC_REF(launch_pod_callback), pod), 5) return @@ -135,7 +145,7 @@ if(!nexttube) pod.dir = turn(pod.dir, 180) - if(hatch_state == TRANSIT_TUBE_CLOSED && pod) + if(hatch_state == TRANSIT_TUBE_CLOSED && pod && pod.loc == loc) pod.follow_tube() pod_moving = FALSE @@ -146,6 +156,7 @@ /obj/structure/transit_tube/station/pod_stopped(obj/structure/transit_tube_pod/pod, from_dir) pod_moving = TRUE + pod.stop_following() addtimer(CALLBACK(src, PROC_REF(pod_stopped_callback), pod), 5) /obj/structure/transit_tube/station/proc/pod_stopped_callback(obj/structure/transit_tube_pod/pod) @@ -156,10 +167,99 @@ pod_moving = FALSE pod.mix_air() -// Tube station directions are simply 90 to either side of -// the exit. -/obj/structure/transit_tube/station/init_dirs() - tube_dirs = list(turn(dir, 90), turn(dir, -90)) +/obj/structure/transit_tube/station/flipped + icon_state = "closed_station1" + base_icon_state = "station1" + +/obj/structure/transit_tube/station/flipped/init_tube_dirs() + ..() + boarding_dir = dir + +// Stations which will send the tube in the opposite direction after their stop. +/obj/structure/transit_tube/station/reverse + icon_state = "closed_terminus0" + base_icon_state = "terminus0" + reverse_launch = TRUE + +/obj/structure/transit_tube/station/reverse/init_tube_dirs() + tube_dirs = list(turn(dir, -90)) + boarding_dir = reverse_direction(dir) + +/obj/structure/transit_tube/station/reverse/flipped + icon_state = "closed_terminus1" + base_icon_state = "terminus1" + +/obj/structure/transit_tube/station/reverse/flipped/init_tube_dirs() + ..() + boarding_dir = dir + +//special dispenser station, it creates a pod for you to enter when you bump into it. + +/obj/structure/transit_tube/station/dispenser + name = "station tube pod dispenser" + icon_state = "open_dispenser0" + desc = "The lynchpin of a GOOD transit system." + enter_delay = 1 + base_icon_state = "dispenser0" + hatch_state = TRANSIT_TUBE_OPEN + +/obj/structure/transit_tube/station/dispenser/examine(mob/user) + . = ..() + . += "This station will create a pod for you to ride, no need to wait for one." + . += "Any pods arriving at this station will be reclaimed." + +/obj/structure/transit_tube/station/dispenser/close_hatch() + . = ..() + return + +/obj/structure/transit_tube/station/dispenser/launch_pod() + for(var/obj/structure/transit_tube_pod/pod in loc) + if(!pod.moving) + pod_moving = TRUE + pod.follow_tube() + pod_moving = FALSE + return TRUE + return FALSE + +/obj/structure/transit_tube/station/dispenser/Bumped(mob/living/L) + if(!(istype(L) && L.dir == boarding_dir) || L.anchored) + return + if(isliving(L) && !is_type_in_list(L, disallowed_mobs)) + var/obj/structure/transit_tube_pod/dispensed/pod = new(loc) + L.visible_message("[pod] forms around [L].", "[pod] materializes around you.") + playsound(src, 'sound/weapons/emitter2.ogg', 50, TRUE) + pod.dir = turn(dir, -90) + pod.move_into(L) + launch_pod() + +/obj/structure/transit_tube/station/dispenser/pod_stopped(obj/structure/transit_tube_pod/pod) + playsound(src, 'sound/machines/ding.ogg', 50, TRUE) + qdel(pod) + +/obj/structure/transit_tube/station/dispenser/flipped + icon_state = "open_dispenser1" + base_icon_state = "dispenser1" + +/obj/structure/transit_tube/station/dispenser/flipped/init_tube_dirs() + ..() + boarding_dir = dir +/obj/structure/transit_tube/station/dispenser/reverse + reverse_launch = TRUE + icon_state = "open_terminusdispenser0" + base_icon_state = "terminusdispenser0" + +/obj/structure/transit_tube/station/dispenser/reverse/init_tube_dirs() + tube_dirs = list(turn(dir, 90)) + boarding_dir = reverse_direction(dir) + +/obj/structure/transit_tube/station/dispenser/reverse/flipped + icon_state = "open_terminusdispenser1" + base_icon_state = "terminusdispenser1" + +/obj/structure/transit_tube/station/dispenser/reverse/flipped/init_tube_dirs() + ..() + boarding_dir = dir + #undef CLOSE_DURATION #undef OPEN_DURATION diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index 476ce469492..584c8136eeb 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -4,38 +4,50 @@ // Mappers: you can use "Generate Instances from Icon-states" // to get the different pieces. /obj/structure/transit_tube + name = "transit tube" + desc = "A pneumatic tube that brings you from here to there." icon = 'icons/obj/pipes_and_stuff/not_atmos/transit_tube.dmi' - icon_state = "E-W" - density = 1 + icon_state = "straight" + density = TRUE layer = 3.1 - anchored = 1.0 + anchored = TRUE var/list/tube_dirs = null var/exit_delay = 1 var/enter_delay = 0 - // alldirs in global.dm is the same list of directions, but since - // the specific order matters to get a usable icon_state, it is - // copied here so that, in the unlikely case that alldirs is changed, - // this continues to work. - var/global/list/tube_dir_list = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) +/obj/structure/transit_tube/Initialize(mapload, new_direction) + . = ..() + if(new_direction) + setDir(new_direction) + // set up our appearance after the initialize in case someone's setting our direction afterwards + // (especially for things like admin spawning) + addtimer(CALLBACK(src, PROC_REF(setup_appearance)), 1) +/obj/structure/transit_tube/proc/setup_appearance() + init_tube_dirs() + update_appearance() + +/obj/structure/transit_tube/Destroy() + for(var/obj/structure/transit_tube_pod/P in loc) + P.empty_pod() + return ..() /obj/structure/transit_tube/CanPass(atom/movable/mover, turf/target) if(istype(mover) && mover.checkpass(PASSGLASS)) - return 1 + return TRUE return !density // When destroyed by explosions, properly handle contents. /obj/structure/transit_tube/ex_act(severity) switch(severity) - if(1.0) + if(EXPLODE_DEVASTATE) for(var/atom/movable/AM in contents) AM.loc = loc AM.ex_act(severity++) qdel(src) return - if(2.0) + if(EXPLODE_HEAVY) if(prob(50)) for(var/atom/movable/AM in contents) AM.loc = loc @@ -43,20 +55,12 @@ qdel(src) return - if(3.0) + if(EXPLODE_LIGHT) return - -/obj/structure/transit_tube/New(loc) - ..(loc) - - if(tube_dirs == null) - init_dirs() - - // Called to check if a pod should stop upon entering this tube. /obj/structure/transit_tube/proc/should_stop_pod(pod, from_dir) - return 0 + return FALSE // Called when a pod stops in this tube section. /obj/structure/transit_tube/proc/pod_stopped(pod, from_dir) @@ -69,27 +73,21 @@ /obj/structure/transit_tube/proc/directions() return tube_dirs - - /obj/structure/transit_tube/proc/has_entrance(from_dir) from_dir = turn(from_dir, 180) for(var/direction in directions()) if(direction == from_dir) - return 1 - - return 0 - + return TRUE + return FALSE /obj/structure/transit_tube/proc/has_exit(in_dir) for(var/direction in directions()) if(direction == in_dir) - return 1 - - return 0 - + return TRUE + return FALSE // Searches for an exit direction within 45 degrees of the // specified dir. Returns that direction, or 0 if none match. @@ -110,7 +108,6 @@ return near_dir - // Return how many BYOND ticks to wait before entering/exiting // the tube section. Default action is to return the value of // a var, which wouldn't need a proc, but it makes it possible @@ -122,194 +119,157 @@ /obj/structure/transit_tube/proc/enter_delay(pod, to_dir) return enter_delay +/obj/structure/transit_tube/proc/init_tube_dirs() + switch(dir) + if(NORTH, SOUTH) + tube_dirs = list(NORTH, SOUTH) + if(EAST, WEST) + tube_dirs = list(EAST, WEST) -// Parse the icon_state into a list of directions. -// This means that mappers can use Dream Maker's built in -// "Generate Instances from Icon-states" option to get all -// variations. Additionally, as a separate proc, sub-types -// can handle it more intelligently. -/obj/structure/transit_tube/proc/init_dirs() - if(icon_state == "auto") - // Additional delay, for map loading. - spawn(1) - init_dirs_automatic() - - else - tube_dirs = parse_dirs(icon_state) - - if(copytext(icon_state, 1, 3) == "D-" || findtextEx(icon_state, "Pass")) - density = 0 - - - - -// Initialize dirs by searching for tubes that do/might connect -// on nearby turfs. Create corner pieces if nessecary. -// Pick two directions, preferring tubes that already connect -// to loc, or other auto tubes if there aren't enough connections. -/obj/structure/transit_tube/proc/init_dirs_automatic() - var/list/connected = list() - var/list/connected_auto = list() - - for(var/direction in tube_dir_list) - var/location = get_step(loc, direction) - for(var/obj/structure/transit_tube/tube in location) - if(tube.directions() == null && tube.icon_state == "auto") - connected_auto += direction - break - - else if(turn(direction, 180) in tube.directions()) - connected += direction - break - - connected += connected_auto - - tube_dirs = select_automatic_dirs(connected) - - if(length(tube_dirs) == 2 && tube_dir_list.Find(tube_dirs[1]) > tube_dir_list.Find(tube_dirs[2])) - tube_dirs.Swap(1, 2) - - generate_automatic_corners(tube_dirs) - select_automatic_icon_state(tube_dirs) - - - -// Given a list of directions, look a pair that forms a 180 or -// 135 degree angle, and return a list containing the pair. -// If none exist, return list(connected[1], turn(connected[1], 180) -/obj/structure/transit_tube/proc/select_automatic_dirs(connected) - if(length(connected) < 1) - return list() - - for(var/i = 1, i <= length(connected), i++) - for(var/j = i + 1, j <= length(connected), j++) - var/d1 = connected[i] - var/d2 = connected[j] - - if(d1 == turn(d2, 135) || d1 == turn(d2, 180) || d1 == turn(d2, 225)) - return list(d1, d2) - - return list(connected[1], turn(connected[1], 180)) - - - -/obj/structure/transit_tube/proc/select_automatic_icon_state(directions) - if(length(directions) == 2) - icon_state = "[dir2text_short(directions[1])]-[dir2text_short(directions[2])]" - - - -// Look for diagonal directions, generate the decorative corners in each. -/obj/structure/transit_tube/proc/generate_automatic_corners(directions) - for(var/direction in directions) - if(direction == 5 || direction == 6 || direction == 9 || direction == 10) - if(direction & NORTH) - create_automatic_decorative_corner(get_step(loc, NORTH), direction ^ 3) - - else - create_automatic_decorative_corner(get_step(loc, SOUTH), direction ^ 3) - - if(direction & EAST) - create_automatic_decorative_corner(get_step(loc, EAST), direction ^ 12) - - else - create_automatic_decorative_corner(get_step(loc, WEST), direction ^ 12) - - - -// Generate a corner, if one doesn't exist for the direction on the turf. -/obj/structure/transit_tube/proc/create_automatic_decorative_corner(location, direction) - var/state = "D-[dir2text_short(direction)]" - - for(var/obj/structure/transit_tube/tube in location) - if(tube.icon_state == state) - return - - var/obj/structure/transit_tube/tube = new(location) - tube.icon_state = state - tube.init_dirs() - - - -// Uses a list() to cache return values. Since they should -// never be edited directly, all tubes with a certain -// icon_state can just reference the same list. In theory, -// reduces memory usage, and improves CPU cache usage. -// In reality, I don't know if that is quite how BYOND works, -// but it is probably safer to assume the existence of, and -// rely on, a sufficiently smart compiler/optimizer. -/obj/structure/transit_tube/proc/parse_dirs(text) - var/global/list/direction_table = list() - - if(text in direction_table) - return direction_table[text] - - var/list/split_text = splittext(text, "-") - - // If the first token is D, the icon_state represents - // a purely decorative tube, and doesn't actually - // connect to anything. - if(split_text[1] == "D") - direction_table[text] = list() - return null - - var/list/directions = list() - - for(var/text_part in split_text) - var/direction = text2dir_extended(text_part) - - if(direction > 0) - directions += direction - - direction_table[text] = directions - return directions - - - -// A copy of text2dir, extended to accept one and two letter -// directions, and to clearly return 0 otherwise. -/obj/structure/transit_tube/proc/text2dir_extended(direction) - switch(uppertext(direction)) - if("NORTH", "N") - return 1 - if("SOUTH", "S") - return 2 - if("EAST", "E") - return 4 - if("WEST", "W") - return 8 - if("NORTHEAST", "NE") - return 5 - if("NORTHWEST", "NW") - return 9 - if("SOUTHEAST", "SE") - return 6 - if("SOUTHWEST", "SW") - return 10 - else - return 0 - - - -// A copy of dir2text, which returns the short one or two letter -// directions used in tube icon states. -/obj/structure/transit_tube/proc/dir2text_short(direction) - switch(direction) - if(1) - return "N" - if(2) - return "S" - if(4) - return "E" - if(8) - return "W" - if(5) - return "NE" - if(6) - return "SE" - if(9) - return "NW" - if(10) - return "SW" +/obj/structure/transit_tube/update_overlays() + . = ..() + for(var/direction in directions()) + if(!IS_DIR_DIAGONAL(direction)) + . += create_tube_overlay(direction) + continue + if(!(direction & NORTH)) + continue + + . += create_tube_overlay(direction ^ (NORTH|SOUTH), NORTH) + if(direction & EAST) + . += create_tube_overlay(direction ^ (EAST|WEST), EAST) else + . += create_tube_overlay(direction ^ (EAST|WEST), WEST) + + +/obj/structure/transit_tube/proc/create_tube_overlay(direction, shift_dir) + // We use image() because a mutable appearance will have its dir mirror the parent which sort of fucks up what we're doing here + var/image/tube_overlay = image(icon, dir = direction) + if(shift_dir) + tube_overlay.icon_state = "decorative_diag" + switch(shift_dir) + if(NORTH) + tube_overlay.pixel_y = 32 + if(SOUTH) + tube_overlay.pixel_y = -32 + if(EAST) + tube_overlay.pixel_x = 32 + if(WEST) + tube_overlay.pixel_x = -32 + else + tube_overlay.icon_state = "decorative" + + tube_overlay.overlays += emissive_blocker(icon, tube_overlay.icon_state, src) + return tube_overlay + +//Some of these are mostly for mapping use +/obj/structure/transit_tube/horizontal + dir = WEST + +/obj/structure/transit_tube/diagonal + icon_state = "diagonal" + +/obj/structure/transit_tube/diagonal/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTHEAST, SOUTHWEST) + if(SOUTH) + tube_dirs = list(NORTHEAST, SOUTHWEST) + if(EAST) + tube_dirs = list(NORTHWEST, SOUTHEAST) + if(WEST) + tube_dirs = list(NORTHWEST, SOUTHEAST) + +//mostly for mapping use +/obj/structure/transit_tube/diagonal/topleft + dir = WEST + +/obj/structure/transit_tube/diagonal/crossing + density = FALSE + icon_state = "diagonal_crossing" + +//mostly for mapping use +/obj/structure/transit_tube/diagonal/crossing/topleft + dir = WEST + + +/obj/structure/transit_tube/curved + icon_state = "curved0" + +/obj/structure/transit_tube/curved/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTH, SOUTHWEST) + if(SOUTH) + tube_dirs = list(SOUTH, NORTHEAST) + if(EAST) + tube_dirs = list(EAST, NORTHWEST) + if(WEST) + tube_dirs = list(SOUTHEAST, WEST) + +/obj/structure/transit_tube/curved/flipped + icon_state = "curved1" + +/obj/structure/transit_tube/curved/flipped/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTH, SOUTHEAST) + if(SOUTH) + tube_dirs = list(SOUTH, NORTHWEST) + if(EAST) + tube_dirs = list(EAST, SOUTHWEST) + if(WEST) + tube_dirs = list(NORTHEAST, WEST) + + +/obj/structure/transit_tube/junction + icon_state = "junction0" + +/obj/structure/transit_tube/junction/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTH, SOUTHEAST, SOUTHWEST)//ending with the prefered direction + if(SOUTH) + tube_dirs = list(SOUTH, NORTHWEST, NORTHEAST) + if(EAST) + tube_dirs = list(EAST, SOUTHWEST, NORTHWEST) + if(WEST) + tube_dirs = list(WEST, NORTHEAST, SOUTHEAST) + +/obj/structure/transit_tube/junction/flipped + icon_state = "junction1" + +/obj/structure/transit_tube/junction/flipped/init_tube_dirs() + switch(dir) + if(NORTH) + tube_dirs = list(NORTH, SOUTHWEST, SOUTHEAST)//ending with the prefered direction + if(SOUTH) + tube_dirs = list(SOUTH, NORTHEAST, NORTHWEST) + if(EAST) + tube_dirs = list(EAST, NORTHWEST, SOUTHWEST) + if(WEST) + tube_dirs = list(WEST, SOUTHEAST, NORTHEAST) + + +/obj/structure/transit_tube/crossing + icon_state = "crossing" + density = FALSE + +//mostly for mapping use +/obj/structure/transit_tube/crossing/horizontal + dir = WEST + +// cosmetic "cap" for tubes. Note that tubes can't enter this. +/obj/structure/transit_tube/cap + icon_state = "cap" + +/obj/structure/transit_tube/cap/init_tube_dirs() + tube_dirs = list(turn(dir, 180)) // back the way we came + +/obj/structure/transit_tube/cap/has_entrance(from_dir) + return FALSE + +/obj/structure/transit_tube/cap/create_tube_overlay() + // cap sprites already have overlays return + 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 9ab4942cefd..bd368eb24f9 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -1,3 +1,6 @@ +#define MOVE_ANIMATION_STAGE_ONE 1 +#define MOVE_ANIMATION_STAGE_TWO 2 + /obj/structure/transit_tube_pod icon = 'icons/obj/pipes_and_stuff/not_atmos/transit_tube_pod.dmi' icon_state = "pod" @@ -6,21 +9,47 @@ density = TRUE var/moving = FALSE var/datum/gas_mixture/air_contents = new() - -/obj/structure/transit_tube_pod/New(loc) - ..(loc) + /// The tube we're currently traveling through + var/obj/structure/transit_tube/current_tube = null + /// The direction of our next transit from pipe to pipe. Stored between process calls here. + var/next_dir + /// The location of our next target tube. Stored same as above + var/next_loc + /// How long to wait when entering a new tube + var/enter_delay = 0 + /// How long to wait when exiting a new tube + var/exit_delay + /// The next time we'll be moving + COOLDOWN_DECLARE(move_cooldown) + /// The move animation mode for the next processing tick + var/current_move_anim_mode = MOVE_ANIMATION_STAGE_ONE + /// Icon state in use while we're occupied + var/occupied_icon_state = "pod_occupied" + +/obj/structure/transit_tube_pod/Initialize(mapload) + . = ..() + // Give auto tubes time to align before trying to start moving + spawn(5) air_contents.oxygen = MOLES_O2STANDARD * 2 air_contents.nitrogen = MOLES_N2STANDARD air_contents.temperature = T20C - // Give auto tubes time to align before trying to start moving - spawn(5) - follow_tube() + for(var/obj/structure/transit_tube/tube in loc) + setDir(pick(tube.directions())) + break + follow_tube() + +/obj/structure/transit_tube_pod/update_icon_state() + . = ..() + icon_state = length(contents) ? occupied_icon_state : initial(icon_state) + +/obj/structure/transit_tube_pod/proc/stop_following() + STOP_PROCESSING(SStransit_tube, src) /obj/structure/transit_tube_pod/Destroy() - for(var/atom/movable/AM in contents) - AM.forceMove(get_turf(src)) + empty_pod() + stop_following() return ..() /obj/structure/transit_tube_pod/Process_Spacemove() @@ -28,69 +57,115 @@ return TRUE else return ..() -/obj/structure/transit_tube_pod/proc/follow_tube(var/reverse_launch) +/obj/structure/transit_tube_pod/proc/empty_pod(atom/location) + if(!location) + location = get_turf(src) + for(var/atom/movable/M in contents) + M.forceMove(location) + update_appearance() + +/obj/structure/transit_tube_pod/crowbar_act(mob/living/user, obj/item/I) + . = ..() if(moving) return - moving = TRUE + if(length(contents)) + I.play_tool_sound(src) + user.visible_message("[user] pries [src] open.") + empty_pod() + +/obj/structure/transit_tube_pod/process() + ..() + + if(!COOLDOWN_FINISHED(src, move_cooldown)) + return + + var/move_result = move_animation(current_move_anim_mode) + if(isnull(move_result)) + if(isnull(current_tube) || (!(dir in current_tube.directions()) && !(reverse_direction(dir) in current_tube.directions()))) + outside_tube() + return PROCESS_KILL - spawn() - var/obj/structure/transit_tube/current_tube = null - var/next_dir - var/next_loc - var/last_delay = 0 - var/exit_delay + current_move_anim_mode = move_result - if(reverse_launch) - dir = turn(dir, 180) // Back it up +/obj/structure/transit_tube_pod/proc/outside_tube() + var/list/savedcontents = contents.Copy() + var/saveddir = dir + var/turf/destination = get_edge_target_turf(src, saveddir) + visible_message("[src] ejects its insides out!") + for(var/i in savedcontents) + var/atom/movable/AM = i + AM.throw_at(destination, rand(1, 3), 5) - for(var/obj/structure/transit_tube/tube in loc) - if(tube.has_exit(dir)) + +/obj/structure/transit_tube_pod/proc/move_animation(stage = MOVE_ANIMATION_STAGE_ONE) + if(stage == MOVE_ANIMATION_STAGE_ONE) + next_dir = current_tube.get_exit(dir) + + if(!next_dir) + moving = FALSE + density = TRUE + return + exit_delay = current_tube.exit_delay + next_loc = get_step(src, next_dir) + current_tube = null + for(var/obj/structure/transit_tube/tube in next_loc) + if(tube.has_entrance(next_dir)) current_tube = tube break - while(current_tube) - next_dir = current_tube.get_exit(dir) + if(isnull(current_tube)) + setDir(next_dir) + Move(get_step(loc, dir), dir) // Allow collisions when leaving the tubes. + moving = FALSE + density = TRUE + return - if(!next_dir) - break + enter_delay = current_tube.enter_delay(src, next_dir) + if(enter_delay > 0) + COOLDOWN_START(src, move_cooldown, enter_delay) + return MOVE_ANIMATION_STAGE_TWO - exit_delay = current_tube.exit_delay(src, dir) - last_delay += exit_delay + stage = MOVE_ANIMATION_STAGE_TWO - sleep(exit_delay) + if(stage == MOVE_ANIMATION_STAGE_TWO) + setDir(next_dir) + forceMove(next_loc) // When moving from one tube to another, skip collision and such. + density = current_tube.density - next_loc = get_step(loc, next_dir) + if(current_tube?.should_stop_pod(src, next_dir)) + current_tube.pod_stopped(src, dir) + else + COOLDOWN_START(src, move_cooldown, exit_delay) + return MOVE_ANIMATION_STAGE_ONE - current_tube = null - for(var/obj/structure/transit_tube/tube in next_loc) - if(tube.has_entrance(next_dir)) - current_tube = tube - break + density = TRUE + moving = FALSE - if(current_tube == null) - setDir(next_dir) - Move(get_step(loc, dir), dir) // Allow collisions when leaving the tubes. - break + return MOVE_ANIMATION_STAGE_ONE - last_delay = current_tube.enter_delay(src, next_dir) - sleep(last_delay) - setDir(next_dir) - forceMove(next_loc) // When moving from one tube to another, skip collision and such. - density = current_tube.density - if(current_tube && current_tube.should_stop_pod(src, next_dir)) - current_tube.pod_stopped(src, dir) - break +/obj/structure/transit_tube_pod/proc/follow_tube(reverse_launch) + if(moving) + return - density = TRUE + moving = TRUE - moving = FALSE + for(var/obj/structure/transit_tube/tube in loc) + if(tube.has_exit(dir)) + current_tube = tube + break + if(current_tube) + START_PROCESSING(SStransit_tube, src) + // move_animation(MOVE_ANIMATION_STAGE_ONE) + else + moving = FALSE // Should I return a copy here? If the caller edits or qdel()s the returned // datum, there might be problems if I don't... /obj/structure/transit_tube_pod/return_air() + RETURN_TYPE(/datum/gas_mixture) var/datum/gas_mixture/GM = new() GM.copy_from(air_contents) return GM @@ -152,9 +227,9 @@ if(!moving) for(var/obj/structure/transit_tube/station/station in loc) - if(dir in station.directions()) + if((dir in station.directions()) || (turn(dir, 180) in station.directions())) if(!station.pod_moving) - if(direction == station.dir) + if(direction == turn(station.boarding_dir, 180)) if(station.hatch_state == TRANSIT_TUBE_OPEN) eject(mob, direction) @@ -173,8 +248,8 @@ return /obj/structure/transit_tube_pod/proc/move_into(atom/movable/A) - icon_state = "pod_occupied" A.forceMove(src) + update_appearance() /obj/structure/transit_tube_pod/proc/eject_mindless(direction) for(var/atom/movable/A in contents) @@ -187,9 +262,24 @@ /obj/structure/transit_tube_pod/proc/eject(atom/movable/A, direction) - icon_state = "pod" A.forceMove(loc) + update_appearance() A.Move(get_step(loc, direction), direction) if(ismob(A)) var/mob/M = A M.reset_perspective(null) + + +/obj/structure/transit_tube_pod/dispensed + name = "temporary transit tube pod" + desc = "Gets you from here to there, and no further." + icon_state = "temppod" + occupied_icon_state = "temppod_occupied" + + +/obj/structure/transit_tube_pod/dispensed/outside_tube() + if(!QDELETED(src)) + qdel(src) + +#undef MOVE_ANIMATION_STAGE_TWO +#undef MOVE_ANIMATION_STAGE_ONE diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index d0769b4cd0a..cd3486d2ae0 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -52,7 +52,8 @@ open = !open update_icon() -/obj/structure/toilet/update_icon() + +/obj/structure/toilet/update_icon_state() icon_state = "toilet[open][cistern]" if(!anchored) pixel_x = 0 @@ -129,7 +130,7 @@ user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "You hear grinding porcelain.") cistern = !cistern update_icon() - return + /obj/structure/toilet/wrench_act(mob/user, obj/item/I) . = TRUE @@ -168,7 +169,7 @@ var/list/dir_choices = list("North" = NORTH, "East" = EAST, "South" = SOUTH, "West" = WEST) var/selected = input(user,"Select a direction for the connector.", "Connector Direction") in dir_choices dir = dir_choices[selected] - update_icon() //is this necessary? probably not + update_icon() /obj/structure/toilet/proc/stash_goods(obj/item/I, mob/user) if(!I) @@ -217,7 +218,7 @@ desc = "Поговаривают, что 7 веков назад у каждого арабского шейха был такой унитаз." icon_state = "gold_toilet00" -/obj/structure/toilet/golden_toilet/update_icon() +/obj/structure/toilet/golden_toilet/update_icon_state() . = ..() icon_state = "gold_toilet[open][cistern]" @@ -226,7 +227,7 @@ desc = "Престижное седалище для престижной персоны. Судя по форме, был идеально подготовлен под седальное место Капитана." icon_state = "captain_toilet00" -/obj/structure/toilet/captain_toilet/update_icon() +/obj/structure/toilet/captain_toilet/update_icon_state() . = ..() icon_state = "captain_toilet[open][cistern]" @@ -281,21 +282,28 @@ pixel_x = 0 pixel_y = 32 + +#define SHOWER_FREEZING "freezing" +#define SHOWER_NORMAL "normal" +#define SHOWER_BOILING "boiling" + /obj/machinery/shower name = "shower" desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division." icon = 'icons/obj/watercloset.dmi' icon_state = "shower" - density = 0 - anchored = 1 + density = FALSE + anchored = TRUE use_power = NO_POWER_USE - var/on = 0 - var/obj/effect/mist/mymist = null - var/ismist = 0 //needs a var so we can make it linger~ - var/watertemp = "normal" //freezing, normal, or boiling + ///Is the shower on or off? + var/on = FALSE + ///What temperature the shower reagents are set to. + var/current_temperature = SHOWER_NORMAL var/mobpresent = 0 //true if there is a mob on the shower's loc, this is to ease process() + ///What sound will be played on loop when the shower is on and pouring water. var/datum/looping_sound/showering/soundloop + /obj/machinery/shower/New(turf/T, newdir = SOUTH, building = FALSE) ..() soundloop = new(list(src), FALSE) @@ -310,9 +318,12 @@ pixel_y = -5 layer = FLY_LAYER + /obj/machinery/shower/Destroy() - QDEL_NULL(mymist) QDEL_NULL(soundloop) + var/obj/effect/mist/mist = locate() in loc + if(!QDELETED(mist)) + QDEL_IN(mist, 25 SECONDS) return ..() //add heat controls? when emagged, you can freeze to death in it? @@ -321,164 +332,176 @@ name = "mist" icon = 'icons/obj/watercloset.dmi' icon_state = "mist" - layer = MOB_LAYER + 1 - anchored = 1 + layer = FLY_LAYER + anchored = TRUE mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/machinery/shower/attack_hand(mob/M as mob) - add_fingerprint(M) + +/obj/machinery/shower/attack_hand(mob/user) on = !on update_icon() + handle_mist() + add_fingerprint(user) if(on) + START_PROCESSING(SSmachines, src) + process() soundloop.start() - if(M.loc == loc) - wash(M) - check_heat(M) - M.water_act(100, convertHeat(), src) - for(var/atom/movable/G in src.loc) - G.clean_blood() - G.water_act(100, convertHeat(), src) else soundloop.stop() + var/turf/simulated/source_turf = loc + if(istype(source_turf) && !source_turf.density) + source_turf.MakeSlippery(TURF_WET_WATER, 5 SECONDS) + /obj/machinery/shower/attackby(obj/item/I as obj, mob/user as mob, params) if(I.type == /obj/item/analyzer) add_fingerprint(user) - to_chat(user, "The water temperature seems to be [watertemp].") - if(on) - add_fingerprint(user) - I.water_act(100, convertHeat(), src) + to_chat(user, span_notice("The water temperature seems to be [current_temperature].")) return ..() + /obj/machinery/shower/wrench_act(mob/user, obj/item/I) - . = TRUE - if(!I.tool_use_check(user, 0)) - return - to_chat(user, "You begin to adjust the temperature valve with the [I].") - if(I.use_tool(src, user, 50, volume = I.tool_volume)) - switch(watertemp) - if("normal") - watertemp = "freezing" - if("freezing") - watertemp = "boiling" - if("boiling") - watertemp = "normal" - user.visible_message("[user] adjusts the shower with the [I].", "You adjust [src] to [watertemp].") - update_icon() //letsa update whenever we change the temperature, since the mist might need to change + to_chat(user, span_notice("You begin to adjust the temperature valve with [I].")) + if(I.use_tool(src, user, 5 SECONDS)) + switch(current_temperature) + if(SHOWER_NORMAL) + current_temperature = SHOWER_FREEZING + if(SHOWER_FREEZING) + current_temperature = SHOWER_BOILING + if(SHOWER_BOILING) + current_temperature = SHOWER_NORMAL + user.visible_message( + span_notice("[user] adjusts the shower with [I]."), + span_notice("You adjust [src] to [current_temperature] temperature."), + ) + add_hiddenprint(user) + handle_mist() + return TRUE + /obj/machinery/shower/welder_act(mob/user, obj/item/I) . = TRUE if(on) - to_chat(user, "Turn [src] off before you attempt to cut it loose.") + to_chat(user, span_warning("Turn [src] off before you attempt to cut it loose.")) return if(!I.tool_use_check(user, 0)) return - visible_message("[user] begins slicing [src] free...", "You begin slicing [src] free...", "You hear welding.") - if(I.use_tool(src, user, 40, volume = I.tool_volume)) - if(mymist) - qdel(mymist) - user.visible_message("[user] cuts [src] loose!", "You cut [src] loose!") - var/obj/item/mounted/shower/S = new /obj/item/mounted/shower(get_turf(user)) - transfer_fingerprints_to(S) + user.visible_message( + span_notice("[user] begins slicing [src] free..."), + span_notice("You begin slicing [src] free..."), + span_italics("You hear welding."), + ) + if(I.use_tool(src, user, 4 SECONDS, volume = I.tool_volume)) + user.visible_message( + span_notice("[user] cuts [src] loose!"), + span_notice("You cut [src] loose!>"), + ) + var/obj/item/mounted/shower/shower = new /obj/item/mounted/shower(get_turf(user)) + transfer_prints_to(shower, TRUE) qdel(src) -/obj/machinery/shower/update_icon() //this makes the shower mist up or clear mist (depending on water temperature) - overlays.Cut() //once it's been on for a while, in addition to handling the water overlay. - if(on) - overlays += image('icons/obj/watercloset.dmi', src, "water", MOB_LAYER + 1, dir) - var/mist_time = 50 //5 seconds at normal temperature to build up mist - if(watertemp == "freezing") - mist_time = 70 //7 seconds on freezing temperature to disperse existing mist - if(watertemp == "boiling") - mist_time = 20 //2 seconds on boiling temperature to build up mist - addtimer(CALLBACK(src, PROC_REF(update_mist)), mist_time) - else - addtimer(CALLBACK(src, PROC_REF(update_mist)), 250) //25 seconds for mist to disperse after being turned off -/obj/machinery/shower/proc/update_mist() +/obj/machinery/shower/update_overlays() + . = ..() if(on) - if(watertemp == "freezing") - if(mymist) - qdel(mymist) - ismist = 0 - return - if(mymist) - return - ismist = 1 - mymist = new /obj/effect/mist(loc) - else - if(mymist) - qdel(mymist) - ismist = 0 + . += image(icon, icon_state = "water", layer = ABOVE_MOB_LAYER, dir = src.dir) -/obj/machinery/shower/Crossed(atom/movable/O, oldloc) - ..() - wash(O) - if(ismob(O)) - mobpresent += 1 - check_heat(O) - -/obj/machinery/shower/Uncrossed(atom/movable/O) - if(ismob(O)) - mobpresent -= 1 + +/obj/machinery/shower/proc/handle_mist() + // If there is no mist, and the shower was turned on (on a non-freezing temp): make mist in 5 seconds + // If there was already mist, and the shower was turned off (or made cold): remove the existing mist in 25 sec + var/obj/effect/mist/mist = locate() in loc + if(!mist && on && current_temperature != SHOWER_FREEZING) + addtimer(CALLBACK(src, PROC_REF(make_mist)), 5 SECONDS) + + if(mist && (!on || current_temperature == SHOWER_FREEZING)) + addtimer(CALLBACK(src, PROC_REF(clear_mist)), 25 SECONDS) + + +/obj/machinery/shower/proc/make_mist() + var/obj/effect/mist/mist = locate() in loc + if(!mist && on && current_temperature != SHOWER_FREEZING) + new /obj/effect/mist(loc) + + +/obj/machinery/shower/proc/clear_mist() + var/obj/effect/mist/mist = locate() in loc + if(mist && (!on || current_temperature == SHOWER_FREEZING)) + qdel(mist) + + +/obj/machinery/shower/Crossed(atom/movable/AM, oldloc) ..() + if(on) + wash(AM) + /obj/machinery/shower/proc/convertHeat() - switch(watertemp) - if("boiling") + switch(current_temperature) + if(SHOWER_BOILING) return 340.15 - if("normal") + if(SHOWER_NORMAL) return 310.15 - if("freezing") + if(SHOWER_FREEZING) return 230.15 + //Yes, showers are super powerful as far as washing goes. -/obj/machinery/shower/proc/wash(atom/movable/O as obj|mob) - if(!on) return +/obj/machinery/shower/proc/wash(atom/target) + if(!on) + return + + if(isitem(target)) + var/obj/item/item = target + item.extinguish() - if(istype(O, /obj/item)) - var/obj/item/I = O - I.extinguish() + target.water_act(100, convertHeat(), src) - O.water_act(100, convertHeat(), src) + if(isliving(target)) + var/mob/living/l_target = target + l_target.ExtinguishMob() + l_target.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily + to_chat(l_target, span_warning("You've been drenched in water!")) - if(isliving(O)) - var/mob/living/L = O - L.ExtinguishMob() - L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily - to_chat(L, "You've been drenched in water!") - L.clean_blood() + target.clean_blood() - if(isturf(loc)) - var/turf/tile = loc - loc.clean_blood() - for(var/obj/effect/E in tile) - if(E.is_cleanable()) - qdel(E) /obj/machinery/shower/process() - if(!on || !mobpresent) - return - for(var/mob/living/carbon/C in loc) - if(prob(33)) - wash(C) //re-applies water and re-cleans mob while they remain under the shower, 33% chance per process to avoid message spam/quick death - check_heat(C) + if(on) + if(isturf(loc)) + var/turf/tile = loc + tile.water_act(100, convertHeat(), src) + tile.clean_blood() + for(var/obj/effect/effect in tile) + if(effect.is_cleanable()) + qdel(effect) + for(var/thing in loc) + wash(thing) + else + on = FALSE + soundloop.stop() + handle_mist() + update_icon(UPDATE_OVERLAYS) -/obj/machinery/shower/proc/check_heat(mob/M as mob) - if(!on || watertemp == "normal") + +/obj/machinery/shower/proc/check_heat(mob/M) + if(current_temperature == SHOWER_NORMAL) return if(iscarbon(M)) var/mob/living/carbon/C = M - if(watertemp == "freezing") + if(current_temperature == SHOWER_FREEZING) //C.bodytemperature = max(80, C.bodytemperature - 80) to_chat(C, "The water is freezing!") - return - if(watertemp == "boiling") + + else if(current_temperature == SHOWER_BOILING) //C.bodytemperature = min(500, C.bodytemperature + 35) C.adjustFireLoss(5) to_chat(C, "The water is searing!") - return + +#undef SHOWER_FREEZING +#undef SHOWER_NORMAL +#undef SHOWER_BOILING /obj/item/bikehorn/rubberducky @@ -621,10 +644,9 @@ var/list/dir_choices = list("North" = NORTH, "East" = EAST, "South" = SOUTH, "West" = WEST) var/selected = input(user, "Select a direction for the connector.", "Connector Direction") in dir_choices dir = dir_choices[selected] - update_icon() //is this necessary? probably not + update_icon(UPDATE_ICON_STATE) -/obj/structure/sink/update_icon() - ..() +/obj/structure/sink/update_icon_state() layer = OBJ_LAYER if(!anchored) pixel_x = 0 @@ -743,7 +765,7 @@ var/obj/structure/S = new result(T) S.anchored = 0 S.dir = user.dir - S.update_icon() + S.update_icon(UPDATE_ICON_STATE) user.temporarily_remove_item_from_inventory(src, force = TRUE) qdel(src) if(prob(50)) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index 4a66c4326cd..0c4249e085c 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -50,7 +50,7 @@ setDir(ini_dir) move_update_air(T) -/obj/structure/windoor_assembly/update_icon() +/obj/structure/windoor_assembly/update_icon_state() var/temp_state = state if(temp_state == "03") temp_state = "02" @@ -162,7 +162,7 @@ add_fingerprint(user) //Update to reflect changes(if applicable) - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/windoor_assembly/crowbar_act(mob/user, obj/item/I) //Crowbar to complete the assembly, Step 7 complete. if(state != "03") @@ -228,7 +228,7 @@ state = "02" electronics.forceMove(loc) electronics = null - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/windoor_assembly/wirecutter_act(mob/user, obj/item/I) if(state != "02") @@ -243,7 +243,7 @@ new/obj/item/stack/cable_coil(get_turf(user), 1) state = "01" name = "[(src.secure) ? "secure" : ""] anchored windoor assembly" - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/windoor_assembly/wrench_act(mob/user, obj/item/I) if(state != "01") @@ -274,7 +274,7 @@ to_chat(user, "You loosen bolts on [src].") anchored = FALSE name = "[(src.secure) ? "secure" : ""] windoor assembly" - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/windoor_assembly/welder_act(mob/user, obj/item/I) if(state != "01") @@ -312,7 +312,7 @@ setDir(target_dir) ini_dir = dir - update_icon() + update_icon(UPDATE_ICON_STATE) return TRUE /obj/structure/windoor_assembly/AltClick(mob/user) @@ -339,5 +339,5 @@ facing = "l" to_chat(usr, "The windoor will now slide to the left.") - update_icon() - return + update_icon(UPDATE_ICON_STATE) + diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 1d8ea14736a..316cfc4afc9 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -44,7 +44,7 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", var/glass_type = /obj/item/stack/sheet/glass var/glass_amount = 1 var/cancolor = FALSE - var/image/crack_overlay + var/mutable_appearance/crack_overlay var/list/debris = list() var/real_explosion_block //ignore this, just use explosion_block var/breaksound = "shatter" @@ -325,6 +325,7 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", if(I.use_tool(src, user, 40, volume = I.tool_volume)) obj_integrity = max_integrity WELDER_REPAIR_SUCCESS_MESSAGE + update_icon(UPDATE_OVERLAYS) /obj/structure/window/proc/check_state(checked_state) if(state == checked_state) @@ -478,23 +479,25 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", //This proc is used to update the icons of nearby windows. /obj/structure/window/proc/update_nearby_icons() - update_icon() + update_icon(UPDATE_OVERLAYS) if(smooth) queue_smooth_neighbors(src) -/obj/structure/window/update_icon() - if(!QDELETED(src)) - if(!fulltile) - return - var/ratio = obj_integrity / max_integrity - ratio = CEILING(ratio*4, 1) * 25 - if(smooth) - queue_smooth(src) - overlays -= crack_overlay - if(ratio > 75) - return - crack_overlay = image('icons/obj/structures.dmi',"damage[ratio]",-(layer+0.1)) - overlays += crack_overlay +/obj/structure/window/update_overlays() + . = ..() + if(QDELETED(src) || !fulltile) + return + + var/ratio = obj_integrity / max_integrity + ratio = CEILING(ratio * 4, 1) * 25 + if(smooth) + queue_smooth(src) + if(ratio > 75) + return + + crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer + 0.01), appearance_flags = RESET_COLOR) + . += crack_overlay + /obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() @@ -596,35 +599,38 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", use_power(5) active = !active - update_icon() + update_icon(UPDATE_ICON_STATE) - for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) - if(W.id == src.id || !W.id) - spawn(0) - W.toggle() - return - for(var/obj/machinery/door/airlock/G in range(src,range)) - if(G.id == src.id) - spawn(0) - if(G.glass) - G.airlock_material = null - G.glass = FALSE - G.update_icon() - if(G.density) - G.opacity = 1 - else - G.airlock_material = "glass" - G.glass = TRUE - G.update_icon() - G.opacity = 0 - return + for(var/obj/structure/window/reinforced/polarized/window in range(src,range)) + if(window.id == id || !window.id) + INVOKE_ASYNC(window, TYPE_PROC_REF(/obj/structure/window/reinforced/polarized, toggle)) -/obj/machinery/button/windowtint/power_change() - ..() + for(var/obj/machinery/door/airlock/airlock in range(src,range)) + if(airlock.id == id) + INVOKE_ASYNC(src, PROC_REF(async_update), airlock) + + +/obj/machinery/button/windowtint/proc/async_update(obj/machinery/door/airlock/airlock) + if(airlock.glass) + airlock.airlock_material = null + airlock.glass = FALSE + airlock.update_icon() + if(airlock.density) + airlock.set_opacity(TRUE) + else + airlock.airlock_material = "glass" + airlock.glass = TRUE + airlock.update_icon() + airlock.set_opacity(FALSE) + + +/obj/machinery/button/windowtint/power_change(forced = FALSE) + if(!..()) + return if(active && !powered(power_channel)) toggle_tint() -/obj/machinery/button/windowtint/update_icon() +/obj/machinery/button/windowtint/update_icon_state() icon_state = "light[active]" /obj/structure/window/plasmabasic @@ -900,7 +906,7 @@ GLOBAL_LIST_INIT(wcCommon, pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", /obj/structure/window/reinforced/clockwork/ratvar_act() obj_integrity = max_integrity - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/structure/window/reinforced/clockwork/narsie_act() take_damage(rand(25, 75), BRUTE) diff --git a/code/game/objects/structures/wryn.dm b/code/game/objects/structures/wryn.dm index 5afad33eac2..c10d16b84ae 100644 --- a/code/game/objects/structures/wryn.dm +++ b/code/game/objects/structures/wryn.dm @@ -68,41 +68,29 @@ plane = FLOOR_PLANE icon_state = "wax_floor" max_integrity = 10 + var/current_dir var/static/list/floorImageCache -/obj/structure/wryn/floor/proc/updateOverlays() - - overlays.Cut() - - if(!floorImageCache || !floorImageCache.len) - floorImageCache = list() - floorImageCache.len = 4 - floorImageCache["north"] = image('icons/obj/smooth_structures/wryn/floor.dmi', "wax_floor_side_n", layer=2.11, pixel_y = -32) - floorImageCache["south"] = image('icons/obj/smooth_structures/wryn/floor.dmi', "wax_floor_side_s", layer=2.11, pixel_y = 32) - floorImageCache["east"] = image('icons/obj/smooth_structures/wryn/floor.dmi', "wax_floor_side_e", layer=2.11, pixel_x = -32) - floorImageCache["west"] = image('icons/obj/smooth_structures/wryn/floor.dmi', "wax_floor_side_w", layer=2.11, pixel_x = 32) - - var/turf/N = get_step(src, NORTH) - var/turf/S = get_step(src, SOUTH) - var/turf/E = get_step(src, EAST) - var/turf/W = get_step(src, WEST) - if(!locate(/obj/structure/wryn) in N.contents) - if(istype(N, /turf/simulated/floor)) - overlays += floorImageCache["south"] - if(!locate(/obj/structure/wryn) in S.contents) - if(istype(S, /turf/simulated/floor)) - overlays += floorImageCache["north"] - if(!locate(/obj/structure/wryn) in E.contents) - if(istype(E, /turf/simulated/floor)) - overlays += floorImageCache["west"] - if(!locate(/obj/structure/wryn) in W.contents) - if(istype(W, /turf/simulated/floor)) - overlays += floorImageCache["east"] + +/obj/structure/wryn/floor/update_overlays() + . = ..() + for(var/check_dir in GLOB.cardinal) + var/turf/check = get_step(src, check_dir) + if(issimulatedturf(check) && !(locate(/obj/structure/wryn) in check)) + . += floorImageCache["[GetOppositeDir(check_dir)]"] /obj/structure/wryn/floor/proc/fullUpdateWeedOverlays() - for(var/obj/structure/wryn/floor/W in range(1,src)) - W.updateOverlays() + if(!length(floorImageCache)) + floorImageCache = list(4) + floorImageCache["[NORTH]"] = image('icons/obj/smooth_structures/wryn/floor.dmi', "wax_floor_side_n", layer=2.11, pixel_y = -32) + floorImageCache["[SOUTH]"] = image('icons/obj/smooth_structures/wryn/floor.dmi', "wax_floor_side_s", layer=2.11, pixel_y = 32) + floorImageCache["[EAST]"] = image('icons/obj/smooth_structures/wryn/floor.dmi', "wax_floor_side_e", layer=2.11, pixel_x = -32) + floorImageCache["[WEST]"] = image('icons/obj/smooth_structures/wryn/floor.dmi', "wax_floor_side_w", layer=2.11, pixel_x = 32) + + for(var/obj/structure/wryn/floor/floor in range(1,src)) + floor.update_icon(UPDATE_OVERLAYS) + /obj/structure/wryn/floor/New(pos) ..() diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 6d15f484e9e..e84c27e240e 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -3,6 +3,7 @@ name = "station" var/wet = 0 var/image/wet_overlay = null + var/mutable_appearance/melting_olay var/thermite = 0 oxygen = MOLES_O2STANDARD diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index b5c04cb2031..9f5842de11d 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -125,12 +125,11 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama /turf/simulated/floor/blob_act(obj/structure/blob/B) return -/turf/simulated/floor/update_icon() +/turf/simulated/floor/update_overlays() + . = ..() update_visuals() - overlays -= current_overlay if(current_overlay) - overlays.Add(current_overlay) - return 1 + . += current_overlay /turf/simulated/floor/proc/break_tile_to_plating() var/turf/simulated/floor/plating/T = make_plating(FALSE) diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index cdceea71b36..b3dcf69dee9 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -10,6 +10,11 @@ /turf/simulated/floor/wood/broken_states() return list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7") +/turf/simulated/floor/wood/airless + oxygen = 0 + nitrogen = 0 + temperature = TCMB + /turf/simulated/floor/wood/screwdriver_act(mob/user, obj/item/I) . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) @@ -109,7 +114,7 @@ . = ..() update_icon() -/turf/simulated/floor/grass/update_icon() +/turf/simulated/floor/grass/update_icon_state() icon_state = "grass[pick("1","2","3","4")]" /turf/simulated/floor/grass/attackby(obj/item/C, mob/user, params) @@ -145,17 +150,22 @@ clawfootstep = FOOTSTEP_CARPET_BAREFOOT heavyfootstep = FOOTSTEP_GENERIC_HEAVY +/turf/simulated/floor/carpet/airless + oxygen = 0 + nitrogen = 0 + temperature = TCMB + /turf/simulated/floor/carpet/Initialize(mapload) . = ..() update_icon() + /turf/simulated/floor/carpet/broken_states() return list("damaged") -/turf/simulated/floor/carpet/update_icon() - if(!..()) - return - dir = 0 //Prevents wrong smoothing + +/turf/simulated/floor/carpet/update_icon_state() + dir = NONE //Prevents wrong smoothing if(!broken && !burnt) if(smooth) queue_smooth(src) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index dfd63d5ea4c..40851bd4313 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -23,49 +23,52 @@ . = ..() update_icon() + /turf/simulated/floor/light/broken_states() return list("light_broken") -/turf/simulated/floor/light/update_icon() - ..() - if(on) - switch(state) - if(LIGHTFLOOR_ON) - icon_state = "light_on" - set_light(5, null,LIGHT_COLOR_LIGHTBLUE) - if(LIGHTFLOOR_WHITE) - icon_state = "light_on-w" - set_light(5, null,LIGHT_COLOR_WHITE) - if(LIGHTFLOOR_RED) - icon_state = "light_on-r" - set_light(5, null,LIGHT_COLOR_RED) - if(LIGHTFLOOR_GREEN) - icon_state = "light_on-g" - set_light(5, null,LIGHT_COLOR_PURE_GREEN) - if(LIGHTFLOOR_YELLOW) - icon_state = "light_on-y" - set_light(5, null,"#FFFF00") - if(LIGHTFLOOR_BLUE) - icon_state = "light_on-b" - set_light(5, null,LIGHT_COLOR_DARKBLUE) - if(LIGHTFLOOR_PURPLE) - icon_state = "light_on-p" - set_light(5, null,LIGHT_COLOR_PURPLE) - if(LIGHTFLOOR_GENERICCYCLE) - icon_state = "light_on-cycle_all" - set_light(5, null,LIGHT_COLOR_WHITE) - if(LIGHTFLOOR_CYCLEA) - icon_state = "light_on-dancefloor_A" - set_light(5,null,LIGHT_COLOR_RED) - if(LIGHTFLOOR_CYCLEB) - icon_state = "light_on-dancefloor_B" - set_light(5, null,LIGHT_COLOR_DARKBLUE) - else - icon_state = "light_off" - set_light(0) - else + +/turf/simulated/floor/light/update_icon_state() + if(!on) set_light(0) icon_state = "light_off" + return + + switch(state) + if(LIGHTFLOOR_ON) + icon_state = "light_on" + set_light(5, null,LIGHT_COLOR_LIGHTBLUE) + if(LIGHTFLOOR_WHITE) + icon_state = "light_on-w" + set_light(5, null,LIGHT_COLOR_WHITE) + if(LIGHTFLOOR_RED) + icon_state = "light_on-r" + set_light(5, null,LIGHT_COLOR_RED) + if(LIGHTFLOOR_GREEN) + icon_state = "light_on-g" + set_light(5, null,LIGHT_COLOR_PURE_GREEN) + if(LIGHTFLOOR_YELLOW) + icon_state = "light_on-y" + set_light(5, null,"#FFFF00") + if(LIGHTFLOOR_BLUE) + icon_state = "light_on-b" + set_light(5, null,LIGHT_COLOR_DARKBLUE) + if(LIGHTFLOOR_PURPLE) + icon_state = "light_on-p" + set_light(5, null,LIGHT_COLOR_PURPLE) + if(LIGHTFLOOR_GENERICCYCLE) + icon_state = "light_on-cycle_all" + set_light(5, null,LIGHT_COLOR_WHITE) + if(LIGHTFLOOR_CYCLEA) + icon_state = "light_on-dancefloor_A" + set_light(5,null,LIGHT_COLOR_RED) + if(LIGHTFLOOR_CYCLEB) + icon_state = "light_on-dancefloor_B" + set_light(5, null,LIGHT_COLOR_DARKBLUE) + else + icon_state = "light_off" + set_light(0) + /turf/simulated/floor/light/BeforeChange() set_light(0) diff --git a/code/game/turfs/simulated/floor/mineral.dm b/code/game/turfs/simulated/floor/mineral.dm index dd3b20f0b17..4440de90854 100644 --- a/code/game/turfs/simulated/floor/mineral.dm +++ b/code/game/turfs/simulated/floor/mineral.dm @@ -17,12 +17,11 @@ /turf/simulated/floor/mineral/broken_states() return list("[initial(icon_state)]_dam") -/turf/simulated/floor/mineral/update_icon() - if(!..()) - return 0 - if(!broken && !burnt) - if(!(icon_state in icons)) - icon_state = initial(icon_state) + +/turf/simulated/floor/mineral/update_icon_state() + if(!broken && !burnt && !(icon_state in icons)) + icon_state = initial(icon_state) + //PLASMA /turf/simulated/floor/mineral/plasma diff --git a/code/game/turfs/simulated/floor/plasteel_floor.dm b/code/game/turfs/simulated/floor/plasteel_floor.dm index 99f943c53e4..366d9d2a12b 100644 --- a/code/game/turfs/simulated/floor/plasteel_floor.dm +++ b/code/game/turfs/simulated/floor/plasteel_floor.dm @@ -8,9 +8,7 @@ /turf/simulated/floor/plasteel/burnt_states() return list("floorscorched1", "floorscorched2") -/turf/simulated/floor/plasteel/update_icon() - if(!..()) - return 0 +/turf/simulated/floor/plasteel/update_icon_state() if(!broken && !burnt) icon_state = icon_regular_floor dir = floor_regular_dir diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 8896f455dda..a37d7d83633 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -32,9 +32,7 @@ . = ..() burn_tile() -/turf/simulated/floor/plating/update_icon() - if(!..()) - return +/turf/simulated/floor/plating/update_icon_state() if(!broken && !burnt) icon_state = icon_plating //Because asteroids are 'platings' too. @@ -191,7 +189,7 @@ /turf/simulated/floor/engine/attackby(obj/item/C, mob/user, params) if(!C || !user) return - if(istype(C, /obj/item/wrench)) + if(C.tool_behaviour == TOOL_WRENCH) to_chat(user, span_notice("You begin removing rods...")) playsound(src, C.usesound, 80, 1) if(do_after(user, 30 * C.toolspeed * gettoolspeedmod(user), target = src)) @@ -227,12 +225,20 @@ /turf/simulated/floor/engine/cult name = "engraved floor" icon_state = "cult" + var/holy = FALSE + /turf/simulated/floor/engine/cult/Initialize(mapload) . = ..() - if(SSticker.mode)//only do this if the round is going..otherwise..fucking asteroid.. - if(!icon_state == "holy") - icon_state = SSticker.cultdat.cult_floor_icon_state + update_icon(UPDATE_ICON_STATE) + + +/turf/simulated/floor/engine/cult/update_icon_state() + if(SSticker?.cultdat && !holy) + icon_state = SSticker.cultdat.cult_floor_icon_state + return + icon_state = initial(icon_state) + /turf/simulated/floor/engine/cult/narsie_act() return @@ -246,6 +252,7 @@ /turf/simulated/floor/engine/cult/holy icon_state = "holy" + holy = TRUE //air filled floors; used in atmos pressure chambers @@ -361,7 +368,7 @@ icon_state = "ironfoam" metal = MFOAM_IRON -/turf/simulated/floor/plating/metalfoam/update_icon() +/turf/simulated/floor/plating/metalfoam/update_icon_state() switch(metal) if(MFOAM_ALUMINUM) icon_state = "metalfoam" @@ -418,14 +425,6 @@ /turf/simulated/floor/plating/metalfoam/proc/smash() ChangeTurf(baseturf) -/turf/simulated/floor/plating/abductor - name = "alien floor" - icon_state = "alienpod1" - -/turf/simulated/floor/plating/abductor/Initialize(mapload) - . = ..() - icon_state = "alienpod[rand(1,9)]" - /turf/simulated/floor/plating/ice name = "ice sheet" desc = "A sheet of solid ice. Looks slippery." diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 4c23b51b895..53f66b42a32 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -104,14 +104,16 @@ else update_icon() -/turf/simulated/mineral/update_icon() + +/turf/simulated/mineral/update_overlays() + . = ..() if(hardness != initial(hardness)) var/amount = hardness var/mutable_appearance/cracks = mutable_appearance('icons/turf/mining.dmi',"rock_cracks_[amount]",ON_EDGED_TURF_LAYER) var/matrix/M = new M.Translate(4,4) cracks.transform = M - add_overlay(cracks) + . += cracks /turf/simulated/mineral/attack_animal(mob/living/simple_animal/user) diff --git a/code/game/turfs/simulated/shuttle.dm b/code/game/turfs/simulated/shuttle.dm index 10c78c46610..5d010f0649c 100644 --- a/code/game/turfs/simulated/shuttle.dm +++ b/code/game/turfs/simulated/shuttle.dm @@ -61,7 +61,7 @@ /turf/simulated/wall/shuttle/try_decon(obj/item/I, mob/user, params) return -/turf/simulated/wall/shuttle/thermitemelt(mob/user as mob, speed) +/turf/simulated/wall/shuttle/thermitemelt(mob/user, time) return /turf/simulated/wall/shuttle/nodiagonal diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 07d46679d71..752889d54f8 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -25,6 +25,8 @@ thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall + var/melting = FALSE //TRUE if wall is currently being melted with thermite + 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 @@ -71,27 +73,25 @@ if(rotting) . += span_warning("There is fungus growing on [src].") -/turf/simulated/wall/update_icon() + +/turf/simulated/wall/update_overlays() + . = ..() if(!damage_overlays[1]) //list hasn't been populated generate_overlays() queue_smooth(src) if(!damage) - if(damage_overlay) - overlays -= damage_overlays[damage_overlay] - damage_overlay = 0 return - var/overlay = round(damage / damage_cap * damage_overlays.len) + 1 - if(overlay > damage_overlays.len) - overlay = damage_overlays.len + var/overlay = round(damage / damage_cap * length(damage_overlays)) + 1 + if(overlay > length(damage_overlays)) + overlay = length(damage_overlays) if(damage_overlay && overlay == damage_overlay) //No need to update. return - if(damage_overlay) - overlays -= damage_overlays[damage_overlay] - overlays += damage_overlays[overlay] - damage_overlay = overlay + + . += damage_overlays[overlay] + /turf/simulated/wall/proc/generate_overlays() var/alpha_inc = 256 / damage_overlays.len @@ -245,35 +245,87 @@ /turf/simulated/wall/burn_down() if(istype(sheet_type, /obj/item/stack/sheet/mineral/diamond)) return - ChangeTurf(/turf/simulated/floor) + return ChangeTurf(/turf/simulated/floor) + -/turf/simulated/wall/proc/thermitemelt(mob/user as mob, speed) - var/wait = 100 - if(speed) - wait = speed +#define THERMITE_PER_SECOND 2.5 +#define DAMAGE_PER_SECOND 60 + +/** + * Melts down wall into its base turf. + * + * Arguments: + * * user - who used thermite, optional argument used to show message. + * * time - optional override; thermite reagent will not be used for melting, only passed time matters. + */ +/turf/simulated/wall/proc/thermitemelt(mob/user, time) + set waitfor = FALSE + + if(melting) + return if(istype(sheet_type, /obj/item/stack/sheet/mineral/diamond)) return - var/obj/effect/overlay/O = new/obj/effect/overlay( src ) - O.name = "Thermite" - O.desc = "Looks hot." - O.icon = 'icons/effects/fire.dmi' - O.icon_state = "2" - O.anchored = 1 - O.density = 1 - O.layer = 5 + var/obj/effect/overlay/visuals = new(src) + visuals.name = "Thermite" + visuals.desc = "Looks hot." + visuals.icon = 'icons/effects/fire.dmi' + visuals.icon_state = "2" + visuals.anchored = TRUE + visuals.density = TRUE + visuals.layer = FLY_LAYER - src.ChangeTurf(/turf/simulated/floor/plating) - - var/turf/simulated/floor/F = src - F.burn_tile() - F.icon_state = "plating" if(user) - to_chat(user, span_warning("The thermite starts melting through the wall.")) + to_chat(user, span_warning("The thermite starts melting through [src].")) + + if(time) + melting = TRUE + var/sound_timer = 10 + while(time > 0) + if(QDELETED(src)) + return + sound_timer++ + if(sound_timer >= 10) + sound_timer = 0 + playsound(src, 'sound/items/welder.ogg', 100, TRUE) + time = max(0, time - 0.1 SECONDS) + sleep(0.1 SECONDS) + if(QDELETED(src)) + return + var/turf/simulated/floor/our_floor = burn_down() + our_floor.burn_tile() + our_floor.cut_overlay(melting_olay) + if(visuals) + qdel(visuals) + return + + melting = TRUE + + while(reagents.get_reagent_amount("thermite") > 0) + if(QDELETED(src)) + return + reagents.remove_reagent("thermite", THERMITE_PER_SECOND) + if(damage_cap - damage <= DAMAGE_PER_SECOND) + var/turf/simulated/floor/our_floor = burn_down() + our_floor.burn_tile() + break + take_damage(DAMAGE_PER_SECOND) + playsound(src, 'sound/items/welder.ogg', 100, TRUE) + sleep(1 SECONDS) + + if(QDELETED(src)) + return + + if(iswallturf(src)) + melting = FALSE + + cut_overlay(melting_olay) + if(visuals) + qdel(visuals) + +#undef THERMITE_PER_SECOND +#undef DAMAGE_PER_SECOND - spawn(wait) - if(O) qdel(O) - return //Interactions @@ -353,7 +405,7 @@ /turf/simulated/wall/welder_act(mob/user, obj/item/I) . = TRUE - if(thermite && I.use_tool(src, user, volume = I.tool_volume)) + if(reagents?.get_reagent_amount("thermite") && I.use_tool(src, user, volume = I.tool_volume)) thermitemelt(user) return if(rotting) diff --git a/code/game/turfs/simulated/walls_indestructible.dm b/code/game/turfs/simulated/walls_indestructible.dm index 19d8ef7d187..739e68a34fd 100644 --- a/code/game/turfs/simulated/walls_indestructible.dm +++ b/code/game/turfs/simulated/walls_indestructible.dm @@ -59,7 +59,7 @@ /turf/simulated/wall/indestructible/rcd_deconstruct_act() return RCD_NO_ACT -/turf/simulated/wall/indestructible/thermitemelt(mob/user as mob, speed) +/turf/simulated/wall/indestructible/thermitemelt(mob/user, time) return /turf/simulated/wall/indestructible/fakeglass diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 5caf1ae9d52..ee8318877f8 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -267,7 +267,7 @@ /turf/simulated/wall/mineral/titanium/nodecon/try_decon(obj/item/I, mob/user, params) return -/turf/simulated/wall/mineral/titanium/nodecon/thermitemelt(mob/user as mob, speed) +/turf/simulated/wall/mineral/titanium/nodecon/thermitemelt(mob/user, time) return /turf/simulated/wall/mineral/titanium/nodecon/burn_down() diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 037bcda8ef2..b7afc177525 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -8,6 +8,7 @@ sheet_type = /obj/item/stack/sheet/runed_metal sheet_amount = 1 girder_type = /obj/structure/girder/cult + var/holy = FALSE /turf/simulated/wall/cult_fake name = "runed metal wall" @@ -20,12 +21,18 @@ sheet_amount = 1 girder_type = /obj/structure/girder/cult_fake + /turf/simulated/wall/cult/Initialize(mapload) . = ..() - if(SSticker.mode)//game hasn't started offically don't do shit.. - new /obj/effect/temp_visual/cult/turf(src) - if(!icon_state == "holy") - icon_state = SSticker.cultdat.cult_wall_icon_state + update_icon(UPDATE_ICON_STATE) + + +/turf/simulated/wall/cult/update_icon_state() + if(SSticker?.cultdat && !holy) + icon_state = SSticker.cultdat.cult_wall_icon_state + return + icon_state = initial(icon_state) + /turf/simulated/wall/cult_fake/Initialize(mapload) . = ..() @@ -42,6 +49,7 @@ icon_state = "holy" sheet_type = /obj/item/stack/sheet/metal girder_type = /obj/structure/girder + holy = TRUE /turf/simulated/wall/cult/artificer/break_wall() new /obj/effect/temp_visual/cult/turf(get_turf(src)) diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 6739b559b77..2a4ddf66252 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -93,7 +93,7 @@ return ..() /turf/simulated/wall/r_wall/welder_act(mob/user, obj/item/I) - if(thermite && I.use_tool(src, user, volume = I.tool_volume)) + if(reagents?.get_reagent_amount("thermite") && I.use_tool(src, user, volume = I.tool_volume)) thermitemelt(user) return TRUE if(!(d_state in list(RWALL_COVER, RWALL_SUPPORT_RODS, RWALL_CUT_COVER))) @@ -232,9 +232,8 @@ if(prob(30)) dismantle_wall() -/turf/simulated/wall/r_wall/update_icon() - . = ..() +/turf/simulated/wall/r_wall/update_icon_state() if(d_state) icon_state = "r_wall-[d_state]" smooth = SMOOTH_FALSE @@ -243,6 +242,7 @@ smooth = SMOOTH_TRUE icon_state = "" + /turf/simulated/wall/r_wall/devastate_wall() new sheet_type(src, sheet_amount) new /obj/item/stack/sheet/metal(src, 2) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index e558733e1af..816a23dce65 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -62,9 +62,9 @@ /turf/space/transit/Initialize(mapload) . = ..() - update_icon() + update_icon(UPDATE_ICON_STATE) -/turf/space/transit/update_icon() +/turf/space/transit/update_icon_state() var/p = 9 var/angle = 0 var/state = 1 diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 15e049bb4ae..03c09ca7fcc 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -8,6 +8,7 @@ var/slowdown = 0 //negative for faster, positive for slower var/transparent_floor = FALSE //used to check if pipes should be visible under the turf or not + /// Set if the turf should appear on a different layer while in-game and map editing, otherwise use normal layer. var/real_layer = TURF_LAYER layer = MAP_EDITOR_TURF_LAYER @@ -375,19 +376,24 @@ L.Add(T) return L -//Idem, but don't check for ID and goes through open doors -/turf/proc/AdjacentTurfs(list/closed) - var/list/L = new() - var/turf/simulated/T - for(var/dir in GLOB.alldirs2) //arbitrarily ordered list to favor non-diagonal moves in case of ties + +/// Returns the adjacent turfs. Can check for density or cardinal directions only instead of all 8, or just dense turfs entirely. dense_only takes precedence over open_only. +/turf/proc/AdjacentTurfs(open_only = FALSE, cardinal_only = FALSE, dense_only = FALSE) + var/list/L = list() + var/turf/T + var/list/directions = cardinal_only ? GLOB.cardinal : GLOB.alldirs + for(var/dir in directions) T = get_step(src, dir) - if(T in closed) //turf already proceeded by A* + if(!istype(T)) continue - if(istype(T) && !T.density) - if(!CanAtmosPass(T)) - L.Add(T) + if(dense_only && !T.density) + continue + if((open_only && T.density) && !dense_only) + continue + L.Add(T) return L + // check for all turfs, including space ones /turf/proc/AdjacentTurfsSpace(obj/item/card/id/ID = null, list/closed)//check access if one is passed var/list/L = new() @@ -456,7 +462,7 @@ for(var/obj/O in contents) //this is for deleting things like wires contained in the turf if(O.level != 1) continue - if(O.invisibility == INVISIBILITY_MAXIMUM) + if(O.invisibility == INVISIBILITY_MAXIMUM || O.invisibility == INVISIBILITY_ABSTRACT) O.singularity_act() ChangeTurf(baseturf) return 2 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index ba431829557..a188617c0dd 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -283,6 +283,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( if(holder.rights & R_VIEWRUNTIMES) verbs += /client/proc/view_runtimes verbs += /client/proc/ss_breakdown + verbs += /client/proc/toggle_mctabs spawn(1) // This setting exposes the profiler for people with R_VIEWRUNTIMES. They must still have it set in cfg/admin.txt control_freak = 0 diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index b2466aafa1b..13d3cf79412 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2313,7 +2313,7 @@ if(!P.ico) P.ico = new P.ico += "paper_stamp-[stampvalue]" - P.overlays += stampoverlay + P.stamp_overlays += stampoverlay P.stamps += "
    " P.update_icon() P.faxmachineid = fax.UID() @@ -2408,7 +2408,7 @@ if(!P.ico) P.ico = new P.ico += "paper_stamp-[stampvalue]" - P.overlays += stampoverlay + P.stamp_overlays += stampoverlay P.stamps += "
    " P.update_icon() fax.receivefax(P) @@ -2620,14 +2620,14 @@ if(!P.stamped) P.stamped = new P.stamped += /obj/item/stamp/centcom - P.overlays += stampoverlay + P.stamp_overlays += stampoverlay P.stamps += "
    " else if(stamptype == "text") if(!P.stamped) P.stamped = new P.stamped += /obj/item/stamp - P.overlays += stampoverlay + P.stamp_overlays += stampoverlay P.stamps += "
    [stampvalue]" if(destination != "All Departments") @@ -3647,10 +3647,8 @@ hunter_mob.equipOutfit(O, FALSE) var/obj/item/pinpointer/advpinpointer/N = new /obj/item/pinpointer/advpinpointer(hunter_mob) hunter_mob.equip_to_slot_or_del(N, slot_in_backpack) - N.mode = 3 //MODE_ADV, not defined here N.setting = 2 //SETTING_OBJECT, not defined here - N.target = H - N.pinpoint_at(N.target) + N.pinpoint_at(H) N.modelocked = TRUE if(!locate(/obj/item/implant/dust, hunter_mob)) var/obj/item/implant/dust/D = new /obj/item/implant/dust(hunter_mob) diff --git a/code/modules/admin/verbs/gimmick_team.dm b/code/modules/admin/verbs/gimmick_team.dm index 514faacf862..decd1e55ed2 100644 --- a/code/modules/admin/verbs/gimmick_team.dm +++ b/code/modules/admin/verbs/gimmick_team.dm @@ -93,6 +93,7 @@ H.mind.assigned_role = "Event Character" H.mind.special_role = "Event Character" H.mind.offstation_role = TRUE + H.change_voice() H.key = thisplayer.key if(dresscode != "Naked") diff --git a/code/modules/admin/verbs/honksquad.dm b/code/modules/admin/verbs/honksquad.dm index 64e9f48e82a..7ea997d11b1 100644 --- a/code/modules/admin/verbs/honksquad.dm +++ b/code/modules/admin/verbs/honksquad.dm @@ -98,6 +98,7 @@ GLOBAL_VAR_INIT(sent_clownsequritysquad, 0) new_honksquad.mind.special_role = SPECIAL_ROLE_HONKSQUAD new_honksquad.mind.offstation_role = TRUE new_honksquad.add_language("Clownish") + new_honksquad.change_voice() SSticker.mode.traitors |= new_honksquad.mind//Adds them to current traitor list. Which is really the extra antagonist list. new_honksquad.equip_honksquad(honk_leader_selected, rankName) return new_honksquad diff --git a/code/modules/admin/verbs/infiltratorteam_syndicate.dm b/code/modules/admin/verbs/infiltratorteam_syndicate.dm index 8129f473f7b..a34d0222fcb 100644 --- a/code/modules/admin/verbs/infiltratorteam_syndicate.dm +++ b/code/modules/admin/verbs/infiltratorteam_syndicate.dm @@ -125,6 +125,7 @@ GLOBAL_VAR_INIT(sent_syndicate_infiltration_team, 0) new_syndicate_infiltrator.mind.special_role = "Syndicate Infiltrator" new_syndicate_infiltrator.mind.offstation_role = TRUE //they can flee to z2 so make them inelligible as antag targets SSticker.mode.traitors |= new_syndicate_infiltrator.mind //Adds them to extra antag list + new_syndicate_infiltrator.change_voice() new_syndicate_infiltrator.equip_syndicate_infiltrator(syndicate_leader_selected, uplink_tc, is_mgmt) return new_syndicate_infiltrator diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index 13cb21e5661..b6c20d96783 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -119,6 +119,7 @@ GLOBAL_VAR_INIT(sent_syndicate_strike_team, 0) new_syndicate_commando.mind.assigned_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD new_syndicate_commando.mind.special_role = SPECIAL_ROLE_SYNDICATE_DEATHSQUAD new_syndicate_commando.mind.offstation_role = TRUE + new_syndicate_commando.change_voice() SSticker.mode.traitors |= new_syndicate_commando.mind //Adds them to current traitor list. Which is really the extra antagonist list. if(is_leader) new_syndicate_commando.equipOutfit(/datum/outfit/admin/syndicate_strike_team/officer) diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index ebaa9518fe9..a7e2f9cf6b4 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -92,6 +92,13 @@ return ..() +/obj/structure/carp_rift/update_icon_state() + if(charge_state == CHARGE_COMPLETED) + icon_state = "carp_rift_charged" + return + icon_state = (carp_stored > 0) ? "carp_rift_carpspawn" : "carp_rift" + + /obj/structure/carp_rift/process(seconds_per_tick) // If we're fully charged, just start mass spawning carp. if(charge_state == CHARGE_COMPLETED) @@ -132,7 +139,7 @@ // Can we increase the carp spawn pool size? if(last_carp_inc >= carp_interval) carp_stored += 3 - icon_state = "carp_rift_carpspawn" + update_icon(UPDATE_ICON_STATE) if(light_color != LIGHT_COLOR_PURPLE) light_color = LIGHT_COLOR_PURPLE update_light() @@ -146,7 +153,7 @@ GLOB.command_announcement.Announce("Пространственный объект достиг максимального энергетического заряда в зоне [initial(A.name)]. Пожалуйста, ожидайте.", "Отдел Изучения Дикой Природы") max_integrity = INFINITY obj_integrity = INFINITY - icon_state = "carp_rift_charged" + update_icon(UPDATE_ICON_STATE) light_color = LIGHT_COLOR_YELLOW update_light() armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) @@ -210,7 +217,7 @@ to_chat(newcarp, span_boldwarning("Вы прибыли, чтобы помочь космическому дракону защищать разломы. Следуйте поставленной миссии и защитите разлом любой ценой!")) carp_stored-- if(carp_stored <= 0 && charge_state < CHARGE_COMPLETED) - icon_state = "carp_rift" + update_icon(UPDATE_ICON_STATE) light_color = LIGHT_COLOR_BLUE update_light() return TRUE diff --git a/code/modules/antagonists/space_ninja/creeping_widow/creeping_widow_martial_art.dm b/code/modules/antagonists/space_ninja/creeping_widow/creeping_widow_martial_art.dm index 6f0077fe4e5..00d7a1f3c83 100644 --- a/code/modules/antagonists/space_ninja/creeping_widow/creeping_widow_martial_art.dm +++ b/code/modules/antagonists/space_ninja/creeping_widow/creeping_widow_martial_art.dm @@ -15,7 +15,12 @@ icon = 'icons/obj/ninjaobjects.dmi' icon_state = "injector" attack_verb = list("poked", "prodded") - var/used = 0 + var/used = FALSE + + +/obj/item/creeping_widow_injector/update_icon_state() + icon_state = "injector[used ? "-used" : ""]" + /obj/item/creeping_widow_injector/attack_self(mob/living/carbon/human/user as mob) if(!used) @@ -26,18 +31,19 @@ var/datum/martial_art/ninja_martial_art/N = new/datum/martial_art/ninja_martial_art(null) N.teach(user) - used = 1 - icon_state = "injector-used" + used = TRUE + update_icon(UPDATE_ICON_STATE) desc = "A strange autoinjector made of a black metal.
    It appears to be used up and empty." - return 0 - else - to_chat(user, "The [src] has been used already!") - return 1 + return FALSE + + to_chat(user, "The [src] has been used already!") + return TRUE // Ninja martial art datum /datum/martial_art/ninja_martial_art name = "Creeping Widow" + weight = 10 combos = list( /datum/martial_combo/ninja_martial_art/energy_tornado, /datum/martial_combo/ninja_martial_art/palm_strike, /datum/martial_combo/ninja_martial_art/wrench_wrist, diff --git a/code/modules/antagonists/space_ninja/ninja_borg_module.dm b/code/modules/antagonists/space_ninja/ninja_borg_module.dm index d3fb2a1ea51..57b5319b055 100644 --- a/code/modules/antagonists/space_ninja/ninja_borg_module.dm +++ b/code/modules/antagonists/space_ninja/ninja_borg_module.dm @@ -26,7 +26,6 @@ /mob/living/silicon/robot/syndicate/saboteur/ninja/New(loc) ..() mmi = new /obj/item/mmi/robotic_brain/ninja(src) - mmi.icon_state = "wanter" /mob/living/silicon/robot/syndicate/saboteur/ninja/init(alien = FALSE, mob/living/silicon/ai/ai_to_sync_to = null) . = ..() diff --git a/code/modules/antagonists/space_ninja/ninja_datum.dm b/code/modules/antagonists/space_ninja/ninja_datum.dm index 404504579dc..5d1a77c26b4 100644 --- a/code/modules/antagonists/space_ninja/ninja_datum.dm +++ b/code/modules/antagonists/space_ninja/ninja_datum.dm @@ -222,7 +222,7 @@ var/warning = cell.charge >= check_percentage ? "" : "_warning" hud.ninja_energy_display.icon_state = "ninja_energy_display_[my_suit.color_choice][warning]" hud.ninja_energy_display.maptext = "
    [round(cell.charge)]
    " - hud.ninja_energy_display.invisibility = my_suit.show_charge_UI ? 0 : 100 + hud.ninja_energy_display.invisibility = my_suit.show_charge_UI ? 0 : INVISIBILITY_ABSTRACT // concentration level if(!hud.ninja_focus_display && owner.martial_art && istype(owner.martial_art, /datum/martial_art/ninja_martial_art)) @@ -237,7 +237,7 @@ // martial art update if(creeping_widow && my_suit) hud.ninja_focus_display.icon_state = creeping_widow.has_focus ? "focus_active_[my_suit.color_choice]" : "focus" - hud.ninja_focus_display.invisibility = my_suit.show_concentration_UI ? 0 : 100 + hud.ninja_focus_display.invisibility = my_suit.show_concentration_UI ? 0 : INVISIBILITY_ABSTRACT /** diff --git a/code/modules/antagonists/traitor/contractor/items/contractor_pinpointer.dm b/code/modules/antagonists/traitor/contractor/items/contractor_pinpointer.dm index 1d7f33f564f..8008622910c 100644 --- a/code/modules/antagonists/traitor/contractor/items/contractor_pinpointer.dm +++ b/code/modules/antagonists/traitor/contractor/items/contractor_pinpointer.dm @@ -11,38 +11,41 @@ /// The minimum range for the pinpointer to function properly. var/min_range = 15 /// The first person to have used the item. If this is set already, no one else can use it. - var/mob/owner = null - -/obj/item/pinpointer/crew/contractor/pinpoint_at(atom/target) - if(target && trackable(target)) - // Calc dir - var/turf/T = get_turf(target) - var/turf/L = get_turf(src) - dir = get_dir(L, T) - // Calc dist - var/dist = get_dist(L, T) - if(ISINRANGE(dist, -1, min_range)) - icon_state = icon_direct - else if(ISINRANGE(dist, min_range + 1, min_range + 8)) - icon_state = icon_close - else if(ISINRANGE(dist, min_range + 9, min_range + 16)) - icon_state = icon_medium - else if(ISINRANGE(dist, min_range + 16, INFINITY)) - icon_state = icon_far - else + var/mob/owner + + +/obj/item/pinpointer/crew/contractor/update_icon_state() + if(mode == 0) // MODE_OFF + icon_state = icon_off + return + + if(!target) icon_state = icon_null + return -/obj/item/pinpointer/crew/contractor/trackable(mob/living/carbon/human/H) - var/turf/here = get_turf(src) - var/turf/there = get_turf(H) - return here && there && there.z == here.z + if(ISINRANGE(prev_dist, -1, min_range)) + icon_state = icon_direct + else if(ISINRANGE(prev_dist, min_range + 1, min_range + 8)) + icon_state = icon_close + else if(ISINRANGE(prev_dist, min_range + 9, min_range + 16)) + icon_state = icon_medium + else if(ISINRANGE(prev_dist, min_range + 16, INFINITY)) + icon_state = icon_far -/obj/item/pinpointer/crew/contractor/attack_self(mob/living/user) + +/obj/item/pinpointer/crew/contractor/is_trackable(mob/living/carbon/human/pin_target) + source_turf = get_turf(src) + target_turf = get_turf(pin_target) + return source_turf && target_turf && source_turf.z == target_turf.z + + +/obj/item/pinpointer/crew/contractor/cycle(mob/user, silent = FALSE) if(owner) if(owner != user) - to_chat(user, "[src] refuses to do anything.") + to_chat(user, span_warning("[src] refuses to do anything.")) return else owner = user - to_chat(user, "[src] now recognizes you as its sole user.") + to_chat(user, span_notice("[src] now recognizes you as its sole user.")) return ..() + diff --git a/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm b/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm index 1facb14919b..b592f2d3a70 100644 --- a/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm @@ -150,7 +150,7 @@ update_vampire_spell_name() -/obj/effect/proc_holder/spell/fireball/demonic_grasp/update_icon() +/obj/effect/proc_holder/spell/fireball/demonic_grasp/update_icon_state() return diff --git a/code/modules/arcade/arcade_base.dm b/code/modules/arcade/arcade_base.dm index 2ecf5ecfd5b..e2c5e750c2a 100644 --- a/code/modules/arcade/arcade_base.dm +++ b/code/modules/arcade/arcade_base.dm @@ -60,7 +60,7 @@ return /obj/machinery/arcade/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/screwdriver) && anchored) + if(I.tool_behaviour == TOOL_SCREWDRIVER && anchored) playsound(src.loc, I.usesound, 50, 1) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") @@ -76,7 +76,7 @@ if(pay_with_cash(cash, user, token_price, name)) tokens += 1 return - if(panel_open && component_parts && istype(I, /obj/item/crowbar)) + if(panel_open && component_parts && I.tool_behaviour == TOOL_CROWBAR) default_deconstruction_crowbar(user, I) return return ..() diff --git a/code/modules/arcade/arcade_prize.dm b/code/modules/arcade/arcade_prize.dm index fa669d5212b..0c84662dc14 100644 --- a/code/modules/arcade/arcade_prize.dm +++ b/code/modules/arcade/arcade_prize.dm @@ -7,20 +7,27 @@ desc = "A toy is a toy, but a prize ball could be anything! It could even be a toy!" icon = 'icons/obj/machines/arcade.dmi' icon_state = "prizeball_1" - var/opening = 0 + var/choose_icon_state + var/opening = FALSE var/possible_contents = list(/obj/random/carp_plushie, /obj/random/plushie, /obj/random/figure, /obj/item/toy/eight_ball, /obj/item/stack/tickets) -/obj/item/toy/prizeball/New() - ..() - icon_state = pick("prizeball_1","prizeball_2","prizeball_3") +/obj/item/toy/prizeball/Initialize(mapload) + . = ..() + choose_icon_state = pick("prizeball_1","prizeball_2","prizeball_3") + update_icon(UPDATE_ICON_STATE) -/obj/item/toy/prizeball/attack_self(mob/user as mob) + +/obj/item/toy/prizeball/update_icon_state() + icon_state = opening ? "prizeconfetti" : choose_icon_state + + +/obj/item/toy/prizeball/attack_self(mob/user) if(opening) return - opening = 1 + opening = TRUE + update_icon(UPDATE_ICON_STATE) playsound(loc, 'sound/items/bubblewrap.ogg', 30, TRUE) - icon_state = "prizeconfetti" - src.color = pick(GLOB.random_color_list) + color = pick(GLOB.random_color_list) var/prize_inside = pick(possible_contents) spawn(10) user.temporarily_remove_item_from_inventory(src) @@ -72,14 +79,10 @@ /obj/item/stack/tickets/five amount = 5 -/obj/item/stack/tickets/New(var/loc, var/amount=null) - ..() - update_icon() - -/obj/item/stack/tickets/attack_self(mob/user as mob) +/obj/item/stack/tickets/attack_self(mob/user) return -/obj/item/stack/tickets/update_icon() +/obj/item/stack/tickets/update_icon_state() switch(get_amount()) if(1 to 3) icon_state = "tickets_1" // One ticket diff --git a/code/modules/arcade/claw_game.dm b/code/modules/arcade/claw_game.dm index 6cbc35c4ebc..60117788f6c 100644 --- a/code/modules/arcade/claw_game.dm +++ b/code/modules/arcade/claw_game.dm @@ -20,7 +20,7 @@ GLOBAL_VAR(claw_game_html) /obj/machinery/arcade/claw/New() ..() machine_image = pick("_1", "_2") - update_icon() + update_icon(UPDATE_ICON_STATE) component_parts = list() component_parts += new /obj/item/circuitboard/clawgame(null) @@ -39,7 +39,7 @@ GLOBAL_VAR(claw_game_html) bin_upgrades = B.rating bonus_prize_chance = bin_upgrades * 5 //equals +5% chance per matter bin rating level (+20% with rating 4) -/obj/machinery/arcade/claw/update_icon() +/obj/machinery/arcade/claw/update_icon_state() if(stat & BROKEN) icon_state = "clawmachine[machine_image]_broken" else if(panel_open) @@ -58,7 +58,7 @@ GLOBAL_VAR(claw_game_html) atom_say("ПОБЕДИТЕЛЬ!") new /obj/item/toy/prizeball(get_turf(src)) playsound(loc, 'sound/arcade/win.ogg', 50, TRUE) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), 10) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon), UPDATE_ICON_STATE), 1 SECONDS) /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 fa75b35bded..b661cfb5fab 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -40,16 +40,16 @@ else to_chat(user, "\The [T] seems stuck to your hand!") return - if(istype(O, /obj/item/screwdriver) && anchored) + if(O.tool_behaviour == TOOL_SCREWDRIVER && anchored) playsound(src.loc, O.usesound, 50, 1) panel_open = !panel_open to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") update_icon() return if(panel_open) - if(istype(O, /obj/item/wrench)) + if(O.tool_behaviour == TOOL_WRENCH) default_unfasten_wrench(user, O) - if(component_parts && istype(O, /obj/item/crowbar)) + if(component_parts && O.tool_behaviour == TOOL_CROWBAR) if(tickets) //save the tickets! print_tickets() default_deconstruction_crowbar(user, O) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index e1fa3b31a54..40733745909 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -1,8 +1,8 @@ -#define WIRE_RECEIVE (1<<0) //Allows pulse(0) to call Activate() -#define WIRE_PULSE (1<<1) //Allows pulse(0) to act on the holder -#define WIRE_PULSE_SPECIAL (1<<2) //Allows pulse(0) to act on the holders special assembly -#define WIRE_RADIO_RECEIVE (1<<3) //Allows pulse(1) to call Activate() -#define WIRE_RADIO_PULSE (1<<4) //Allows pulse(1) to send a radio message +#define WIRE_RECEIVE (1<<0) //Allows pulse(FALSE) to call Activate() +#define WIRE_PULSE (1<<1) //Allows pulse(FALSE) to act on the holder +#define WIRE_PULSE_SPECIAL (1<<2) //Allows pulse(FALSE) to act on the holders special assembly +#define WIRE_RADIO_RECEIVE (1<<3) //Allows pulse(TRUE) to call Activate() +#define WIRE_RADIO_PULSE (1<<4) //Allows pulse(TRUE) to send a radio message /obj/item/assembly name = "assembly" @@ -30,54 +30,45 @@ var/wires = WIRE_RECEIVE | WIRE_PULSE var/datum/wires/connected = null // currently only used by timer/signaler -/obj/item/assembly/proc/activate() //What the device does when turned on - return -/obj/item/assembly/proc/pulsed(radio = FALSE) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs - return +/obj/item/assembly/Destroy() + if(istype(loc, /obj/item/assembly_holder) || istype(holder)) + var/obj/item/assembly_holder/A = loc + if(A.a_left == src) + A.a_left = null + else if(A.a_right == src) + A.a_right = null + holder = null + return ..() -/obj/item/assembly/proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here - return -/obj/item/assembly/proc/attach_assembly(obj/A, mob/user) //Called when an assembly is attacked by another +/// Called when the holder is moved +/obj/item/assembly/proc/holder_movement(mob/user) return -/obj/item/assembly/proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var - return -/obj/item/assembly/proc/holder_movement(mob/user) //Called when the holder is moved +/// Called when attack_self is called +/obj/item/assembly/interact(mob/user) return -/obj/item/assembly/proc/describe() // Called by grenades to describe the state of the trigger (time left, etc) - return "The trigger assembly looks broken!" -/obj/item/assembly/interact(mob/user) //Called when attack_self is called - return - -/obj/item/assembly/process_cooldown() - cooldown-- - if(cooldown <= 0) +/// Called via 1 SECONDS to have it count down the cooldown var +/obj/item/assembly/proc/process_cooldown() + if(cooldown-- <= 0) return FALSE - addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 10) + addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 1 SECONDS) return TRUE -/obj/item/assembly/Destroy() - if(istype(loc, /obj/item/assembly_holder) || istype(holder)) - var/obj/item/assembly_holder/A = loc - if(A.a_left == src) - A.a_left = null - else if(A.a_right == src) - A.a_right = null - holder = null - return ..() -/obj/item/assembly/pulsed(radio = FALSE) +/// Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs +/obj/item/assembly/proc/pulsed(radio = FALSE) if(holder && (wires & WIRE_RECEIVE)) activate() if(radio && (wires & WIRE_RADIO_RECEIVE)) activate() return TRUE + /* Called when this device attempts to act on another device, * var/radio determines if it was sent via radio or direct * var/mob/user for logging @@ -87,61 +78,72 @@ connected.pulse_assembly(src) return TRUE if(holder && (wires & WIRE_PULSE)) - holder.process_activation(src, 1, 0, user) + holder.process_activation(src, TRUE, FALSE, user) if(holder && (wires & WIRE_PULSE_SPECIAL)) - holder.process_activation(src, 0, 1, user) + holder.process_activation(src, FALSE, TRUE, user) if(istype(loc, /obj/item/grenade)) // This is a hack. Todo: Manage this better -Sayu var/obj/item/grenade/G = loc G.prime(user) // Adios, muchachos return TRUE -/obj/item/assembly/activate() + +/// What the device does when turned on +/obj/item/assembly/proc/activate() if(!secured || cooldown > 0) return FALSE cooldown = 2 addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 10) return TRUE -/obj/item/assembly/toggle_secure() + +/// Code that has to happen when the assembly is un\secured goes here +/obj/item/assembly/proc/toggle_secure() secured = !secured update_icon() return secured -/obj/item/assembly/attach_assembly(obj/item/assembly/A, mob/user) - holder = new /obj/item/assembly_holder(get_turf(src)) - if(holder.attach(A, src, user)) - to_chat(user, "You attach [A] to [src]!") + +/// Called when an assembly is attacked by another +/obj/item/assembly/proc/attach_assembly(obj/item/assembly/assembly, mob/user) + holder = new /obj/item/assembly_holder(drop_location()) + user?.put_in_hands(holder, ignore_anim = FALSE) + if(holder.attach(assembly, src, user)) + to_chat(user, span_notice("You attach [assembly] to [src]!")) return TRUE return FALSE + /obj/item/assembly/attackby(obj/item/W, mob/user, params) if(isassembly(W)) var/obj/item/assembly/A = W if(!A.secured && !secured) attach_assembly(A, user) return - return ..() + /obj/item/assembly/screwdriver_act(mob/user, obj/item/I) . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return if(toggle_secure()) - to_chat(user, "[src] is ready!") + to_chat(user, span_notice("[src] is ready!")) else - to_chat(user, "[src] can now be attached!") + to_chat(user, span_notice("[src] can now be attached!")) + /obj/item/assembly/process() - STOP_PROCESSING(SSobj, src) + return PROCESS_KILL + /obj/item/assembly/examine(mob/user) . = ..() - if(in_range(src, user) || loc == user) + if(in_range(src, user)) if(secured) - . += "[src] is ready!" + . += span_notice("[src] need to be secured!") else - . += "[src] can be attached!" + . += span_notice("[src] can be attached!") + /obj/item/assembly/attack_self(mob/user) if(!user) @@ -150,5 +152,3 @@ interact(user) return TRUE -/obj/item/assembly/interact(mob/user) - return diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 9189df8560f..60efca14515 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -12,21 +12,29 @@ var/obj/item/tank/bombtank = null //the second part of the bomb is a plasma tank origin_tech = "materials=1;engineering=1" + /obj/item/onetankbomb/ComponentInitialize() . = ..() AddComponent(/datum/component/proximity_monitor) + /obj/item/onetankbomb/examine(mob/user) . = ..() . += bombtank.examine(user) -/obj/item/onetankbomb/update_icon() + +/obj/item/onetankbomb/update_icon_state() if(bombtank) icon_state = bombtank.icon_state + + +/obj/item/onetankbomb/update_overlays() + . = ..() if(bombassembly) - overlays += bombassembly.icon_state - overlays += bombassembly.overlays - overlays += "bomb_assembly" + . += bombassembly.icon_state + . += bombassembly.overlays + . += "bomb_assembly" + /obj/item/onetankbomb/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/analyzer)) @@ -34,13 +42,14 @@ return return ..() + /obj/item/onetankbomb/wrench_act(mob/user, obj/item/I) //This is basically bomb assembly code inverted. apparently it works. if(status) return . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - to_chat(user, "You disassemble [src].") + to_chat(user, span_notice("You disassemble [src].")) bombassembly.loc = user.loc bombassembly.master = null bombassembly = null @@ -49,6 +58,7 @@ bombtank = null qdel(src) + /obj/item/onetankbomb/welder_act(mob/user, obj/item/I) . = TRUE if(!I.use_tool(src, user, volume = I.tool_volume)) @@ -56,6 +66,7 @@ if(!status) status = TRUE investigate_log("[key_name_log(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]", INVESTIGATE_BOMB) + log_game("[key_name(user)] welded a single tank bomb. Temperature: [bombtank.air_contents.temperature - T0C]") to_chat(user, "A pressure hole has been bored to [bombtank] valve. [bombtank] can now be ignited.") add_attack_logs(user, src, "welded a single tank bomb. Temperature: [bombtank.air_contents.temperature-T0C]", ATKLOG_FEW) else @@ -70,9 +81,10 @@ add_fingerprint(user) return + /obj/item/onetankbomb/receive_signal() //This is mainly called by the sensor through sense() to the holder, and from the holder to here. visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") - sleep(10) + sleep(1 SECONDS) if(!src) return if(status) @@ -80,26 +92,32 @@ else bombtank.release() + /obj/item/onetankbomb/HasProximity(atom/movable/AM) if(bombassembly) bombassembly.HasProximity(AM) + /obj/item/onetankbomb/Crossed(atom/movable/AM, oldloc) //for mousetraps if(bombassembly) bombassembly.Crossed(AM, oldloc) + /obj/item/onetankbomb/on_found(mob/finder) //for mousetraps if(bombassembly) bombassembly.on_found(finder) + /obj/item/onetankbomb/hear_talk(mob/living/M, list/message_pieces) if(bombassembly) bombassembly.hear_talk(M, message_pieces) + /obj/item/onetankbomb/hear_message(mob/living/M, msg) if(bombassembly) bombassembly.hear_message(M, msg) + // ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ---------- /obj/item/tank/proc/bomb_assemble(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb @@ -126,6 +144,7 @@ R.update_icon() return + /obj/item/tank/proc/detonate() //This happens when a bomb is told to explode var/fuel_moles = air_contents.toxins + air_contents.oxygen/6 var/strength = 1 @@ -175,6 +194,7 @@ qdel(master) qdel(src) + /obj/item/tank/proc/release() //This happens when the bomb is not welded. Tank contents are just spat out. var/datum/gas_mixture/removed = air_contents.remove(air_contents.total_moles()) var/turf/simulated/T = get_turf(src) @@ -182,3 +202,4 @@ return T.assume_air(removed) air_update_turf() + diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 0372ed7d2e6..641e559ae7c 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -1,3 +1,6 @@ +#define MAX_HEALTH_ACTIVATE 0 +#define MIN_HEALTH_ACTIVATE -90 + /obj/item/assembly/health name = "health sensor" desc = "Used for scanning and monitoring health." @@ -6,10 +9,12 @@ origin_tech = "magnets=1;biotech=1" secured = FALSE + /// Are we scanning our user's health? var/scanning = FALSE - var/health_scan - var/alarm_health = 0 - + /// Our user's health + var/user_health + /// The health amount on which to activate + var/alarm_health = MAX_HEALTH_ACTIVATE /obj/item/assembly/health/activate() @@ -18,47 +23,51 @@ toggle_scan() return FALSE + /obj/item/assembly/health/toggle_secure() secured = !secured if(secured && scanning) START_PROCESSING(SSobj, src) else scanning = FALSE + user_health = null // Clear out the user data, we're no longer scanning STOP_PROCESSING(SSobj, src) update_icon() return secured + /obj/item/assembly/health/multitool_act(mob/user, obj/item/I) . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - if(alarm_health == 0) - alarm_health = -90 + if(alarm_health == MAX_HEALTH_ACTIVATE) + alarm_health = MIN_HEALTH_ACTIVATE user.show_message("You toggle [src] to \"detect death\" mode.") else - alarm_health = 0 + alarm_health = MAX_HEALTH_ACTIVATE user.show_message("You toggle [src] to \"detect critical state\" mode.") + /obj/item/assembly/health/process() if(!scanning || !secured) + STOP_PROCESSING(SSobj, src) // It should never reach here, but if it somehow does stop processing return - var/atom/A = src - if(connected && connected.holder) - A = connected.holder - - for(A, A && !ismob(A), A=A.loc); - // like get_turf(), but for mobs. - var/mob/living/M = A + var/atom/our_source = src + if(connected?.holder) + our_source = connected.holder - if(M) - health_scan = M.health - if(health_scan <= alarm_health) - pulse(FALSE, M) - audible_message("[bicon(src)] *beep* *beep*") - toggle_scan() + if(!get(our_source, /mob/living)) + user_health = null // We aint on a living thing, remove the previous data return - return + + var/mob/living/user = our_source + user_health = user.health + if(user_health <= alarm_health) // Its a health detector, not a death detector + pulse(FALSE, user) + audible_message("[bicon(src)] *beep* *beep*") + toggle_scan() + /obj/item/assembly/health/proc/toggle_scan() if(!secured) @@ -67,40 +76,44 @@ if(scanning) START_PROCESSING(SSobj, src) else + user_health = null // Clear out the user data, we're no longer scanning STOP_PROCESSING(SSobj, src) - return + /obj/item/assembly/health/interact(mob/user)//TODO: Change this to the wires thingy if(!secured) - user.show_message("The [name] is unsecured!") + user.show_message(span_warning("The [name] is unsecured!")) return FALSE var/dat = text({"Health Sensor [scanning?"On":"Off"]"}) - if(scanning && health_scan) - dat += "
    Health: [health_scan]" + if(scanning && user_health) + dat += "
    Health: [user_health]" var/datum/browser/popup = new(user, "hscan", name, 400, 400, src) popup.set_content(dat) popup.open() - return /obj/item/assembly/health/Topic(href, href_list) ..() - if(!ismob(usr)) + if(!isliving(usr)) return - var/mob/user = usr + var/mob/living/user = usr - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=hscan") - onclose(usr, "hscan") + if(user.incapacitated() || user.restrained() || !in_range(loc, user)) + user << browse(null, "window=hscan") + onclose(user, "hscan") return if(href_list["scanning"]) toggle_scan() if(href_list["close"]) - usr << browse(null, "window=hscan") + user << browse(null, "window=hscan") return attack_self(user) - return + + +#undef MAX_HEALTH_ACTIVATE +#undef MIN_HEALTH_ACTIVATE + diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 7a27cf88768..1c48989a0a5 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -13,11 +13,6 @@ var/obj/item/assembly/a_left = null var/obj/item/assembly/a_right = null -/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) - return /obj/item/assembly_holder/Destroy() if(a_left) @@ -26,7 +21,8 @@ a_right.holder = null return ..() -/obj/item/assembly_holder/attach(obj/item/D, obj/item/D2, mob/user) + +/obj/item/assembly_holder/proc/attach(obj/item/D, obj/item/D2, mob/user) if(!D || !D2) return FALSE if(!isassembly(D) || !isassembly(D2)) @@ -50,35 +46,52 @@ if(has_prox_sensors()) AddComponent(/datum/component/proximity_monitor) name = "[A1.name]-[A2.name] assembly" - update_icon() + update_icon(UPDATE_OVERLAYS) return TRUE + /obj/item/assembly_holder/proc/has_prox_sensors() if(istype(a_left, /obj/item/assembly/prox_sensor) || istype(a_right, /obj/item/assembly/prox_sensor)) return TRUE return FALSE -/obj/item/assembly_holder/update_icon() - overlays.Cut() + +/obj/item/assembly_holder/proc/process_activation(obj/D, normal = TRUE, special = TRUE, mob/user) + if(!D) + return FALSE + if(normal && a_right && a_left) + if(a_right != D) + a_right.pulsed() + if(a_left != D) + a_left.pulsed() + if(master) + var/datum/signal/signal = new + signal.source = src + signal.user = user + master.receive_signal(signal) + return TRUE + + +/obj/item/assembly_holder/update_overlays() + . = ..() if(a_left) - overlays += "[a_left.icon_state]_left" + . += "[a_left.icon_state]_left" for(var/O in a_left.attached_overlays) - overlays += "[O]_l" + . += "[O]_l" if(a_right) - overlays += "[a_right.icon_state]_right" + . += "[a_right.icon_state]_right" for(var/O in a_right.attached_overlays) - overlays += "[O]_r" - if(master) - master.update_icon() + . += "[O]_r" + master?.update_icon() /obj/item/assembly_holder/examine(mob/user) . = ..() - if(in_range(src, user) || loc == user) + if(in_range(src, user)) if(secured) - . += "[src] is ready!" + . += span_notice("[src] can be attached!") else - . += "[src] can be attached!" + . += span_notice("[src] need to be secured!") /obj/item/assembly_holder/HasProximity(atom/movable/AM) @@ -94,6 +107,7 @@ if(a_right) a_right.Crossed(AM, oldloc) + /obj/item/assembly_holder/on_found(mob/finder) if(a_left) a_left.on_found(finder) @@ -107,26 +121,31 @@ if(a_right) a_right.hear_talk(M, message_pieces) + /obj/item/assembly_holder/hear_message(mob/living/M, msg) if(a_left) a_left.hear_message(M, msg) if(a_right) a_right.hear_message(M, msg) + /obj/item/assembly_holder/proc/process_movement(mob/user) // infrared beams and prox sensors if(a_left && a_right) a_left.holder_movement(user) a_right.holder_movement(user) + /obj/item/assembly_holder/Move() . = ..() process_movement() return + /obj/item/assembly_holder/pickup(mob/user) . = ..() process_movement(user) + /obj/item/assembly_holder/Bump(atom/A) ..() var/triggered @@ -138,6 +157,7 @@ triggered = AM process_movement(triggered) + /obj/item/assembly_holder/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // called when a throw stops ..() var/triggered @@ -145,16 +165,17 @@ triggered = throwing.thrower process_movement(triggered) + /obj/item/assembly_holder/attack_hand(mob/user)//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess if(a_left && a_right) a_left.holder_movement(user) a_right.holder_movement(user) ..() - return + /obj/item/assembly_holder/screwdriver_act(mob/user, obj/item/I) if(!a_left || !a_right) - to_chat(user, "BUG:Assembly part missing, please report this!") + to_chat(user, span_warning("BUG:Assembly part missing, please report this!")) return . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) @@ -163,16 +184,17 @@ a_right.toggle_secure() secured = !secured if(secured) - to_chat(user, "[src] is ready!") + to_chat(user, span_notice("[src] can now be attached!")) else - to_chat(user, "[src] can now be taken apart!") + to_chat(user, span_notice("[src] can now be taken apart!")) update_icon() + /obj/item/assembly_holder/attack_self(mob/user) add_fingerprint(user) if(secured) if(!a_left || !a_right) - to_chat(user, "Assembly part missing!") + to_chat(user, span_warning("Assembly part missing!")) return if(istype(a_left, a_right.type))//If they are the same type it causes issues due to window code switch(alert("Which side would you like to use?",,"Left","Right")) @@ -190,24 +212,11 @@ return FALSE if(a_left) a_left.holder = null - a_left.loc = T + a_left.forceMove(T) + user.put_in_hands(a_left, ignore_anim = FALSE) if(a_right) a_right.holder = null - a_right.loc = T + a_right.forceMove(T) + user.put_in_hands(a_left, ignore_anim = FALSE) qdel(src) - -/obj/item/assembly_holder/process_activation(obj/D, normal = TRUE, special = TRUE, mob/user) - if(!D) - return FALSE - if(normal && a_right && a_left) - if(a_right != D) - a_right.pulsed(0) - if(a_left != D) - a_left.pulsed(0) - if(master) - var/datum/signal/signal = new - signal.source = src - signal.user = user - master.receive_signal(signal) - return TRUE diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index b81acbbe2b0..0389339efb7 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -4,42 +4,62 @@ icon_state = "igniter" materials = list(MAT_METAL=500, MAT_GLASS=50) origin_tech = "magnets=1" - var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread + var/datum/effect_system/spark_spread/sparks -/obj/item/assembly/igniter/New() - ..() - sparks.set_up(2, 0, src) + +/obj/item/assembly/igniter/Initialize(mapload) + . = ..() + sparks = new /datum/effect_system/spark_spread + sparks.set_up(2, FALSE, src) sparks.attach(src) + /obj/item/assembly/igniter/Destroy() QDEL_NULL(sparks) return ..() -/obj/item/assembly/igniter/describe() - return "The igniter is [secured ? "secured." : "unsecured."]" +/obj/item/assembly/igniter/examine(mob/user) + . = ..() + . += span_notice("The igniter is [secured ? "secured." : "unsecured."]") /obj/item/assembly/igniter/activate() if(!..()) - return FALSE//Cooldown check + return FALSE //Cooldown check + var/turf/location = get_turf(loc) if(location) - location.hotspot_expose(1000,1000) + location.hotspot_expose(1000, 1000) + + sparks.start() + if(istype(loc, /obj/item/assembly_holder)) - if(istype(loc.loc, /obj/structure/reagent_dispensers/fueltank)) - var/obj/structure/reagent_dispensers/fueltank/tank = loc.loc + var/locloc = loc.loc + if(istype(locloc, /obj/structure/reagent_dispensers/fueltank)) + var/obj/structure/reagent_dispensers/fueltank/tank = locloc if(tank) - tank.boom(TRUE) - if(istype(loc.loc, /obj/item/reagent_containers/glass/beaker)) - var/obj/item/reagent_containers/glass/beaker/beakerbomb = loc.loc + tank.boom(TRUE) // this qdel's `src` + + if(istype(locloc, /obj/item/onetankbomb)) + var/obj/item/onetankbomb/bomb = locloc + if(bomb?.bombtank) + bomb.bombtank.detonate() + + else if(istype(locloc, /obj/item/reagent_containers/glass/beaker)) + var/obj/item/reagent_containers/glass/beaker/beakerbomb = locloc if(beakerbomb) beakerbomb.heat_beaker() - sparks.start() + + else if(istype(locloc, /obj/item/grenade/chem_grenade)) + var/obj/item/grenade/chem_grenade/CG = locloc + CG.prime() + return TRUE /obj/item/assembly/igniter/attack_self(mob/user) - activate() + if(!istype(loc, /obj/item/assembly_holder)) + activate() add_fingerprint(user) - return + diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 7211b74d433..01506870ac0 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -7,7 +7,7 @@ bomb_name = "tripwire mine" - secured = FALSE // toggle_secure()'ed in New() for correct adding to processing_objects, won't work otherwise + secured = FALSE // toggle_secure()'ed in Initialize() for correct adding to processing_objects, won't work otherwise dir = EAST var/on = FALSE var/visible = TRUE @@ -18,6 +18,13 @@ var/emission_cycles = 0 var/emission_cap = 20 + +/obj/item/assembly/infra/Initialize(mapload) + . = ..() + if(!secured) + toggle_secure() + + /obj/item/assembly/infra/Destroy() if(first) QDEL_NULL(first) @@ -25,12 +32,12 @@ fire_location = null return ..() -/obj/item/assembly/infra/describe() - return "The assembly is [secured ? "secure" : "not secure"]. The infrared trigger is [on ? "on" : "off"]." /obj/item/assembly/infra/examine(mob/user) . = ..() - . += describe() + . += span_notice("The assembly is [secured ? "secure" : "not secure"]. The infrared trigger is [on ? "on" : "off"].") + . += span_info("Alt-Click to rotate it.") + /obj/item/assembly/infra/activate() if(!..()) @@ -39,6 +46,7 @@ update_icon() return TRUE + /obj/item/assembly/infra/toggle_secure() secured = !secured if(secured) @@ -51,25 +59,22 @@ update_icon() return secured -/obj/item/assembly/infra/New() - ..() - if(!secured) - toggle_secure() -/obj/item/assembly/infra/proc/arm() // Forces the device to arm no matter its current state. +/// Forces the device to arm no matter its current state. +/obj/item/assembly/infra/proc/arm() if(!secured) // Checked because arm() might be called sometime after the object is spawned. toggle_secure() - on = 1 + on = TRUE -/obj/item/assembly/infra/update_icon() - overlays.Cut() + +/obj/item/assembly/infra/update_overlays() + . = ..() attached_overlays = list() if(on) - overlays += "infrared_on" + . += "infrared_on" attached_overlays += "infrared_on" + holder?.update_icon() - if(holder) - holder.update_icon() /obj/item/assembly/infra/process() var/turf/T = get_turf(src) @@ -89,7 +94,7 @@ emission_cycles = 0 var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(T) I.master = src - I.density = 1 + I.density = TRUE I.dir = dir I.update_icon() first = I @@ -100,30 +105,36 @@ I.limit = 8 I.process() + /obj/item/assembly/infra/attack_hand() qdel(first) ..() -/obj/item/assembly/infra/Move() - var/t = dir + +/obj/item/assembly/infra/Move(atom/newloc, direct = 0, movetime) + var/prev_dir = dir . = ..() - dir = t + dir = prev_dir qdel(first) + /obj/item/assembly/infra/holder_movement() if(!holder) return FALSE qdel(first) return TRUE + /obj/item/assembly/infra/equipped(mob/user, slot, initial) qdel(first) return ..() + /obj/item/assembly/infra/pickup(mob/user) qdel(first) return ..() + /obj/item/assembly/infra/proc/trigger_beam(atom/movable/AM) var/mob/triggered if(AM.throwing?.thrower) @@ -132,15 +143,17 @@ triggered = AM if(!secured || !on || cooldown > 0) return FALSE + cooldown = 2 + pulse(FALSE, triggered) audible_message("[bicon(src)] *beep* *beep*", hearing_distance = 3) if(first) qdel(first) - cooldown = 2 - addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 10) - pulse(FALSE, triggered) + addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 1 SECONDS) + /obj/item/assembly/infra/interact(mob/user)//TODO: change this this to the wire control panel - if(!secured) return + if(!secured) + return user.set_machine(src) var/dat = {"Infrared Laser Status: [on ? "On" : "Off"]
    @@ -153,6 +166,7 @@ popup.set_content(dat) popup.open() + /obj/item/assembly/infra/Topic(href, href_list) ..() if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) @@ -167,38 +181,51 @@ if(first) first.vis_spread(visible) if(href_list["rotate"]) - rotate() + rotate(usr) if(href_list["close"]) usr << browse(null, "window=infra") return if(usr) attack_self(usr) -/obj/item/assembly/infra/verb/rotate()//This could likely be better + +/obj/item/assembly/infra/AltClick(mob/user) + if(!Adjacent(user)) + return ..() + rotate(user) + + +/obj/item/assembly/infra/verb/rotate_verb() set name = "Rotate Infrared Laser" set category = "Object" set src in usr - if(usr.stat || !usr.canmove || usr.restrained()) + rotate(usr) + + +/obj/item/assembly/infra/proc/rotate(mob/living/user = usr) + if(!isliving(user) || user.incapacitated() || user.restrained()) return dir = turn(dir, 90) - if(usr.machine == src) - interact(usr) + if(user.machine == src) + interact(user) if(first) qdel(first) +/obj/item/assembly/infra/armed/Initialize(mapload) + . = ..() + addtimer(CALLBACK(src, PROC_REF(delayed_arm)), 0.3 SECONDS) + + +/obj/item/assembly/infra/armed/proc/delayed_arm() + if(holder?.master) + dir = holder.master.dir + arm() -/obj/item/assembly/infra/armed/New() - ..() - spawn(3) - if(holder) - if(holder.master) - dir = holder.master.dir - arm() /obj/item/assembly/infra/armed/stealth visible = FALSE @@ -222,19 +249,31 @@ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE +/obj/effect/beam/i_beam/Destroy() + if(master && master.first == src) + master.first = null + QDEL_NULL(next) + if(previous) + previous.next = null + master?.last = previous + return ..() + + /obj/effect/beam/i_beam/proc/hit(atom/movable/AM) - if(master) - master.trigger_beam(AM) + master?.trigger_beam(AM) qdel(src) -/obj/effect/beam/i_beam/proc/vis_spread(v) - visible = v + +/obj/effect/beam/i_beam/proc/vis_spread(new_visibility) + visible = new_visibility if(next) - next.vis_spread(v) + next.vis_spread(new_visibility) + -/obj/effect/beam/i_beam/update_icon() +/obj/effect/beam/i_beam/update_icon_state() transform = turn(matrix(), dir2angle(dir)) + /obj/effect/beam/i_beam/process() life_cycles++ if(loc.density || !master || life_cycles >= life_cap) @@ -242,18 +281,15 @@ return if(left > 0) left-- - if(left < 1) - if(!(visible)) - invisibility = INVISIBILITY_ABSTRACT - else - invisibility = FALSE + if(left < 1 && !visible) + invisibility = INVISIBILITY_ABSTRACT else - invisibility = FALSE + invisibility = 0 if(!next && (limit > 0)) var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(loc) I.master = master - I.density = 1 + I.density = TRUE I.dir = dir I.update_icon() I.previous = src @@ -266,12 +302,15 @@ master.last = I I.process() + /obj/effect/beam/i_beam/Bump() qdel(src) + /obj/effect/beam/i_beam/Bumped(atom/movable/moving_atom) hit(moving_atom) + /obj/effect/beam/i_beam/Crossed(atom/movable/AM, oldloc) if(!isobj(AM) && !isliving(AM)) return @@ -279,11 +318,3 @@ return hit(AM) -/obj/effect/beam/i_beam/Destroy() - if(master.first == src) - master.first = null - QDEL_NULL(next) - if(previous) - previous.next = null - master.last = previous - return ..() diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index dde6183ca6f..01a1b6734a6 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -8,133 +8,165 @@ bomb_name = "contact mine" + /obj/item/assembly/mousetrap/examine(mob/user) . = ..() if(armed) - . += "It looks like it's armed." + . += span_warning("It looks like it's armed.") + . += span_info("Alt-Click to hide it.") + /obj/item/assembly/mousetrap/activate() - if(..()) - armed = !armed - if(!armed) - if(ishuman(usr)) - var/mob/living/carbon/human/user = usr - if((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)) - to_chat(user, "Your hand slips, setting off the trigger.") - pulse(0, user) - update_icon() - if(usr) - playsound(usr.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) - -/obj/item/assembly/mousetrap/describe() - return "The pressure switch is [armed ? "primed" : "safe"]." - -/obj/item/assembly/mousetrap/update_icon() - if(armed) - icon_state = "mousetraparmed" - else - icon_state = "mousetrap" + if(!..()) + return + + armed = !armed + if(!armed && ishuman(usr)) + var/mob/living/carbon/human/user = usr + if((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)) + to_chat(user, "Your hand slips, setting off the trigger.") + pulse(FALSE, user) + + update_icon() + + if(usr) + playsound(usr.loc, 'sound/weapons/handcuffs.ogg', 30, TRUE, -3) + + +/obj/item/assembly/mousetrap/update_icon_state() + icon_state = "mousetrap[armed ? "armed": ""]" if(holder) holder.update_icon() + /obj/item/assembly/mousetrap/proc/triggered(mob/target, type = "feet") if(!armed) return + var/obj/item/organ/external/affecting = null + if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(PIERCEIMMUNE in H.dna.species.species_traits) + var/mob/living/carbon/human/h_target = target + if(h_target.dna && (PIERCEIMMUNE in h_target.dna.species.species_traits)) playsound(src, 'sound/effects/snap.ogg', 50, TRUE) armed = FALSE update_icon() - pulse(FALSE, target) + pulse(FALSE, h_target) return FALSE + switch(type) if("feet") - if(!H.shoes) - affecting = H.get_organ(pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) - H.Weaken(6 SECONDS) + if(!h_target.shoes) + affecting = h_target.get_organ(pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + h_target.Weaken(6 SECONDS) + if(BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND) - if(!H.gloves) - affecting = H.get_organ(type) - H.Stun(6 SECONDS) + if(!h_target.gloves) + affecting = h_target.get_organ(type) + h_target.Stun(6 SECONDS) + if(affecting) affecting.receive_damage(1, 0) - else if(ismouse(target)) - var/mob/living/simple_animal/mouse/M = target - visible_message("SPLAT!") - M.apply_damage(5, "brute") - if (M.stat == DEAD) - M.splat(item = src) - playsound(loc, 'sound/effects/snap.ogg', 50, 1) + + else if(ismouse(target) && target.stat != DEAD) + var/mob/living/simple_animal/mouse/mouse = target + visible_message(span_danger("SPLAT!")) + mouse.death() + mouse.splat(src) + + playsound(loc, 'sound/effects/snap.ogg', 50, TRUE) layer = MOB_LAYER - 0.2 armed = FALSE update_icon() - pulse(0, target) + pulse(FALSE, target) + /obj/item/assembly/mousetrap/attack_self(mob/living/user) if(!armed) - to_chat(user, "You arm [src].") + to_chat(user, span_notice("You arm [src].")) else if((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)) triggered(user, user.hand ? BODY_ZONE_PRECISE_L_HAND : BODY_ZONE_PRECISE_R_HAND) - user.visible_message("[user] accidentally sets off [src], breaking [user.p_their()] fingers.", \ - "You accidentally trigger [src]!") + user.visible_message( + span_warning("[user] accidentally sets off [src], breaking [user.p_their()] fingers."), + span_warning("You accidentally trigger [src]!"), + ) return - to_chat(user, "You disarm [src].") + to_chat(user, span_notice("You disarm [src].")) armed = !armed update_icon() - playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) + playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, TRUE, -3) + /obj/item/assembly/mousetrap/attack_hand(mob/living/user) - if(armed) - if((user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)) - triggered(user, user.hand ? BODY_ZONE_PRECISE_L_HAND : BODY_ZONE_PRECISE_R_HAND) - user.visible_message("[user] accidentally sets off [src], breaking [user.p_their()] fingers.", \ - "You accidentally trigger [src]!") - return + if(armed && (user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)) + triggered(user, user.hand ? BODY_ZONE_PRECISE_L_HAND : BODY_ZONE_PRECISE_R_HAND) + user.visible_message( + span_warning("[user] accidentally sets off [src], breaking [user.p_their()] fingers."), + span_warning("You accidentally trigger [src]!"), + ) + return ..() + /obj/item/assembly/mousetrap/Crossed(atom/movable/AM, oldloc) if(armed) if(ishuman(AM)) - var/mob/living/carbon/H = AM - if(H.m_intent == MOVE_INTENT_RUN) - triggered(H) - H.visible_message("[H] accidentally steps on [src].", \ - "You accidentally step on [src]") + var/mob/living/carbon/h_target = AM + if(h_target.m_intent == MOVE_INTENT_RUN) + triggered(h_target) + h_target.visible_message( + span_warning("[h_target] accidentally steps on [src]."), + span_warning("You accidentally step on [src]!"), + ) else if(ismouse(AM)) triggered(AM) else if(AM.density) // For mousetrap grenades, set off by anything heavy triggered(AM) ..() + /obj/item/assembly/mousetrap/on_found(mob/finder) if(armed) - finder.visible_message("[finder] accidentally sets off [src], breaking [finder.p_their()] fingers.", \ - "You accidentally trigger [src]!") + finder.visible_message( + span_warning("[finder] accidentally sets off [src], breaking [finder.p_their()] fingers."), + span_warning("You accidentally trigger [src]!"), + ) triggered(finder, finder.hand ? BODY_ZONE_PRECISE_L_HAND : BODY_ZONE_PRECISE_R_HAND) return TRUE //end the search! return FALSE + /obj/item/assembly/mousetrap/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) if(!armed) return ..() - visible_message("[src] is triggered by [AM].") - triggered(null) + visible_message(span_warning("[src] is triggered by [AM].")) + triggered() + /obj/item/assembly/mousetrap/armed icon_state = "mousetraparmed" - armed = 1 + armed = TRUE -/obj/item/assembly/mousetrap/verb/hide_under() +/obj/item/assembly/mousetrap/AltClick(mob/user) + if(!Adjacent(user)) + return ..() + hide_under(user) + + +/obj/item/assembly/mousetrap/verb/hide_under_verb() set src in oview(1) set name = "Hide" set category = "Object" - if(usr.stat) + hide_under(usr) + + +/obj/item/assembly/mousetrap/proc/hide_under(mob/user = usr) + if(!isliving(user) || user.incapacitated() || user.restrained()) return - layer = TURF_LAYER+0.2 - to_chat(usr, "You hide [src].") + layer = TURF_LAYER + 0.2 + to_chat(user, span_notice("You hide [src].")) + diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index cce1f06410f..671c69b23be 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -5,22 +5,27 @@ materials = list(MAT_METAL = 800, MAT_GLASS = 200) origin_tech = "magnets=1;engineering=1" - secured = 0 + secured = FALSE bomb_name = "proximity mine" - var/scanning = 0 - var/timing = 0 + var/scanning = FALSE + var/timing = FALSE var/time = 10 + /obj/item/assembly/prox_sensor/ComponentInitialize() . = ..() AddComponent(/datum/component/proximity_monitor) -/obj/item/assembly/prox_sensor/describe() + +/obj/item/assembly/prox_sensor/examine(mob/user) + . = ..() if(timing) - return "The proximity sensor is arming." - return "The proximity sensor is [scanning ? "armed" : "disarmed"]." + . += span_notice("The proximity sensor is arming.") + else + . += span_notice("The proximity sensor is [scanning ? "armed" : "disarmed"].") + /obj/item/assembly/prox_sensor/activate() if(!..()) @@ -29,17 +34,19 @@ update_icon() return FALSE + /obj/item/assembly/prox_sensor/toggle_secure() secured = !secured if(secured) START_PROCESSING(SSobj, src) else - scanning = 0 - timing = 0 + scanning = FALSE + timing = FALSE STOP_PROCESSING(SSobj, src) update_icon() return secured + /obj/item/assembly/prox_sensor/HasProximity(atom/movable/AM) if(!isobj(AM) && !isliving(AM)) return @@ -48,6 +55,7 @@ if(AM.move_speed < 12) sense(AM) + /obj/item/assembly/prox_sensor/proc/sense(atom/movable/AM) var/mob/triggered if(ismob(AM)) @@ -55,23 +63,24 @@ if(!secured || !scanning || cooldown > 0) return FALSE cooldown = 2 - visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") - addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 10) pulse(FALSE, triggered) + visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 1 SECONDS) + /obj/item/assembly/prox_sensor/process() if(timing && (time >= 0)) time-- if(timing && time <= 0) - timing = 0 + timing = FALSE toggle_scan() time = 10 + /obj/item/assembly/prox_sensor/dropped(mob/user, silent = FALSE) - ..() - spawn(0) - sense(user) - return + . = ..() + INVOKE_ASYNC(src, PROC_REF(sense), user) + /obj/item/assembly/prox_sensor/proc/toggle_scan() if(!secured) @@ -79,28 +88,31 @@ scanning = !scanning update_icon() -/obj/item/assembly/prox_sensor/update_icon() - overlays.Cut() + +/obj/item/assembly/prox_sensor/update_overlays() + . = ..() attached_overlays = list() if(timing) - overlays += "prox_timing" + . += "prox_timing" attached_overlays += "prox_timing" if(scanning) - overlays += "prox_scanning" + . += "prox_scanning" attached_overlays += "prox_scanning" - if(holder) - holder.update_icon() + holder?.update_icon() -/obj/item/assembly/prox_sensor/Move() + +/obj/item/assembly/prox_sensor/Move(atom/newloc, direct = NONE, movetime) . = ..() sense() + /obj/item/assembly/prox_sensor/holder_movement(user) sense(user) + /obj/item/assembly/prox_sensor/interact(mob/user)//TODO: Change this to the wires thingy if(!secured) - user.show_message("The [name] is unsecured!") + user.show_message(span_warning("The [name] is unsecured!")) return FALSE var/second = time % 60 var/minute = (time - second) / 60 @@ -112,6 +124,7 @@ popup.set_content(dat) popup.open() + /obj/item/assembly/prox_sensor/Topic(href, href_list) ..() if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) @@ -137,3 +150,4 @@ if(usr) attack_self(usr) + diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 4c1e8ae6d1b..e2ccef0b2bc 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -9,26 +9,27 @@ w_class = WEIGHT_CLASS_HUGE flags = CONDUCT + /obj/item/assembly/shock_kit/Destroy() QDEL_NULL(part1) QDEL_NULL(part2) return ..() -/obj/item/assembly/shock_kit/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/wrench) && !status) - var/turf/T = loc - if(ismob(T)) - T = T.loc - part1.loc = T - part2.loc = T - part1.master = null - part2.master = null - part1 = null - part2 = null - qdel(src) - return + +/obj/item/assembly/shock_kit/wrench_act(mob/living/user, obj/item/I) + . = TRUE + if(!status) + return . add_fingerprint(user) - return + var/drop_loc = drop_location() + part1.forceMove(drop_loc) + part2.forceMove(drop_loc) + part1.master = null + part2.master = null + part1 = null + part2 = null + qdel(src) + /obj/item/assembly/shock_kit/screwdriver_act(mob/user, obj/item/I) . = TRUE @@ -36,18 +37,19 @@ return status = !status if(status) - to_chat(user, "[src] is now ready to be attached to a chair!") + to_chat(user, span_notice("[src] is now ready to be attached to a chair!")) else - to_chat(user, "[src] is now ready!") + to_chat(user, span_notice("[src] is now ready!")) + -/obj/item/assembly/shock_kit/attack_self(mob/user as mob) +/obj/item/assembly/shock_kit/attack_self(mob/user) part1.attack_self(user, status) part2.attack_self(user, status) add_fingerprint(user) - return + /obj/item/assembly/shock_kit/receive_signal() if(istype(loc, /obj/structure/chair/e_chair)) - var/obj/structure/chair/e_chair/C = loc - C.shock() - return + var/obj/structure/chair/e_chair/chair = loc + chair.shock() + diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 406f70f17c0..9d0f1b830e4 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -7,7 +7,7 @@ origin_tech = "magnets=1;bluespace=1" wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE - secured = 1 + secured = TRUE var/receiving = FALSE bomb_name = "remote-control bomb" @@ -18,24 +18,32 @@ var/datum/radio_frequency/radio_connection var/airlock_wire = null -/obj/item/assembly/signaler/New() - ..() - if(SSradio) - set_frequency(frequency) /obj/item/assembly/signaler/Initialize() - ..() + . = ..() if(SSradio) set_frequency(frequency) + /obj/item/assembly/signaler/Destroy() if(SSradio) SSradio.remove_object(src, frequency) radio_connection = null return ..() -/obj/item/assembly/signaler/describe() - return "[src]'s power light is [receiving ? "on" : "off"]" + +/obj/item/assembly/signaler/examine(mob/user) + . = ..() + . += span_notice("The power light is [receiving ? "on" : "off"].") + . += span_info("Alt+Click to send a signal.") + + +/obj/item/assembly/signaler/AltClick(mob/user) + if(!isliving(user) || user.incapacitated() || user.restrained() || !Adjacent(user)) + return ..() + to_chat(user, span_notice("You activate [src].")) + activate() + /obj/item/assembly/signaler/activate() if(cooldown > 0) @@ -46,10 +54,10 @@ signal() return TRUE -/obj/item/assembly/signaler/update_icon() - if(holder) - holder.update_icon() - return + +/obj/item/assembly/signaler/update_icon_state() + holder?.update_icon() + /obj/item/assembly/signaler/interact(mob/user, flag1) var/t1 = "-------" @@ -81,13 +89,14 @@ "} var/datum/browser/popup = new(user, "radio", name, 400, 400) popup.set_content(dat) - popup.open(0) + popup.open(FALSE) onclose(user, "radio") + /obj/item/assembly/signaler/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || usr.restrained() || !Adjacent(usr)) usr << browse(null, "window=radio") onclose(usr, "radio") return @@ -103,16 +112,17 @@ code = round(code) code = min(100, code) code = max(1, code) + if(href_list["receive"]) receiving = !receiving if(href_list["send"]) - spawn( 0 ) - signal() + INVOKE_ASYNC(src, PROC_REF(signal)) if(usr) attack_self(usr) + /obj/item/assembly/signaler/proc/signal() if(!radio_connection) return @@ -129,6 +139,7 @@ if(usr) GLOB.lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") + /obj/item/assembly/signaler/receive_signal(datum/signal/signal) if(!receiving || !signal) return FALSE @@ -140,15 +151,15 @@ return FALSE pulse(1, signal.user) - for(var/mob/O in hearers(1, loc)) - O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) + for(var/mob/hearer in hearers(1, loc)) + hearer.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) return TRUE + /obj/item/assembly/signaler/proc/set_frequency(new_frequency) - if(!SSradio) - sleep(20) if(!SSradio) return SSradio.remove_object(src, frequency) frequency = new_frequency radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT) + diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index c4393ce999f..6084f4cd5ec 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -15,10 +15,18 @@ var/set_time = 10 var/mob/user // for logging -/obj/item/assembly/timer/describe() + +/obj/item/assembly/timer/Destroy() + user = null + return ..() + +/obj/item/assembly/timer/examine(mob/user) + . = ..() if(timing) - return "The timer is counting down from [time]!" - return "The timer is set for [time] seconds." + . += span_notice("The timer is counting down from [time]!") + else + . += span_notice("The timer is set for [time] seconds.") + /obj/item/assembly/timer/activate() if(!..()) @@ -27,6 +35,7 @@ update_icon() return FALSE + /obj/item/assembly/timer/toggle_secure() secured = !secured if(secured) @@ -37,13 +46,17 @@ update_icon() return secured + /obj/item/assembly/timer/proc/timer_end() if(!secured || cooldown > 0) return FALSE - visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") cooldown = 2 - addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 10) pulse(FALSE, user) + update_icon() + if(loc) + loc.visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + addtimer(CALLBACK(src, PROC_REF(process_cooldown)), 10) + /obj/item/assembly/timer/process() if(timing && (time > 0)) @@ -53,18 +66,19 @@ timer_end() time = set_time -/obj/item/assembly/timer/update_icon() - overlays.Cut() + +/obj/item/assembly/timer/update_overlays() + . = ..() attached_overlays = list() if(timing) - overlays += "timer_timing" + . += "timer_timing" attached_overlays += "timer_timing" - if(holder) - holder.update_icon() + holder?.update_icon() + -/obj/item/assembly/timer/interact(mob/user as mob)//TODO: Have this use the wires +/obj/item/assembly/timer/interact(mob/user)//TODO: Have this use the wires if(!secured) - user.show_message("The [name] is unsecured!") + user.show_message(span_warning("The [name] is unsecured!")) return FALSE var/second = time % 60 var/minute = (time - second) / 60 @@ -90,9 +104,10 @@ popup.set_content(dat) popup.open() + /obj/item/assembly/timer/Topic(href, href_list) ..() - if(usr.incapacitated() || !in_range(loc, usr)) + if(usr.incapacitated() || usr.restrained() || !Adjacent(usr)) usr << browse(null, "window=timer") onclose(usr, "timer") return diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 7dc382cde69..61b965b8c23 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -4,38 +4,48 @@ icon_state = "voice" materials = list(MAT_METAL=500, MAT_GLASS=50) origin_tech = "magnets=1;engineering=1" - var/listening = 0 + var/listening = FALSE var/recorded = null //the activation message var/recorded_type = 0 // 0 for say, 1 for emote bomb_name = "voice-activated bomb" -/obj/item/assembly/voice/describe() + +/obj/item/assembly/voice/examine(mob/user) + . = ..() if(recorded || listening) - return "A meter on [src] flickers with every nearby sound." + . += span_notice("A meter on it flickers with every nearby sound.") else - return "[src] is deactivated." + . += span_notice("It is deactivated.") -/obj/item/assembly/voice/hear_talk(mob/living/M as mob, list/message_pieces) + +/obj/item/assembly/voice/hear_talk(mob/living/M, list/message_pieces) hear_input(M, multilingual_to_message(message_pieces), 0) -/obj/item/assembly/voice/hear_message(mob/living/M as mob, msg) + +/obj/item/assembly/voice/hear_message(mob/living/M, msg) hear_input(M, msg, 1) -/obj/item/assembly/voice/proc/hear_input(mob/living/M as mob, msg, type) + +/obj/item/assembly/voice/proc/hear_input(mob/living/M, msg, type) if(!istype(M,/mob/living)) return if(listening) + if(findtext(msg, "
    ")) + recorded = strip_html_properly(msg) + else + recorded = msg recorded = msg recorded_type = type - listening = 0 + listening = FALSE var/turf/T = get_turf(src) //otherwise it won't work in hand T.visible_message("[bicon(src)] beeps, \"Activation message is [type ? "the sound when one [recorded]" : "'[recorded]'."]\"") else if(findtext(msg, recorded) && type == recorded_type) var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("[bicon(src)] beeps!") + T.visible_message(span_warning("[bicon(src)] beeps!")) pulse(0, M) + /obj/item/assembly/voice/activate() return // previously this toggled listning when not in a holder, that's a little silly. It was only called in attack_self that way. @@ -52,7 +62,8 @@ /obj/item/assembly/voice/toggle_secure() . = ..() - listening = 0 + listening = FALSE + /obj/item/assembly/voice/noise name = "noise sensor" @@ -62,16 +73,22 @@ origin_tech = "magnets=1;engineering=1" bomb_name = "noise-activated bomb" + /obj/item/assembly/voice/noise/attack_self(mob/user) return -/obj/item/assembly/voice/noise/describe() - return "[src] does not appear to have any controls." -/obj/item/assembly/voice/noise/hear_talk(mob/living/M as mob, list/message_pieces) +/obj/item/assembly/voice/noise/examine(mob/user) + . = ..() + . += span_notice("It does not appear to have any controls.") + + +/obj/item/assembly/voice/noise/hear_talk(mob/living/M, list/message_pieces) return -/obj/item/assembly/voice/noise/hear_message(mob/living/M as mob, msg) + +/obj/item/assembly/voice/noise/hear_message(mob/living/M, msg) pulse(0, M) var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("[bicon(src)] beeps!") + T.visible_message(span_warning("[bicon(src)] beeps!")) + diff --git a/code/modules/awaymissions/mission_code/academy.dm b/code/modules/awaymissions/mission_code/academy.dm index 3e488ba1edc..065b2749f7d 100644 --- a/code/modules/awaymissions/mission_code/academy.dm +++ b/code/modules/awaymissions/mission_code/academy.dm @@ -44,191 +44,6 @@ icon_state = "monocle" item_state = "headset" -// Die of Fate -/obj/item/dice/d20/fate - name = "\improper Die of Fate" - desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky." - icon_state = "d20" - var/reusable = TRUE - var/used = FALSE - -/obj/item/dice/d20/fate/stealth - name = "d20" - desc = "A die with twenty sides. The preferred die to throw at the GM." - -/obj/item/dice/d20/fate/one_use - reusable = FALSE - -/obj/item/dice/d20/fate/one_use/stealth - name = "d20" - desc = "A die with twenty sides. The preferred die to throw at the GM." - -/obj/item/dice/d20/fate/cursed - name = "cursed Die of Fate" - desc = "A die with twenty sides. You feel that rolling this is a REALLY bad idea." - color = "#00BB00" - - rigged = DICE_TOTALLY_RIGGED - rigged_value = 1 - -/obj/item/dice/d20/fate/diceroll(mob/user) - . = ..() - if(!used) - if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) - to_chat(user, "You feel the magic of the dice is restricted to ordinary humans!") - return - - if(!reusable) - used = TRUE - - var/turf/T = get_turf(src) - T.visible_message("[src] flares briefly.") - - addtimer(CALLBACK(src, PROC_REF(effect), user, .), 1 SECONDS) - -/obj/item/dice/d20/fate/equipped(mob/user, slot, initial) - . = ..() - - if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) - to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") - user.drop_item_ground(src) - -/obj/item/dice/d20/fate/proc/create_smoke(amount) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(amount, 0, drop_location()) - smoke.start() - -/obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user, roll) - var/turf/T = get_turf(src) - switch(roll) - if(1) - //Dust - T.visible_message("[user] turns to dust!") - user.dust() - if(2) - //Death - T.visible_message("[user] suddenly dies!") - user.death() - if(3) - //Swarm of creatures - T.visible_message("A swarm of creatures surround [user]!") - for(var/direction in GLOB.alldirs) - new /mob/living/simple_animal/hostile/netherworld(get_step(get_turf(user),direction)) - if(4) - //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)) - continue - qdel(I) - if(5) - //Monkeying - T.visible_message("[user] transforms into a monkey!") - user.monkeyize() - if(6) - //Cut speed - T.visible_message("[user] starts moving slower!") - var/datum/species/S = user.dna.species - S.speed_mod += 1 - if(7) - //Throw - T.visible_message("Unseen forces throw [user]!") - user.Stun(12 SECONDS) - user.adjustBruteLoss(50) - var/throw_dir = GLOB.cardinal - var/atom/throw_target = get_edge_target_turf(user, throw_dir) - user.throw_at(throw_target, 200, 4) - if(8) - //Fueltank Explosion - T.visible_message("An explosion bursts into existence around [user]!") - explosion(get_turf(user),-1,0,2, flame_range = 2, cause = src) - if(9) - //Cold - T.visible_message("[user] looks a little under the weather!") - var/datum/disease/virus/cold/D = new - D.Contract(user) - if(10) - //Nothing - T.visible_message("Nothing seems to happen.") - if(11) - //Cookie - T.visible_message("A cookie appears out of thin air!") - var/obj/item/reagent_containers/food/snacks/cookie/C = new(drop_location()) - create_smoke(2) - C.name = "Cookie of Fate" - if(12) - //Healing - T.visible_message("[user] looks very healthy!") - user.revive() - if(13) - //Mad Dosh - T.visible_message("Mad dosh shoots out of [src]!") - var/turf/Start = get_turf(src) - for(var/direction in GLOB.alldirs) - var/turf/dirturf = get_step(Start,direction) - if(rand(0,1)) - new /obj/item/stack/spacecash/c1000(dirturf) - else - var/obj/item/storage/bag/money/M = new(dirturf) - for(var/i in 1 to rand(5,50)) - new /obj/item/coin/gold(M) - if(14) - //Free Gun - T.visible_message("An impressive gun appears!") - create_smoke(2) - new /obj/item/gun/projectile/revolver/mateba(drop_location()) - if(15) - //Random One-use spellbook - T.visible_message("A magical looking book drops to the floor!") - create_smoke(2) - new /obj/item/spellbook/oneuse/random(drop_location()) - if(16) - //Servant & Servant Summon - T.visible_message("A Dice Servant appears in a cloud of smoke!") - var/mob/living/carbon/human/H = new(drop_location()) - create_smoke(2) - - H.equipOutfit(/datum/outfit/butler) - var/datum/mind/servant_mind = new /datum/mind() - var/datum/objective/O = new - O.owner = servant_mind - O.target = user.mind - O.explanation_text = "Serve [user.real_name]." - servant_mind.objectives += O - servant_mind.transfer_to(H) - - var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the servant of [user.real_name]?", ROLE_WIZARD, poll_time = 30 SECONDS, source = H) - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - message_admins("[ADMIN_LOOKUPFLW(C)] was spawned as Dice Servant") - H.key = C.key - to_chat(H, "You are a servant of [user.real_name]. You must do everything in your power to follow their orders.") - - var/obj/effect/proc_holder/spell/summonmob/S = new - S.target_mob = H - user.mind.AddSpell(S) - - if(17) - //Tator Kit - T.visible_message("A suspicious box appears!") - new /obj/item/storage/box/syndicate(drop_location()) - create_smoke(2) - if(18) - //Captain ID - T.visible_message("A golden identification card appears!") - new /obj/item/card/id/captains_spare(drop_location()) - create_smoke(2) - 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 - - if(20) - //Free wizard! - T.visible_message("Magic flows out of [src] and into [user]!") - user.mind.make_Wizard() // Butler outfit /datum/outfit/butler diff --git a/code/modules/awaymissions/mission_code/blackmarketpackers.dm b/code/modules/awaymissions/mission_code/blackmarketpackers.dm index 37f1ef8b212..b8966d78d3b 100644 --- a/code/modules/awaymissions/mission_code/blackmarketpackers.dm +++ b/code/modules/awaymissions/mission_code/blackmarketpackers.dm @@ -188,7 +188,7 @@ icon_state = "destroyed_target_prism" /obj/machinery/broken/porta_turret/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/crowbar)) + if(I.tool_behaviour == TOOL_CROWBAR) to_chat(user, "You begin prying the metal coverings off.") if(do_after(user, 20 * I.toolspeed * gettoolspeedmod(user), target = src)) if(prob(70)) diff --git a/code/modules/awaymissions/mission_code/ruins/graveyard.dm b/code/modules/awaymissions/mission_code/ruins/graveyard.dm index cfd23a2cac0..f6da0b0e414 100644 --- a/code/modules/awaymissions/mission_code/ruins/graveyard.dm +++ b/code/modules/awaymissions/mission_code/ruins/graveyard.dm @@ -36,11 +36,10 @@ icon_state = "case-0" allowed_books = list(/obj/item/storage/funeral_urn) -/obj/structure/bookcase/ashframe/update_icon() - if(contents.len < 5) - icon_state = "case-[contents.len]" - else - icon_state = "case-5" + +/obj/structure/bookcase/ashframe/update_icon_state() + icon_state = "case-[min(length(contents), 5)]" + /obj/structure/bookcase/ashframe/random diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm index 90958a14048..ee0cd344ec5 100644 --- a/code/modules/awaymissions/mission_code/spacebattle.dm +++ b/code/modules/awaymissions/mission_code/spacebattle.dm @@ -689,26 +689,33 @@ shoes = /obj/item/clothing/shoes/black suit = /obj/item/clothing/suit/storage/labcoat/science + /obj/item/clothing/suit/space/hardsuit/syndi/damaged name = "damaged blood-red hardsuit" desc = "Damaged advanced hardsuit designed for work in special operations. There are a many patches visible on the suit. Its mode switcher system looks damaged and forced in travel mode. Property of Gorlex Marauders." armor = list("melee" = 30, "bullet" = 40, "laser" = 20, "energy" = 20, "bomb" = 30, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) w_class = WEIGHT_CLASS_NORMAL - on = 1 + icon_state = "hardsuit1-syndi" + on = TRUE helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/damaged actions_types = list(/datum/action/item_action/toggle_helmet) -/obj/item/clothing/head/helmet/space/hardsuit/syndi/damaged/attack_self(mob/user) //Toggle Helmet - if(!on) - to_chat(user, "You cant switch your hardsuit to combat mode.") - playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 1) - .=..() /obj/item/clothing/head/helmet/space/hardsuit/syndi/damaged - on = 1 icon_state = "hardsuit1-syndi" item_state = "syndie_helm" actions_types = list(/datum/action/item_action/toggle_helmet_light) + on = TRUE + + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/damaged/update_icon_state() + return + + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/damaged/adjust_headgear(mob/living/carbon/human/user, toggle = FALSE) + if(user) + to_chat(user, span_notice("You cant switch your hardsuit to combat mode.")) + playsound(user, 'sound/machines/buzz-two.ogg', 50, TRUE) + return + ..() -/obj/item/clothing/head/helmet/space/hardsuit/syndi/damaged/update_icon() - icon_state = "hardsuit1-syndi" diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index c37899eba9f..02b57d03a95 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -69,8 +69,8 @@ //Syndicate sub-machine guns. /obj/item/gun/projectile/automatic/c20r/sc_c20r -/obj/item/gun/projectile/automatic/c20r/sc_c20r/New() - ..() +/obj/item/gun/projectile/automatic/c20r/sc_c20r/Initialize(mapload) + . = ..() for(var/ammo in magazine.stored_ammo) if(prob(95)) //95% chance magazine.stored_ammo -= ammo @@ -78,8 +78,8 @@ //Barman's shotgun /obj/item/gun/projectile/shotgun/sc_pump -/obj/item/gun/projectile/shotgun/sc_pump/New() - ..() +/obj/item/gun/projectile/shotgun/sc_pump/Initialize(mapload) + . = ..() for(var/ammo in magazine.stored_ammo) if(prob(95)) //95% chance magazine.stored_ammo -= ammo @@ -178,7 +178,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)) @@ -196,7 +196,7 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") for(var/obj/O in T.contents) if(O.level != 1) continue - if(O.invisibility == INVISIBILITY_ABSTRACT) + if(O.invisibility == INVISIBILITY_MAXIMUM || O.invisibility == INVISIBILITY_ABSTRACT) src.consume(O) T.ChangeTurf(T.baseturf) return diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm index ffbb188ada2..77e3f053ef1 100644 --- a/code/modules/awaymissions/pamphlet.dm +++ b/code/modules/awaymissions/pamphlet.dm @@ -34,5 +34,5 @@ environs." //we don't want the silly text overlay! -/obj/item/paper/pamphlet/update_icon() +/obj/item/paper/pamphlet/update_icon_state() return diff --git a/code/modules/buildmode/buttons.dm b/code/modules/buildmode/buttons.dm index 9f74ac9aeff..ac6ded10777 100644 --- a/code/modules/buildmode/buttons.dm +++ b/code/modules/buildmode/buttons.dm @@ -26,7 +26,7 @@ update_icon() return TRUE -/obj/screen/buildmode/mode/update_icon() +/obj/screen/buildmode/mode/update_icon_state() icon_state = bd.mode.get_button_iconstate() /obj/screen/buildmode/help @@ -43,7 +43,7 @@ screen_loc = "NORTH,WEST+2" name = "Change Dir" -/obj/screen/buildmode/bdir/update_icon() +/obj/screen/buildmode/bdir/update_icon_state() dir = bd.build_dir /obj/screen/buildmode/bdir/Click() diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index e2028b4ea82..95c8c0da5d4 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -10,6 +10,7 @@ //I would just like the code ready should it ever need to be used. #define SUGGESTED_CLIENT_VERSION 514 // only integers (e.g: 513, 514) are useful here. This is the part BEFORE the ".", IE 513 out of 513.1536 #define SUGGESTED_CLIENT_BUILD 1568 // only integers (e.g: 1536, 1539) are useful here. This is the part AFTER the ".", IE 1536 out of 513.1536 +#define MINIMUM_FPS_VERSION 511 // used as check, if you can update fps or not #define SSD_WARNING_TIMER 30 // cycles, not seconds, so 30=60s @@ -310,6 +311,7 @@ prefs = GLOB.preferences_datums[ckey] if(!prefs) prefs = new /datum/preferences(src) + set_macros() GLOB.preferences_datums[ckey] = prefs else prefs.parent = src @@ -321,10 +323,10 @@ prefs.init_keybindings(prefs.keybindings_overrides) //The earliest sane place to do it where prefs are not null, if they are null you can't do crap at lobby prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning - if(world.byond_version >= 511 && byond_version >= 511 && prefs.clientfps) + if(world.byond_version >= MINIMUM_FPS_VERSION && byond_version >= MINIMUM_FPS_VERSION && prefs.clientfps) fps = prefs.clientfps - if(world.byond_version >= 511 && byond_version >= 511 && !prefs.clientfps) + if(world.byond_version >= MINIMUM_FPS_VERSION && byond_version >= MINIMUM_FPS_VERSION && !prefs.clientfps) fps = CONFIG_GET(number/clientfps) // Check if the client has or has not accepted TOS @@ -977,33 +979,40 @@ /client/proc/activate_darkmode() ///// BUTTONS ///// /* Rpane */ - winset(src, "rpane.fullscreenb", "background-color=#40628a;text-color=#FFFFFF") - winset(src, "rpane.textb", "background-color=#40628a;text-color=#FFFFFF") - winset(src, "rpane.infob", "background-color=#40628a;text-color=#FFFFFF") - winset(src, "rpane.wikib", "background-color=#40628a;text-color=#FFFFFF") - winset(src, "rpane.forumb", "background-color=#40628a;text-color=#FFFFFF") - winset(src, "rpane.rulesb", "background-color=#40628a;text-color=#FFFFFF") - winset(src, "rpane.githubb", "background-color=#40628a;text-color=#FFFFFF") + winset(src, "rpane.fullscreenb", "background-color=#494949;text-color=#a4bad6") + winset(src, "rpane.textb", "background-color=#494949;text-color=#a4bad6") + winset(src, "rpane.infob", "background-color=#494949;text-color=#a4bad6") + winset(src, "rpane.wikib", "background-color=#494949;text-color=#a4bad6") + winset(src, "rpane.rulesb", "background-color=#494949;text-color=#a4bad6") + winset(src, "rpane.githubb", "background-color=#494949;text-color=#a4bad6") winset(src, "rpane.webmap", "background-color=#494949;text-color=#a4bad6") - /* Mainwindow */ - winset(src, "mainwindow.saybutton", "background-color=#40628a;text-color=#FFFFFF") - winset(src, "mainwindow.mebutton", "background-color=#40628a;text-color=#FFFFFF") + /* Outputwindow */ + winset(src, "outputwindow.saybutton", "background-color=#494949;text-color=#a4bad6") + winset(src, "outputwindow.mebutton", "background-color=#494949;text-color=#a4bad6") + ///// UI ELEMENTS ///// /* Mainwindow */ - winset(src, "mainwindow", "background-color=#272727") - winset(src, "mainwindow.mainvsplit", "background-color=#272727") - winset(src, "mainwindow.tooltip", "background-color=#272727") + winset(src, "mainwindow", "background-color=#171717") + winset(src, "mainwindow.mainvsplit", "background-color=#202020") + winset(src, "mainwindow.tooltip", "background-color=#171717") /* Outputwindow */ - winset(src, "outputwindow.browseroutput", "background-color=#272727") + winset(src, "outputwindow", "background-color=#202020") + winset(src, "outputwindow.input", "text-color=#a4bad6;background-color=#202020") + winset(src, "outputwindow.browseroutput", "background-color=#202020") /* Rpane */ - winset(src, "rpane", "background-color=#272727") - winset(src, "rpane.rpanewindow", "background-color=#272727") + winset(src, "rpane", "background-color=#202020") + winset(src, "rpane.rpanewindow", "background-color=#202020") /* Browserwindow */ - winset(src, "browserwindow", "background-color=#272727") - winset(src, "browserwindow.browser", "background-color=#272727") + + //winset(src, "browserwindow", "background-color=#272727") + //winset(src, "browserwindow.browser", "background-color=#272727") /* Infowindow */ - winset(src, "infowindow", "background-color=#272727;text-color=#FFFFFF") - winset(src, "infowindow.info", "background-color=#272727;text-color=#FFFFFF;highlight-color=#009900;tab-text-color=#FFFFFF;tab-background-color=#272727") + winset(src, "infowindow", "background-color=#202020;text-color=#a4bad6") + winset(src, "infowindow.info", "background-color=#171717;text-color=#a4bad6;highlight-color=#009900;tab-text-color=#a4bad6;tab-background-color=#202020") + //Macros + winset(src, "default-Tab", "parent=default;name=Tab;command=\".winset \\\"mainwindow.macro=legacy input.focus=true input.background-color=[COLOR_DARK_INPUT_ENABLED]\\\"\"") + winset(src, "legacy-Tab", "parent=legacy;name=Tab;command=\".winset \\\"mainwindow.macro=default map.focus=true input.background-color=[COLOR_DARK_INPUT_DISABLED]\\\"\"") + // NOTIFY USER to_chat(src, "Darkmode Enabled") @@ -1014,29 +1023,36 @@ winset(src, "rpane.textb", "background-color=none;text-color=#000000") winset(src, "rpane.infob", "background-color=none;text-color=#000000") winset(src, "rpane.wikib", "background-color=none;text-color=#000000") - winset(src, "rpane.forumb", "background-color=none;text-color=#000000") + //winset(src, "rpane.forumb", "background-color=none;text-color=#000000") winset(src, "rpane.rulesb", "background-color=none;text-color=#000000") winset(src, "rpane.githubb", "background-color=none;text-color=#000000") - winset(src, "rpane.webmap", "background-color=#494949;text-color=#a4bad6") - /* Mainwindow */ - winset(src, "mainwindow.saybutton", "background-color=none;text-color=#000000") - winset(src, "mainwindow.mebutton", "background-color=none;text-color=#000000") + winset(src, "rpane.webmap", "background-color=none;text-color=#000000") + /* Outputwindow */ + winset(src, "outputwindow.saybutton", "background-color=none;text-color=#000000") + winset(src, "outputwindow.mebutton", "background-color=none;text-color=#000000") + ///// UI ELEMENTS ///// /* Mainwindow */ winset(src, "mainwindow", "background-color=none") winset(src, "mainwindow.mainvsplit", "background-color=none") winset(src, "mainwindow.tooltip", "background-color=none") /* Outputwindow */ + winset(src, "outputwindow", "background-color=none") + winset(src, "outputwindow.input", "text-color=none; background-color=#F0F0F0") winset(src, "outputwindow.browseroutput", "background-color=none") /* Rpane */ winset(src, "rpane", "background-color=none") winset(src, "rpane.rpanewindow", "background-color=none") /* Browserwindow */ - winset(src, "browserwindow", "background-color=none") - winset(src, "browserwindow.browser", "background-color=none") + //winset(src, "browserwindow", "background-color=none") + //winset(src, "browserwindow.browser", "background-color=none") /* Infowindow */ winset(src, "infowindow", "background-color=none;text-color=#000000") winset(src, "infowindow.info", "background-color=none;text-color=#000000;highlight-color=#007700;tab-text-color=#000000;tab-background-color=none") + //Macros + winset(src, "default-Tab", "parent=default;name=Tab;command=\".winset \\\"mainwindow.macro=legacy input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"") + winset(src, "legacy-Tab", "parent=legacy;name=Tab;command=\".winset \\\"mainwindow.macro=default map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"") + ///// NOTIFY USER ///// to_chat(src, "Darkmode Disabled") // what a sick fuck @@ -1347,7 +1363,14 @@ log_adminwarn("[key] has just connected with BYOND v[byond_version].[byond_build] for the first time. BYOND account registered on [byondacc_date] ([byondacc_age] days old)") /client/proc/show_update_notice() - to_chat(src, "Your BYOND client (v: [byond_version].[byond_build]) is out of date. This can cause glitches. We highly suggest you download the latest client from byond.com before playing. You can also update via the BYOND launcher application.") + var/list/msg = list({""}) + msg += "Ваша версия BYOND устарела:
    " + msg += "Это может привести к проблемам, таким как к неправильному отображением вещей или лагам.

    " + msg += "Ваша версия: [byond_version].[byond_build]
    " + msg += "Требуемая версия, чтобы убрать это окно: [SUGGESTED_CLIENT_VERSION].[SUGGESTED_CLIENT_BUILD] или выше
    " + msg += "Посетите сайт BYOND, чтобы скачать последнюю версию.
    " + src << browse(msg.Join(""), "window=warning_popup") + to_chat(src, span_userdanger("Ваш клиент BYOND (версия: [byond_version].[byond_build]) устарел. Это может вызвать лаги. Мы крайне рекомендуем скачать последнюю версию с byond.com Прежде чем играть. Также можете обновиться через приложение BYOND.")) /client/proc/update_ambience_pref() @@ -1401,7 +1424,7 @@ /// Returns the biggest number from client.view so we can do easier maths /client/proc/maxview() var/list/screensize = getviewsize(view) - return max(screensize[1], screensize[2]) + return round(max(screensize[1], screensize[2]) / 2) #undef LIMITER_SIZE diff --git a/code/modules/client/preference/loadout/loadout_donor.dm b/code/modules/client/preference/loadout/loadout_donor.dm index 338ecaa832a..bc1229a279c 100644 --- a/code/modules/client/preference/loadout/loadout_donor.dm +++ b/code/modules/client/preference/loadout/loadout_donor.dm @@ -3,6 +3,18 @@ sort_category = "Donor" subtype_path = /datum/gear/donor +/datum/gear/donor/ussptracksuit_black + donator_tier = 1 + cost = 1 + display_name = "track suit (black)" + path = /obj/item/clothing/under/ussptracksuit_black + +/datum/gear/donor/ussptracksuit_white + donator_tier = 1 + cost = 1 + display_name = "track suit (white)" + path = /obj/item/clothing/under/ussptracksuit_white + /datum/gear/donor/kittyears display_name = "Kitty ears" path = /obj/item/clothing/head/kitty diff --git a/code/modules/client/preference/loadout/loadout_glasses.dm b/code/modules/client/preference/loadout/loadout_glasses.dm index a84af914c49..b53c8bd360e 100644 --- a/code/modules/client/preference/loadout/loadout_glasses.dm +++ b/code/modules/client/preference/loadout/loadout_glasses.dm @@ -22,3 +22,8 @@ /datum/gear/glasses/prescription display_name = "Prescription glasses" path = /obj/item/clothing/glasses/regular + +/datum/gear/glasses/sectacticool + display_name = "Security tactical glasses" + path = /obj/item/clothing/glasses/hud/security/sunglasses/tacticool + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") diff --git a/code/modules/client/preference/loadout/loadout_hat.dm b/code/modules/client/preference/loadout/loadout_hat.dm index 3844d89b851..8e08be9c49c 100644 --- a/code/modules/client/preference/loadout/loadout_hat.dm +++ b/code/modules/client/preference/loadout/loadout_hat.dm @@ -202,3 +202,8 @@ /datum/gear/hat/capsolgov display_name = "cap, Sol Gov" path = /obj/item/clothing/head/soft/solgov + +/datum/gear/hat/lwhelmet + display_name = "security lightweight helmet" + path = /obj/item/clothing/head/helmet/lightweighthelmet + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") diff --git a/code/modules/client/preference/loadout/loadout_uniform.dm b/code/modules/client/preference/loadout/loadout_uniform.dm index 6dec7683054..025838ff869 100644 --- a/code/modules/client/preference/loadout/loadout_uniform.dm +++ b/code/modules/client/preference/loadout/loadout_uniform.dm @@ -127,6 +127,10 @@ /datum/gear/uniform/skirt subtype_path = /datum/gear/uniform/skirt +/datum/gear/uniform/skirt/syndi + display_name = "skirt, tactical" + path = /obj/item/clothing/under/syndicate/tacticool/skirt + /datum/gear/uniform/skirt/blue display_name = "plaid skirt, blue" path = /obj/item/clothing/under/dress/plaid_blue @@ -265,6 +269,7 @@ display_name = "skirt, chaplain" path = /obj/item/clothing/under/rank/chaplain/skirt allowed_roles = list("Chaplain") + /datum/gear/uniform/skirt/job/barber display_name = "skirt, barber" path = /obj/item/clothing/under/barber/skirt @@ -437,3 +442,13 @@ display_name = "hawaiian shirt (orange)" description = "Come one step closer and I will knock his teeth out!" path = /obj/item/clothing/under/orangehawaiianshirt + +/datum/gear/uniform/ussptracksuit_red + display_name = "track suit (red)" + description = "A classic track suit. There is a small tag on the clothes that says \"Made in the USSP\"." + path = /obj/item/clothing/under/ussptracksuit_red + +/datum/gear/uniform/ussptracksuit_blue + display_name = "track suit (blue)" + description = "A classic track suit. There is a small tag on the clothes that says \"Made in the USSP\"." + path = /obj/item/clothing/under/ussptracksuit_blue diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index cb0827a3c31..f976ade0de9 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -196,6 +196,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts var/med_record = "" var/sec_record = "" var/gen_record = "" + var/exploit_record = "" var/disabilities = 0 var/nanotrasen_relation = "Neutral" @@ -245,6 +246,8 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts var/list/keybindings_overrides = null /// View range preference for this client var/viewrange = DEFAULT_CLIENT_VIEWSIZE + /// How dark things are if client is a ghost, 0-255 + var/ghost_darkness_level = LIGHTING_PLANE_ALPHA_VISIBLE /// Minigames notification about their end, start and etc. var/minigames_notifications = TRUE @@ -253,7 +256,6 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts /datum/preferences/New(client/C) parent = C b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") - parent?.set_macros() max_gear_slots = CONFIG_GET(number/max_loadout_points) var/loaded_preferences_successfully = FALSE if(istype(C)) @@ -313,7 +315,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "Name: " dat += "[real_name]" dat += "(Randomize)" - dat += "(Always Randomize)
    " + dat += "(Always Randomize)
    " dat += "" dat += "
    " dat += "Slot [default_slot][saved ? "" : " (empty)"]
    " @@ -748,13 +750,13 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts var/list/html = list() html += "" if(!length(SSjobs.occupations)) - html += "The Jobs subsystem is not yet finished creating jobs, please try again later" - html += "
    Done

    " // Easier to press up here. + html += "Подсистема вакансий ещё не успела создать вакансии, пожалуйста, повторите попытку позже" + html += "
    Принять

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

    " - html += "
    Save

    " // Easier to press up here. - html += "
    Left-click to raise an occupation preference, right-click to lower it.
    " + html += "Выберите предпочитаемые должности
    Определите приоритет на получение желаемой работы.

    " + html += "
    Сохранить

    " // Easier to press up here. + html += "
    Левый клик - для повышения предпочтения профессии, правый - для понижения.
    " html += "" html += "
    " // Table within a table for alignment, also allows you to easily add more colomns. html += "" @@ -788,95 +790,96 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts html += "
    " index = 0 + var/color + color = "dark" + if(job.admin_only) + color = "light" html += "" + html += "[rank]" continue if(jobban_isbanned(user, job.title)) - html += "[rank]" + html += "[rank]" continue var/available_in_playtime = job.available_in_playtime(user.client) if(available_in_playtime) - html += "[rank]" + html += "[rank]" continue if(job.barred_by_disability(user.client)) - html += "[rank]" + html += "[rank]" continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) - html += "[rank]" + html += "[rank]" continue if(!job.character_old_enough(user.client)) - html += "[rank]" - continue - if((job_support_low & JOB_CIVILIAN) && (job.title != "Civilian")) - html += "[rank]" + html += "[rank]" continue if((job.title in GLOB.command_positions) || (job.title == "AI"))//Bold head jobs - html += "[rank]" + html += "[rank]" else - html += "[rank]" + html += "[rank]" + if((job_support_low & JOB_CIVILIAN) && (job.title != "Civilian")) + html += "" + continue html += "" + index += 1 + html += "" continue - /* - if(GetJobDepartment(job, 1) & job.flag) - HTML += " \[High]" - else if(GetJobDepartment(job, 2) & job.flag) - HTML += " \[Medium]" - else if(GetJobDepartment(job, 3) & job.flag) - HTML += " \[Low]" + + if(prefLowerLevel>1) + html += "[prefLevelLabel]" else - HTML += " \[NEVER]" - */ - html += "[prefLevelLabel]" + html += "[prefLevelLabel]" html += "" + index += 1 for(var/i in 1 to limit - index) // Finish the column so it is even html += "" @@ -885,22 +888,23 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts switch(alternate_option) if(GET_RANDOM_JOB) - html += "

    Get random job if preferences unavailable

    " + html += "

    Получить случайную работу, если предпочитаемая работа недоступна

    " if(BE_ASSISTANT) - html += "

    Be a civilian if preferences unavailable

    " + html += "

    Стать гражданским, если предпочитаемая работа недоступна

    " if(RETURN_TO_LOBBY) - html += "

    Return to lobby if preferences unavailable

    " + html += "

    Вернуться в лобби, если предпочитаемая работа недоступна

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

    Learn About Job Selection
    " + html += "
    Сброс
    " + html += "

    Узнать о \"Выборе должности\"
    " html += "" user << browse(null, "window=preferences") // user << browse(HTML, "window=mob_occupation;size=[width]x[height]") - var/datum/browser/popup = new(user, "mob_occupation", "
    Occupation Preferences
    ", width, height) + var/datum/browser/popup = new(user, "mob_occupation", "
    Предпочитаемые должности
    ", width, height) popup.set_window_options("can_close=0") var/html_string = html.Join() popup.set_content(html_string) + popup.add_stylesheet("bootstrap.min.css", 'html/browser/bootstrap.min.css') popup.open(0) return @@ -921,6 +925,15 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts parent?.update_active_keybindings() return keybindings +/datum/preferences/proc/null_longtextfix(raw) + var/text + if(raw) + try + text = raw + catch + text = "" + return text + /datum/preferences/proc/capture_keybinding(mob/user, datum/keybinding/KB, old) var/HTML = {"
    Keybinding: [KB.name]

    Press any key to change
    Press ESC to clear
    @@ -1104,11 +1117,18 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts HTML += "
    Security Records
    " if(length(sec_record) <= 40) - HTML += "[sec_record]
    " + HTML += "[sec_record]" + else + HTML += "[copytext_char(sec_record, 1, 37)]..." + + HTML += "
    Exploitable Records
    " + + if(length(exploit_record) <= 40) + HTML += "[exploit_record]" else - HTML += "[copytext_char(sec_record, 1, 37)]...
    " + HTML += "[copytext_char(exploit_record, 1, 37)]..." - HTML += "\[Done\]" + HTML += "

    \[Done\]" HTML += "" var/datum/browser/popup = new(user, "records", "
    Character Records
    ", 350, 300) @@ -1365,6 +1385,15 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts gen_record = genmsg SetRecords(user) + if(href_list["task"] == "exploit_record") + var/expmsg = input(usr,"Set your exploitable notes here. This info is available to traitors only.","Exploitable Records",html_decode(exploit_record)) as message + + if(expmsg != null) + expmsg = copytext(expmsg, 1, MAX_PAPER_MESSAGE_LEN) + expmsg = html_encode(expmsg) + + exploit_record = expmsg + SetRecords(user) if(href_list["preference"] == "gear") if(href_list["toggle_gear"]) @@ -2200,14 +2229,14 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts if("clientfps") var/version_message - if(user.client && user.client.byond_version < 511) - version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low" - if(world.byond_version < 511) + if(user.client && user.client.byond_version < MINIMUM_FPS_VERSION) + version_message = "\nYou need to be using byond version [MINIMUM_FPS_VERSION] or later to take advantage of this feature, your version of [user.client.byond_version] is too low" + if(world.byond_version < MINIMUM_FPS_VERSION) version_message += "\nThis server does not currently support client side fps. You can set now for when it does." var/desiredfps = input(user, "Выберите желаемый FPS.[version_message]\n 0 = значение по умолчанию ([CONFIG_GET(number/clientfps)]) < РЕКОМЕНДОВАНО\n -1 = синхронизировано с сервером ([world.fps])\n30 = Может помочь при проблемах с плавностью.", "Настройка персонажа", clientfps) as null|num if(!isnull(desiredfps)) clientfps = desiredfps - if(world.byond_version >= 511 && user.client && user.client.byond_version >= 511) + if(world.byond_version >= MINIMUM_FPS_VERSION && user.client && user.client.byond_version >= MINIMUM_FPS_VERSION) if(clientfps) parent.fps = clientfps else @@ -2596,6 +2625,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts character.med_record = med_record character.sec_record = sec_record character.gen_record = gen_record + character.exploit_record = exploit_record character.change_gender(gender) character.age = age diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index b71da792be3..27ed97fce51 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -20,7 +20,8 @@ discord_id, discord_name, keybindings, - viewrange + viewrange, + ghost_darkness_level FROM [format_table_name("player")] WHERE ckey=:ckey"}, list( "ckey" = C.ckey @@ -53,6 +54,7 @@ discord_name = query.item[18] keybindings = init_keybindings(raw = query.item[19]) viewrange = query.item[20] + ghost_darkness_level = query.item[21] qdel(query) @@ -105,7 +107,8 @@ clientfps=:clientfps, parallax=:parallax, keybindings=:keybindings, - viewrange=:viewrange + viewrange=:viewrange, + ghost_darkness_level=:ghost_darkness_level WHERE ckey=:ckey"}, list( // OH GOD THE PARAMETERS "ooccolour" = ooccolor, @@ -125,7 +128,8 @@ "parallax" = parallax, "keybindings" = json_encode(keybindings_overrides), "viewrange" = viewrange, - "ckey" = C.ckey + "ghost_darkness_level" = ghost_darkness_level, + "ckey" = C.ckey, ) ) @@ -202,6 +206,7 @@ med_record, sec_record, gen_record, + exploit_record, disabilities, player_alt_titles, organ_data, @@ -279,6 +284,7 @@ med_record = query.item[42] sec_record = query.item[43] gen_record = query.item[44] + exploit_record = null_longtextfix(query.item[45]) // Apparently, the preceding vars weren't always encoded properly... if(findtext(flavor_text, "<")) // ... so let's clumsily check for tags! flavor_text = html_encode(flavor_text) @@ -288,31 +294,33 @@ sec_record = html_encode(sec_record) if(findtext(gen_record, "<")) gen_record = html_encode(gen_record) - disabilities = text2num(query.item[45]) - player_alt_titles = params2list(query.item[46]) - organ_data = params2list(query.item[47]) - rlimb_data = params2list(query.item[48]) - nanotrasen_relation = query.item[49] - speciesprefs = text2num(query.item[50]) + if(findtext(exploit_record, "<")) + exploit_record = html_encode(exploit_record) + disabilities = text2num(query.item[46]) + player_alt_titles = params2list(query.item[47]) + organ_data = params2list(query.item[48]) + rlimb_data = params2list(query.item[49]) + nanotrasen_relation = query.item[50] + speciesprefs = text2num(query.item[51]) //socks - socks = query.item[51] - body_accessory = query.item[52] - loadout_gear = params2list(query.item[53]) - autohiss_mode = text2num(query.item[54]) - uplink_pref = query.item[55] + socks = query.item[52] + body_accessory = query.item[53] + loadout_gear = params2list(query.item[54]) + autohiss_mode = text2num(query.item[55]) + uplink_pref = query.item[56] // TTS - tts_seed = query.item[56] + tts_seed = query.item[57] //Emotes - custom_emotes_tmp = query.item[57] + custom_emotes_tmp = query.item[58] // Gradient - h_grad_style = query.item[58] - h_grad_offset_x = query.item[59] // parsed down below - h_grad_colour = query.item[60] - h_grad_alpha = query.item[61] + h_grad_style = query.item[59] + h_grad_offset_x = query.item[60] // parsed down below + h_grad_colour = query.item[61] + h_grad_alpha = query.item[62] saved = TRUE @@ -472,6 +480,7 @@ med_record=:med_record, sec_record=:sec_record, gen_record=:gen_record, + exploit_record=:exploit_record, player_alt_titles=:playertitlelist, disabilities=:disabilities, organ_data=:organlist, @@ -536,6 +545,7 @@ "med_record" = med_record, "sec_record" = sec_record, "gen_record" = gen_record, + "exploit_record" = exploit_record, "playertitlelist" = (playertitlelist ? playertitlelist : ""), // This it intentnional. It wont work without it! "disabilities" = disabilities, "organlist" = (organlist ? organlist : ""), @@ -592,6 +602,7 @@ med_record, sec_record, gen_record, + exploit_record, player_alt_titles, disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs, socks, body_accessory, gear, autohiss, hair_gradient, hair_gradient_offset, hair_gradient_colour, hair_gradient_alpha, uplink_pref, tts_seed, custom_emotes) @@ -620,6 +631,7 @@ :med_record, :sec_record, :gen_record, + :exploit_record, :playertitlelist, :disabilities, :organlist, :rlimblist, :nanotrasen_relation, :speciesprefs, :socks, :body_accessory, :gearlist, :autohiss_mode, :h_grad_style, :h_grad_offset, :h_grad_colour, :h_grad_alpha, :uplink_pref, :tts_seed, :custom_emotes) @@ -672,6 +684,7 @@ "med_record" = med_record, "sec_record" = sec_record, "gen_record" = gen_record, + "exploit_record" = exploit_record, "playertitlelist" = (playertitlelist ? playertitlelist : ""), // This it intentnional. It wont work without it! "disabilities" = disabilities, "organlist" = (organlist ? organlist : ""), diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index a0022fb206b..6c4bdf0aa11 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -22,19 +22,22 @@ var/alt_desc = null var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect - var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets - - var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down - var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv - var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW //what to toggle when toggled with weldingvisortoggle() - - var/toggle_message = null - var/alt_toggle_message = null - var/active_sound = null - var/toggle_sound = null - var/toggle_cooldown = null + var/tint_up = 0 // tint when its up + var/up = FALSE //but seperated to allow items to protect but not impair vision, like space helmets + + var/visor_flags = NONE //flags that are added/removed when an item is adjusted up/down + var/visor_flags_inv = NONE //same as visor_flags, but for flags_inv + var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW | VISOR_FULL_HUD + //what to toggle when toggled with weldingvisortoggle() + + var/can_toggle = FALSE + var/toggle_on_message + var/toggle_off_message + var/active_sound + var/toggle_sound + var/toggle_cooldown = 0 var/cooldown = 0 - var/species_disguise = null + var/species_disguise var/magical = FALSE var/dyeable = FALSE var/heal_bodypart = null //If a bodypart or an organ is specified here, it will slowly regenerate while the clothes are worn. Currently only implemented for eyes, though. @@ -42,44 +45,49 @@ w_class = WEIGHT_CLASS_SMALL -/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. - if(!can_use(user)) +/obj/item/clothing/update_icon_state() + if(!can_toggle) return FALSE + // Done as such to not break chameleon gear since you can't rely on initial states + icon_state = "[replacetext("[icon_state]", "_up", "")][up ? "_up" : ""]" + return TRUE - visor_toggling() - to_chat(user, "You adjust \the [src] [up ? "up" : "down"].") +/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. + if(!can_use(user)) + return FALSE - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.update_head(src, forced = TRUE) - if(H.wear_mask == src) - H.wear_mask_update(src, FALSE) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + visor_toggling(user) + to_chat(user, span_notice("You adjust [src] [up ? "up" : "down"].")) + update_equipped_item() return TRUE + /obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags + if(!can_toggle) + return FALSE + + . = TRUE up = !up flags ^= visor_flags flags_inv ^= visor_flags_inv flags_cover ^= initial(flags_cover) - icon_state = "[initial(icon_state)][up ? "up" : ""]" if(visor_vars_to_toggle & VISOR_FLASHPROTECT) flash_protect ^= initial(flash_protect) if(visor_vars_to_toggle & VISOR_TINT) - tint ^= initial(tint) + tint = up ? tint_up : initial(tint) + update_icon(UPDATE_ICON_STATE) + // Aurora forensics port. /obj/item/clothing/clean_blood() . = ..() gunshot_residue = null + /obj/item/clothing/proc/can_use(mob/user) - if(user && ismob(user)) - if(!user.incapacitated()) - return TRUE + if(isliving(user) && !user.incapacitated()) + return TRUE return FALSE @@ -95,7 +103,7 @@ return FALSE -/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 @@ -158,6 +166,7 @@ var/list/color_view = null//overrides client.color while worn var/prescription = FALSE var/prescription_upgradable = FALSE + var/over_hat = FALSE var/over_mask = FALSE //Whether or not the eyewear is rendered above the mask. Purely cosmetic. strip_delay = 20 // but seperated to allow items to protect but not impair vision, like space helmets put_on_delay = 25 @@ -180,6 +189,12 @@ SEE_PIXELS// if an object is located on an unlit area, but some of its pixels ar BLIND // can't see anything */ + +/obj/item/clothing/glasses/update_icon_state() + if(..()) + item_state = "[replacetext("[item_state]", "_up", "")][up ? "_up" : ""]" + + /obj/item/clothing/glasses/verb/adjust_eyewear() //Adjust eyewear to be worn above or below the mask. set name = "Adjust Eyewear" set category = "Object" @@ -230,20 +245,29 @@ BLIND // can't see anything return 0 // return 1 to cancel attack_hand() /obj/item/clothing/gloves/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wirecutters)) + if(W.tool_behaviour == TOOL_WIRECUTTER) if(!clipped) playsound(src.loc, W.usesound, 100, 1) user.visible_message("[user] snips the fingertips off [src].","You snip the fingertips off [src].") - clipped = 1 - name = "mangled [name]" - desc = "[desc] They have had the fingertips cut off of them." - update_icon() + clipped = TRUE + update_appearance() else to_chat(user, "[src] have already been clipped!") return else return ..() + +/obj/item/clothing/gloves/update_name(updates = ALL) + . = ..() + name = clipped ? "mangled [initial(name)]" : initial(name) + + +/obj/item/clothing/gloves/update_desc(updates = ALL) + . = ..() + desc = clipped ? "[initial(desc)] They have had the fingertips cut off of them." : initial(desc) + + /obj/item/clothing/under/proc/set_sensors(mob/living/user) if(user.stat || user.restrained()) return @@ -333,8 +357,6 @@ BLIND // can't see anything var/see_in_dark = 0 var/lighting_alpha - var/can_toggle = null - sprite_sheets = list( "Monkey" = 'icons/mob/clothing/species/monkey/head.dmi', "Farwa" = 'icons/mob/clothing/species/monkey/head.dmi', @@ -343,10 +365,51 @@ BLIND // can't see anything "Stok" = 'icons/mob/clothing/species/monkey/head.dmi' ) -///obj/item/clothing/head/equipped(var/mob/living/carbon/human/lesser/monkey/user, var/slot) //Смещаем шапки у обезьян -// ..() -// if(!issmall(user)) -// return + +/obj/item/clothing/head/update_icon_state() + if(..()) + item_state = "[replacetext("[item_state]", "_up", "")][up ? "_up" : ""]" + + +/obj/item/clothing/head/attack_self(mob/user) + adjust_headgear(user) + + +/obj/item/clothing/head/proc/adjust_headgear(mob/living/carbon/human/user) + if(!can_toggle || user.incapacitated() || world.time < cooldown + toggle_cooldown) + return FALSE + + . = TRUE + + cooldown = world.time + up = !up + update_icon(UPDATE_ICON_STATE) + if(user.head == src) + user.update_head(src, forced = TRUE) + for(var/datum/action/action as anything in actions) + action.UpdateButtonIcon() + else + update_equipped_item() + + if(up && toggle_on_message) + to_chat(user, span_notice("[toggle_on_message] [src]")) + else if(!up && toggle_off_message) + to_chat(user, span_notice("[toggle_off_message] [src]")) + + if(active_sound) + INVOKE_ASYNC(src, PROC_REF(headgear_loop_sound)) + + if(toggle_sound) + playsound(loc, toggle_sound, 100, FALSE, 4) + + +/obj/item/clothing/head/proc/headgear_loop_sound() + set waitfor = FALSE + + while(up) + playsound(loc, active_sound, 100, FALSE, 4) + sleep(1.5 SECONDS) + //Mask /obj/item/clothing/mask @@ -354,7 +417,6 @@ BLIND // can't see anything icon = 'icons/obj/clothing/masks.dmi' body_parts_covered = HEAD slot_flags = SLOT_MASK - var/mask_adjusted = 0 var/adjusted_flags = null strip_delay = 40 put_on_delay = 40 @@ -368,16 +430,22 @@ BLIND // can't see anything ) //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 - if(mask_adjusted) - icon_state = initial(icon_state) + if(!can_toggle || user.incapacitated()) //This check allows you to adjust your masks while you're buckled into chairs or beds. + return FALSE + if(is_obscured_for_unEquip(H)) + return FALSE + + . = TRUE + + up = !up + update_icon(UPDATE_ICON_STATE) + + if(!up) gas_transfer_coefficient = initial(gas_transfer_coefficient) permeability_coefficient = initial(permeability_coefficient) - to_chat(user, "You push \the [src] back into place.") - mask_adjusted = 0 + to_chat(user, span_notice("You push \the [src] back into place.")) slot_flags = initial(slot_flags) if(flags_inv != initial(flags_inv)) if(initial(flags_inv) & HIDENAME) //If the mask is one that hides the face and can be adjusted yet lost that trait when it was adjusted, make it hide the face again. @@ -388,18 +456,11 @@ BLIND // can't see anything if(flags_cover != initial(flags_cover)) if(initial(flags_cover) & MASKCOVERSMOUTH) //If the mask covers the mouth when it's down and can be adjusted yet lost that trait when it was adjusted, make it cover the mouth again. flags_cover |= MASKCOVERSMOUTH - if(H.head == src && flags_inv == HIDENAME) //Means that only things like bandanas and balaclavas will be affected since they obscure the identity of the wearer. - if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground. - user.drop_item_ground(src) - else //Otherwise, put it in an available hand, the active one preferentially. - user.drop_item_ground(src) - user.put_in_hands(src) + else - icon_state += "_up" - to_chat(user, "You push \the [src] out of the way.") + to_chat(user, span_notice("You push \the [src] out of the way.")) gas_transfer_coefficient = null permeability_coefficient = null - mask_adjusted = 1 if(adjusted_flags) slot_flags = adjusted_flags if(ishuman(user) && H.internal && !H.get_organ_slot(INTERNAL_ORGAN_BREATHING_TUBE) && user.wear_mask == src) /*If the user was wearing the mask providing internals on their face at the time it was adjusted, turn off internals. @@ -413,18 +474,13 @@ BLIND // can't see anything flags_cover &= ~MASKCOVERSMOUTH if(flags & AIRTIGHT) //If the mask was airtight, it won't be anymore since you just pushed it off your face. flags &= ~AIRTIGHT - if(user.wear_mask == src && initial(flags_inv) == HIDENAME) //Means that you won't have to take off and put back on simple things like breath masks which, realistically, can just be pulled down off your face. - if(H.l_hand && H.r_hand) //If both hands are occupied, drop the object on the ground. - user.drop_item_ground(src) - else //Otherwise, put it in an available hand, the active one preferentially. - user.drop_item_ground(src) - user.put_in_hands(src) - H.wear_mask_update(src, toggle_off = mask_adjusted) - usr.update_inv_wear_mask() - usr.update_inv_head() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + + if(H?.wear_mask == src) + H.wear_mask_update(src, toggle_off = up) + for(var/datum/action/action as anything in actions) + action.UpdateButtonIcon() + else + update_equipped_item() // Changes the speech verb when wearing a mask if a value is returned /obj/item/clothing/mask/proc/change_speech_verb() @@ -436,9 +492,9 @@ BLIND // can't see anything icon = 'icons/obj/clothing/shoes.dmi' desc = "Comfortable-looking shoes." gender = PLURAL //Carn: for grammatically correct text-parsing - var/chained = 0 - var/can_cut_open = 0 - var/cut_open = 0 + //var/chained = 0 + var/can_cut_open = FALSE + var/cut_open = FALSE body_parts_covered = FEET slot_flags = SLOT_FEET pickup_sound = 'sound/items/handling/shoes_pickup.ogg' @@ -476,29 +532,44 @@ BLIND // can't see anything M.dropped() return - if(istype(I, /obj/item/wirecutters)) + if(I.tool_behaviour == TOOL_WIRECUTTER) if(can_cut_open) if(!cut_open) playsound(src.loc, I.usesound, 100, 1) user.visible_message("[user] cuts open the toes of [src].","You cut open the toes of [src].") - cut_open = 1 - icon_state = "[icon_state]_opentoe" - item_state = "[item_state]_opentoe" - name = "mangled [name]" - desc = "[desc] They have had their toes opened up." - update_icon() - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(H.shoes == src) - user.update_inv_shoes() + cut_open = TRUE + update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) else to_chat(user, "[src] have already had [p_their()] toes cut open!") return else return ..() + +/obj/item/clothing/shoes/update_name() + . = ..() + if(!cut_open) + return + name = "mangled [initial(name)]" + + +/obj/item/clothing/shoes/update_desc() + . = ..() + if(!cut_open) + return + desc = "[initial(desc)] They have had their toes opened up." + + +/obj/item/clothing/shoes/update_icon_state() + if(!cut_open) + return + icon_state = "[icon_state]_opentoe" + item_state = "[item_state]_opentoe" + update_equipped_item() + + /obj/item/proc/negates_gravity() - return 0 + return //Suit /obj/item/clothing/suit @@ -511,9 +582,8 @@ BLIND // can't see anything pickup_sound = 'sound/items/handling/cloth_pickup.ogg' slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" - var/suittoggled = FALSE - var/suit_adjusted = 0 - var/ignore_suitadjust = 1 + var/suit_adjusted = FALSE + var/ignore_suitadjust = TRUE var/adjust_flavour = null var/list/hide_tail_by_species = null max_integrity = 400 @@ -524,58 +594,59 @@ BLIND // can't see anything "Farwa" = 'icons/mob/clothing/species/monkey/suit.dmi', "Wolpin" = 'icons/mob/clothing/species/monkey/suit.dmi', "Neara" = 'icons/mob/clothing/species/monkey/suit.dmi', - "Plasmaman" = 'icons/mob/clothing/species/plasmaman/suit.dmi' - //"Stok" = 'icons/mob/clothing/species/monkey/suit.dmi' + "Plasmaman" = 'icons/mob/clothing/species/plasmaman/suit.dmi', + "Stok" = 'icons/mob/clothing/species/monkey/suit.dmi' ) //Proc that opens and closes jackets. -/obj/item/clothing/suit/proc/adjustsuit(var/mob/user) - if(!ignore_suitadjust) - if(!user.incapacitated()) - if(!(HULK in user.mutations)) - if(suit_adjusted) - var/flavour = "close" - icon_state = copytext(icon_state, 1, findtext(icon_state, "_open")) /*Trims the '_open' off the end of the icon state, thus avoiding a case where jackets that start open will - end up with a suffix of _open_open if adjusted twice, since their initial state is _open. */ - item_state = copytext(item_state, 1, findtext(item_state, "_open")) - if(adjust_flavour) - flavour = "[copytext(adjust_flavour, 3, length(adjust_flavour) + 1)] up" //Trims off the 'un' at the beginning of the word. unzip -> zip, unbutton->button. - to_chat(user, "You [flavour] \the [src].") - suit_adjusted = 0 //Suit is no longer adjusted. - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - else - var/flavour = "open" - icon_state += "_open" - item_state += "_open" - if(adjust_flavour) - flavour = "[adjust_flavour]" - to_chat(user, "You [flavour] \the [src].") - suit_adjusted = 1 //Suit's adjusted. - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - else - if(user.can_unEquip(src)) //Checks to see if the item can be unequipped. If so, lets shred. Otherwise, struggle and fail. - if(contents) //If the suit's got any storage capability... - for(var/obj/item/O in contents) //AVOIDING ITEM LOSS. Check through everything that's stored in the jacket and see if one of the items is a pocket. - if(istype(O, /obj/item/storage/internal)) //If it's a pocket... - if(O.contents) //Check to see if the pocket's got anything in it. - for(var/obj/item/I in O.contents) //Dump the pocket out onto the floor below the user. - user.drop_item_ground(I, force = TRUE) - - user.visible_message("[user] bellows, [pick("shredding", "ripping open", "tearing off")] [user.p_their()] jacket in a fit of rage!","You accidentally [pick("shred", "rend", "tear apart")] [src] with your [pick("excessive", "extreme", "insane", "monstrous", "ridiculous", "unreal", "stupendous")] [pick("power", "strength")]!") - user.temporarily_remove_item_from_inventory(src) - qdel(src) //Now that the pockets have been emptied, we can safely destroy the jacket. - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) - else - to_chat(user, "You yank and pull at \the [src] with your [pick("excessive", "extreme", "insane", "monstrous", "ridiculous", "unreal", "stupendous")] [pick("power", "strength")], however you are unable to change its state!")//Yep, that's all they get. Avoids having to snowflake in a cooldown. - - return - user.update_inv_wear_suit() +/obj/item/clothing/suit/proc/adjustsuit(mob/user) + if(ignore_suitadjust) + to_chat(user, span_notice("You attempt to button up the velcro on [src], before promptly realising how foolish you are.")) + return + if(user.incapacitated()) + return + + if((HULK in user.mutations)) + if(user.can_unEquip(src)) //Checks to see if the item can be unequipped. If so, lets shred. Otherwise, struggle and fail. + for(var/obj/item/thing in src) //AVOIDING ITEM LOSS. Check through everything that's stored in the jacket and see if one of the items is a pocket. + if(istype(thing, /obj/item/storage/internal)) //If it's a pocket... + for(var/obj/item/pocket_thing in thing) //Dump the pocket out onto the floor below the user. + user.drop_item_ground(pocket_thing, force = TRUE) + + user.visible_message("[user] bellows, [pick("shredding", "ripping open", "tearing off")] [user.p_their()] jacket in a fit of rage!","You accidentally [pick("shred", "rend", "tear apart")] [src] with your [pick("excessive", "extreme", "insane", "monstrous", "ridiculous", "unreal", "stupendous")] [pick("power", "strength")]!") + user.temporarily_remove_item_from_inventory(src) + qdel(src) //Now that the pockets have been emptied, we can safely destroy the jacket. + user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!")) + else + to_chat(user, "You yank and pull at \the [src] with your [pick("excessive", "extreme", "insane", "monstrous", "ridiculous", "unreal", "stupendous")] [pick("power", "strength")], however you are unable to change its state!")//Yep, that's all they get. Avoids having to snowflake in a cooldown. + return + + update_icon(UPDATE_ICON_STATE) + update_equipped_item() + + if(suit_adjusted) + var/flavour = "close" + if(adjust_flavour) + flavour = "[copytext(adjust_flavour, 3, length(adjust_flavour) + 1)] up" //Trims off the 'un' at the beginning of the word. unzip -> zip, unbutton->button. + to_chat(user, "You [flavour] [src].") else - to_chat(user, "You attempt to button up the velcro on \the [src], before promptly realising how foolish you are.") + var/flavour = "open" + if(adjust_flavour) + flavour = "[adjust_flavour]" + to_chat(user, "You [flavour] [src].") + + suit_adjusted = !suit_adjusted + + +/obj/item/clothing/suit/update_icon_state() + // Trims the '_open' off the end of the icon state, thus avoiding a case where jackets that start open will + // end up with a suffix of _open_open if adjusted twice, since their initial state is _open + var/base_icon_state = copytext(icon_state, 1, findtext(icon_state, "_open")) + var/base_item_state = copytext(item_state, 1, findtext(item_state, "_open")) + + icon_state = suit_adjusted ? base_icon_state : "[base_icon_state]_open" + item_state = suit_adjusted ? base_item_state : "[base_item_state]_open" + // Proc used to check if suit storage is limited by item weight // Allows any suit to have their own weight limit for items that can be equipped into suit storage @@ -657,10 +728,10 @@ BLIND // can't see anything var/obj/item/tank/jetpack/suit/jetpack = null -/obj/item/clothing/suit/space/New() +/obj/item/clothing/suit/space/Initialize(mapload) + . = ..() if(jetpack && ispath(jetpack)) jetpack = new jetpack(src) - ..() /obj/item/clothing/suit/space/screwdriver_act(mob/user, obj/item/I) @@ -679,22 +750,18 @@ BLIND // can't see anything to_chat(user, span_notice("You successfully remove the jetpack from [src].")) -/obj/item/clothing/suit/space/equipped(mob/user, slot, initial) +/obj/item/clothing/suit/space/equipped(mob/user, slot, initial = FALSE) . = ..() - - if(jetpack) - if(slot == slot_wear_suit) - for(var/X in jetpack.actions) - var/datum/action/A = X - A.Grant(user) + if(jetpack && slot == slot_wear_suit) + for(var/datum/action/action as anything in jetpack.actions) + action.Grant(user) /obj/item/clothing/suit/space/dropped(mob/user, silent = FALSE) - ..() + . = ..() if(jetpack) - for(var/X in jetpack.actions) - var/datum/action/A = X - A.Remove(user) + for(var/datum/action/action as anything in jetpack.actions) + action.Remove(user) /obj/item/clothing/suit/space/attackby(obj/item/I, mob/user, params) @@ -736,8 +803,8 @@ BLIND // can't see anything "Monkey" = 'icons/mob/clothing/species/monkey/uniform.dmi', "Farwa" = 'icons/mob/clothing/species/monkey/uniform.dmi', "Wolpin" = 'icons/mob/clothing/species/monkey/uniform.dmi', - "Neara" = 'icons/mob/clothing/species/monkey/uniform.dmi' - //"Stok" = 'icons/mob/clothing/species/monkey/uniform.dmi' - стоки слишком жирные для маленькой одежды + "Neara" = 'icons/mob/clothing/species/monkey/uniform.dmi', + "Stok" = 'icons/mob/clothing/species/monkey/uniform.dmi' ) var/has_sensor = TRUE//For the crew computer 2 = unable to change mode @@ -755,10 +822,12 @@ BLIND // can't see anything var/list/accessories = list() var/basecolor -/obj/item/clothing/under/rank/New() + +/obj/item/clothing/under/rank/Initialize(mapload) + . = ..() if(random_sensor) sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_VITALS, SENSOR_COORDS) - ..() + /obj/item/clothing/under/Destroy() QDEL_LIST(accessories) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 9a44815a53e..8f602caf51c 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -1,40 +1,78 @@ -/obj/item/clothing/glasses/New() +/obj/item/clothing/glasses/Initialize(mapload) . = ..() if(prescription_upgradable && prescription) // Pre-upgraded upgradable glasses - name = "prescription [name]" + upgrade_prescription() -/obj/item/clothing/glasses/attackby(obj/item/O, mob/user) - if(user.stat || user.restrained() || !ishuman(user)) + +/obj/item/clothing/glasses/attackby(obj/item/I, mob/living/carbon/human/user, params) + if(!prescription_upgradable || user.incapacitated() || !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.drop_transfer_item_to_loc(O, src) // Store the glasses for later removal - to_chat(H, "You fit \the [name] with lenses from \the [O].") - prescription = TRUE - name = "prescription [name]" - if(H.glasses == src) - H.update_nearsighted_effects() - 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 = FALSE - name = initial(name) - H.put_in_hands(G) - if(H.glasses == src) - H.update_nearsighted_effects() - return - return ..() + + + if(!istype(I, /obj/item/clothing/glasses/regular)) + return ..() + + if(prescription) + to_chat(user, span_warning("You can't possibly imagine how adding more lenses would improve [src].")) + return + + if(!user.drop_transfer_item_to_loc(I, src)) // Store the glasses for later removal + return + + upgrade_prescription(I, user) + + +/obj/item/clothing/glasses/update_name(updates = ALL) + . = ..() + name = prescription ? "prescription [initial(name)]" : initial(name) + + +/obj/item/clothing/glasses/proc/upgrade_prescription(obj/item/I, mob/living/carbon/human/user) + if(!I) + new /obj/item/clothing/glasses/regular(src) + else if(I.loc != src) + I.forceMove(src) + prescription = TRUE + update_appearance(UPDATE_NAME) + if(user) + to_chat(user, span_notice("You fit [src] with lenses from [I].")) + if(user.glasses == src) + user.update_nearsighted_effects() + + +/obj/item/clothing/glasses/proc/remove_prescription(mob/living/carbon/human/user) + var/obj/item/clothing/glasses/regular/prescription_glasses = locate() in src + + if(!prescription_glasses) + return + + prescription = FALSE + update_appearance(UPDATE_NAME) + + prescription_glasses.forceMove(drop_location()) + + if(user) + to_chat(user, span_notice("You salvage the prescription lenses from [src].")) + user.put_in_hands(prescription_glasses, ignore_anim = FALSE) + if(user.glasses == src) + user.update_nearsighted_effects() + + +/obj/item/clothing/glasses/screwdriver_act(mob/living/user, obj/item/I) + if(!prescription) + to_chat(user, span_notice("There are no prescription lenses in [src].")) + return FALSE + if(!I.use_tool(src, user, 0, volume = I.tool_volume)) + return TRUE + remove_prescription(user) + return TRUE + /obj/item/clothing/glasses/visor_toggling() - ..() + . = ..() + if(!.) + return . if(visor_vars_to_toggle & VISOR_VISIONFLAGS) vision_flags ^= initial(vision_flags) if(visor_vars_to_toggle & VISOR_DARKNESSVIEW) @@ -42,15 +80,6 @@ if(visor_vars_to_toggle & VISOR_INVISVIEW) invis_view ^= initial(invis_view) -/obj/item/clothing/glasses/weldingvisortoggle(mob/user) - . = ..() - if(. && user) - if(ishuman(user)) - var/mob/living/carbon/human/human = user - human.wear_glasses_update(src) - else - user.update_sight() - user.update_inv_glasses() /obj/item/clothing/glasses/meson name = "Optical Meson Scanner" @@ -440,6 +469,7 @@ actions_types = list(/datum/action/item_action/toggle) flash_protect = 2 tint = 2 + can_toggle = TRUE visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', @@ -449,8 +479,8 @@ "Farwa" = 'icons/mob/clothing/species/monkey/eyes.dmi', "Wolpin" = 'icons/mob/clothing/species/monkey/eyes.dmi', "Neara" = 'icons/mob/clothing/species/monkey/eyes.dmi', - "Stok" = 'icons/mob/clothing/species/monkey/eyes.dmi' - ) + "Stok" = 'icons/mob/clothing/species/monkey/eyes.dmi', + ) /obj/item/clothing/glasses/welding/attack_self(mob/user) weldingvisortoggle(user) @@ -559,6 +589,7 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE resistance_flags = LAVA_PROOF | FIRE_PROOF HUDType = DATA_HUD_MEDICAL_ADVANCED + var/double_eye = FALSE sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', "Grey" = 'icons/mob/clothing/species/grey/eyes.dmi', @@ -570,20 +601,34 @@ "Stok" = 'icons/mob/clothing/species/monkey/eyes.dmi' ) + +/obj/item/clothing/glasses/hud/godeye/update_icon_state() + icon_state = "[double_eye ? "double" : ""]godeye" + item_state = "[double_eye ? "double" : ""]godeye" + + +/obj/item/clothing/glasses/hud/godeye/update_desc(updates = ALL) + . = ..() + if(!double_eye) + desc = initial(desc) + return + desc = "A pair of strange eyes, said to have been torn from an omniscient creature that used to roam the wastes. There's no real reason to have two, but that isn't stopping you." + + /obj/item/clothing/glasses/hud/godeye/attackby(obj/item/W, mob/user, params) - if(istype(W, src) && W != src && W.loc == user) - if(W.icon_state == "godeye") - W.icon_state = "doublegodeye" - W.item_state = "doublegodeye" - W.desc = "A pair of strange eyes, said to have been torn from an omniscient creature that used to roam the wastes. There's no real reason to have two, but that isn't stopping you." - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.update_inv_wear_mask() - else + if(istype(W, type) && W != src && W.loc == user && !double_eye) + if(double_eye) to_chat(user, span_notice("The eye winks at you and vanishes into the abyss, you feel really unlucky.")) - qdel(src) + qdel(src) + return + + double_eye = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) + user.wear_glasses_update(src) + return ..() + /obj/item/clothing/glasses/tajblind name = "embroidered veil" desc = "An Ahdominian made veil that allows the user to see while obscuring their eyes." @@ -591,6 +636,7 @@ item_state = "tajblind" flags_cover = GLASSESCOVERSEYES actions_types = list(/datum/action/item_action/toggle) + tint = 3 sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', @@ -610,26 +656,20 @@ item_state = "tajblind_engi" vision_flags = SEE_TURFS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + flash_protect = 2 + var/flash_protect_up = 0 + /obj/item/clothing/glasses/tajblind/eng/sunglasses - flash_protect = 1 - tint = 1 + flash_protect_up = 1 + tint_up = 1 + /obj/item/clothing/glasses/tajblind/eng/toggle_veil(mob/user) - if(user.canmove && !user.incapacitated()) - if(up) - up = !up - tint = initial(tint) - flash_protect = initial(flash_protect) - to_chat(user, "You activate [src], allowing you to see.") - else - up = !up - tint = 3 - flash_protect = 2 - to_chat(user, "You deactivate [src], obscuring your vision.") - var/mob/living/carbon/user1 = user - user1.update_tint() - user1.update_inv_glasses() + . = ..() + if(.) + flash_protect = up ? flash_protect_up : initial(flash_protect) + /obj/item/clothing/glasses/tajblind/sci name = "hi-tech veil" @@ -641,7 +681,7 @@ /obj/item/clothing/glasses/tajblind/sci/sunglasses flash_protect = 1 - tint = 1 + tint_up = 1 /obj/item/clothing/glasses/tajblind/cargo name = "khaki veil" @@ -654,24 +694,23 @@ /obj/item/clothing/glasses/tajblind/cargo/sunglasses flash_protect = 1 - tint = 1 + tint_up = 1 + /obj/item/clothing/glasses/tajblind/attack_self(mob/user) toggle_veil(user) -/obj/item/clothing/glasses/proc/toggle_veil(mob/user) - if(user.canmove && !user.incapacitated()) - if(up) - up = !up - tint = initial(tint) - to_chat(user, "You activate [src], allowing you to see.") - else - up = !up - tint = 3 - to_chat(user, "You deactivate [src], obscuring your vision.") - var/mob/living/carbon/user1 = user - user1.update_tint() - user1.update_inv_glasses() + +/obj/item/clothing/glasses/proc/toggle_veil(mob/living/carbon/human/user) + if(user.incapacitated()) + return FALSE + . = TRUE + up = !up + tint = up ? tint_up : initial(tint) + if(user.glasses == src) + to_chat(user, span_notice("[up ? "You deactivate [src], obscuring your vision." : "You activate [src], allowing you to see."]")) + user.wear_glasses_update(src) + /obj/item/clothing/glasses/sunglasses/blindfold/cucumbermask desc = "A simple pair of two cucumber slices. Medically proven to be able to heal your eyes over time." @@ -679,3 +718,4 @@ heal_bodypart = INTERNAL_ORGAN_EYES icon_state = "cucumbermask" item_state = "cucumbermask" + diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index fb5b7dbc8d7..803f76fa03a 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -7,7 +7,7 @@ /// The visual icons granted by wearing these glasses. var/HUDType = null /// List of things added to examine text, like security or medical records. - var/list/examine_extensions = null + var/examine_extensions = 0 /obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot, initial) @@ -31,6 +31,24 @@ emagged = TRUE desc = desc + " The display flickers slightly." +/obj/item/clothing/glasses/hud/visor_toggling(mob/living/carbon/human/user) + . = ..() + if(!.) + return + if(visor_vars_to_toggle & VISOR_EXAM_EXTENTIONS) + examine_extensions ^= initial(examine_extensions) + + if(visor_vars_to_toggle & VISOR_HUDTYPE) + HUDType ^= initial(HUDType) + + var/datum/atom_hud/H = GLOB.huds[initial(HUDType)] + if(istype(user) && src == user.glasses) + if(HUDType) + H.add_hud_to(user) + + else + H.remove_hud_from(user) + /* MEDICAL */ @@ -41,7 +59,7 @@ MEDICAL icon_state = "healthhud" origin_tech = "magnets=3;biotech=2" HUDType = DATA_HUD_MEDICAL_ADVANCED - examine_extensions = list(EXAMINE_HUD_MEDICAL) + examine_extensions = EXAMINE_HUD_MEDICAL sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', @@ -78,6 +96,7 @@ MEDICAL icon_state = "tajblind_med" item_state = "tajblind_med" flags_cover = GLASSESCOVERSEYES + tint = 3 actions_types = list(/datum/action/item_action/toggle) sprite_sheets = list( @@ -94,7 +113,7 @@ MEDICAL /obj/item/clothing/glasses/hud/health/tajblind/sunglasses see_in_dark = 1 flash_protect = 1 - tint = 1 + tint_up = 1 /obj/item/clothing/glasses/hud/health/tajblind/attack_self(mob/user) toggle_veil(user) @@ -152,12 +171,13 @@ DIAGNOSTIC icon_state = "tajblind_diagnostic" item_state = "tajblind_diagnostic" flags_cover = GLASSESCOVERSEYES + tint = 3 actions_types = list(/datum/action/item_action/toggle) /obj/item/clothing/glasses/hud/diagnostic/tajblind/sunglasses see_in_dark = 1 flash_protect = 1 - tint = 1 + tint_up = 1 /obj/item/clothing/glasses/hud/diagnostic/tajblind/attack_self(mob/user) toggle_veil(user) @@ -173,7 +193,7 @@ SECURITY origin_tech = "magnets=3;combat=2" var/global/list/jobs[0] HUDType = DATA_HUD_SECURITY_ADVANCED - examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE) + examine_extensions = EXAMINE_HUD_SECURITY_READ | EXAMINE_HUD_SECURITY_WRITE sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', @@ -187,7 +207,7 @@ SECURITY ) /obj/item/clothing/glasses/hud/security/read_only - examine_extensions = list(EXAMINE_HUD_SECURITY_READ) + examine_extensions = EXAMINE_HUD_SECURITY_READ /obj/item/clothing/glasses/hud/security/night name = "\improper Night Vision Security HUD" @@ -218,8 +238,33 @@ SECURITY "Stok" = 'icons/mob/clothing/species/monkey/eyes.dmi' ) +/obj/item/clothing/glasses/hud/security/sunglasses/tacticool + name = "security tactical glasses" + desc = "Ballistic glasses with a security HUD. Gives you tacticool protection and selfish increase. The elastic band allows it to be worn over a helmet." + icon_state = "secgoggles-g" + item_state = "secgoggles-g" + over_mask = TRUE + over_hat = TRUE + can_toggle = TRUE + visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_DARKNESSVIEW | VISOR_FULL_HUD + actions_types = list(/datum/action/item_action/toggle) + + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', + "Drask" = 'icons/mob/clothing/species/drask/eyes.dmi', + "Grey" = 'icons/mob/clothing/species/grey/eyes.dmi', + "Monkey" = 'icons/mob/clothing/species/monkey/eyes.dmi', + "Farwa" = 'icons/mob/clothing/species/monkey/eyes.dmi', + "Wolpin" = 'icons/mob/clothing/species/monkey/eyes.dmi', + "Neara" = 'icons/mob/clothing/species/monkey/eyes.dmi', + "Stok" = 'icons/mob/clothing/species/monkey/eyes.dmi' + ) + +/obj/item/clothing/glasses/hud/security/sunglasses/tacticool/attack_self(mob/user) + weldingvisortoggle(user) + /obj/item/clothing/glasses/hud/security/sunglasses/read_only - examine_extensions = list(EXAMINE_HUD_SECURITY_READ) + examine_extensions = EXAMINE_HUD_SECURITY_READ /obj/item/clothing/glasses/hud/security/sunglasses/prescription prescription = TRUE @@ -243,6 +288,8 @@ SECURITY icon_state = "tajblind_sec" item_state = "tajblind_sec" flags_cover = GLASSESCOVERSEYES + tint_up = 1 + tint = 3 actions_types = list(/datum/action/item_action/toggle) sprite_sheets = list( @@ -258,7 +305,7 @@ SECURITY toggle_veil(user) /obj/item/clothing/glasses/hud/security/sunglasses/tajblind/read_only - examine_extensions = list(EXAMINE_HUD_SECURITY_READ) + examine_extensions = EXAMINE_HUD_SECURITY_READ /* HYDROPONIC @@ -269,7 +316,7 @@ HYDROPONIC 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 - examine_extensions = list(DATA_HUD_HYDROPONIC) + examine_extensions = EXAMINE_HUD_BOTANY sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', "Drask" = 'icons/mob/clothing/species/drask/eyes.dmi', @@ -304,12 +351,13 @@ HYDROPONIC desc = "An Ahdominian made veil that allows the user to see while obscuring their eyes. There is botanical hud in it." icon_state = "tajblind_bot" item_state = "tajblind_bot" + tint = 3 actions_types = list(/datum/action/item_action/toggle) /obj/item/clothing/glasses/hud/hydroponic/tajblind/sunglasses see_in_dark = 1 flash_protect = 1 - tint = 1 + tint_up = 1 /obj/item/clothing/glasses/hud/hydroponic/tajblind/attack_self(mob/user) toggle_veil(user) @@ -324,7 +372,7 @@ SKILLS icon_state = "skill" item_state = "glasses" HUDType = DATA_HUD_SECURITY_BASIC - examine_extensions = list(EXAMINE_HUD_SKILLS) + examine_extensions = EXAMINE_HUD_SKILLS sprite_sheets = list( "Drask" = 'icons/mob/clothing/species/drask/eyes.dmi', "Grey" = 'icons/mob/clothing/species/grey/eyes.dmi', @@ -361,12 +409,13 @@ SKILLS icon_state = "tajblind_skill" item_state = "tajblind_skill" flags_cover = GLASSESCOVERSEYES + tint = 3 actions_types = list(/datum/action/item_action/toggle) /obj/item/clothing/glasses/hud/skills/tajblind/sunglasses see_in_dark = 1 flash_protect = 1 - tint = 1 + tint_up = 1 /obj/item/clothing/glasses/hud/skills/tajblind/attack_self(mob/user) toggle_veil(user) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index a8525be2633..25f78c6eddb 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -102,8 +102,8 @@ /obj/item/clothing/gloves/color/black/thief pickpocket = 1 -/obj/item/clothing/gloves/color/black/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/wirecutters)) +/obj/item/clothing/gloves/color/black/attackby(obj/item/W, mob/user, params) + if(W.tool_behaviour == TOOL_WIRECUTTER) if(can_be_cut && icon_state == initial(icon_state))//only if not dyed var/confirm = alert("Do you want to cut off the gloves fingertips? Warning: It might destroy their functionality.","Cut tips?","Yes","No") if(get_dist(user, src) > 1) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 98b76d8646a..85220c7a610 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -99,9 +99,9 @@ /obj/item/clothing/gloves/color/yellow/stun/get_cell() return cell -/obj/item/clothing/gloves/color/yellow/stun/New() - ..() - update_icon() +/obj/item/clothing/gloves/color/yellow/stun/Initialize(mapload) + . = ..() + update_icon(UPDATE_OVERLAYS) /obj/item/clothing/gloves/color/yellow/stun/Destroy() QDEL_NULL(cell) @@ -132,12 +132,13 @@ return TRUE return FALSE -/obj/item/clothing/gloves/color/yellow/stun/update_icon() - ..() - overlays.Cut() - overlays += "gloves_wire" + +/obj/item/clothing/gloves/color/yellow/stun/update_overlays() + . = ..() + . += "gloves_wire" if(cell) - overlays += "gloves_cell" + . += "gloves_cell" + /obj/item/clothing/gloves/color/yellow/stun/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/stock_parts/cell)) @@ -147,7 +148,7 @@ return cell = W to_chat(user, "You attach [W] to [src].") - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(user, "[src] already has a cell.") else @@ -161,7 +162,7 @@ to_chat(user, "You cut [cell] away from [src].") cell.forceMove(get_turf(loc)) cell = null - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/clothing/gloves/color/yellow/stun/emp_act() if(!ishuman(loc)) diff --git a/code/modules/clothing/gloves/rings.dm b/code/modules/clothing/gloves/rings.dm index 3b9e4eadab8..f5bcbbd698e 100644 --- a/code/modules/clothing/gloves/rings.dm +++ b/code/modules/clothing/gloves/rings.dm @@ -14,11 +14,11 @@ var/stud = 0 var/ring_color = "iron" -/obj/item/clothing/gloves/ring/New() - ..() - update_icon() +/obj/item/clothing/gloves/ring/Initialize(mapload) + . = ..() + update_icon(UPDATE_ICON_STATE) -/obj/item/clothing/gloves/ring/update_icon() +/obj/item/clothing/gloves/ring/update_icon_state() icon_state = "[stud ? "d_" : ""][ring_color]ring" /obj/item/clothing/gloves/ring/examine(mob/user) @@ -28,7 +28,7 @@ if(stud) . += "It is adorned with a single gem." -/obj/item/clothing/gloves/ring/attackby(obj/item/I as obj, mob/user as mob, params) +/obj/item/clothing/gloves/ring/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/stack/sheet/mineral/diamond)) var/obj/item/stack/sheet/mineral/diamond/D = I if(stud) @@ -76,10 +76,10 @@ icon_state = "redring" ring_color = "red" -/obj/item/clothing/gloves/ring/plastic/random/New() +/obj/item/clothing/gloves/ring/plastic/random/Initialize(mapload) ring_color = pick("white","blue","red") name = "[ring_color] plastic ring" - ..() + . = ..() // weird /obj/item/clothing/gloves/ring/glass diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 45d0984d685..99db59689fe 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -24,24 +24,21 @@ /obj/item/clothing/head/hardhat/attack_self() toggle_helmet_light() + /obj/item/clothing/head/hardhat/proc/toggle_helmet_light() on = !on if(on) turn_on() else turn_off() - update_icon() + update_icon(UPDATE_ICON_STATE) + -/obj/item/clothing/head/hardhat/update_icon() +/obj/item/clothing/head/hardhat/update_icon_state() icon_state = "hardhat[on]_[item_color]" item_state = "hardhat[on]_[item_color]" - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - H.update_inv_head() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - ..() + update_equipped_item() + /obj/item/clothing/head/hardhat/proc/turn_on() set_light(brightness_on) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 298a86c5c38..5323bc59fbf 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -28,25 +28,12 @@ "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/helmet.dmi' ) -/obj/item/clothing/head/helmet/attack_self(mob/user) - if(can_toggle && !user.incapacitated()) - if(world.time > cooldown + toggle_cooldown) - cooldown = world.time - up = !up - flags ^= visor_flags - flags_inv ^= visor_flags_inv - icon_state = "[initial(icon_state)][up ? "up" : ""]" - to_chat(user, "[up ? alt_toggle_message : toggle_message] \the [src]") - - user.update_inv_head() - - if(active_sound) - while(up) - playsound(src.loc, "[active_sound]", 100, 0, 4) - sleep(15) - if(toggle_sound) - playsound(src.loc, "[toggle_sound]", 100, 0, 4) +/obj/item/clothing/head/helmet/adjust_headgear(mob/user) + . = ..() + if(.) + flags ^= visor_flags + flags_inv ^= visor_flags_inv /obj/item/clothing/head/helmet/visor name = "visor helmet" @@ -122,10 +109,10 @@ name = "helmet of justice" desc = "WEEEEOOO. WEEEEEOOO. WEEEEOOOO." icon_state = "justice" - toggle_message = "You turn off the lights on" - alt_toggle_message = "You turn on the lights on" + toggle_on_message = "You turn off the lights on" + toggle_off_message = "You turn on the lights on" actions_types = list(/datum/action/item_action/toggle_helmet_light) - can_toggle = 1 + can_toggle = TRUE toggle_cooldown = 20 active_sound = 'sound/items/weeoo1.ogg' dog_fashion = null @@ -134,8 +121,8 @@ name = "alarm helmet" desc = "WEEEEOOO. WEEEEEOOO. STOP THAT MONKEY. WEEEOOOO." icon_state = "justice2" - toggle_message = "You turn off the light on" - alt_toggle_message = "You turn on the light on" + toggle_on_message = "You turn off the light on" + toggle_off_message = "You turn on the light on" /obj/item/clothing/head/helmet/swat @@ -214,10 +201,10 @@ flags = BLOCKHAIR item_state = "gladiator" flags_inv = HIDEMASK|HIDEHEADSETS|HIDEGLASSES - toggle_message = "You attach the face shield to the" - alt_toggle_message = "You remove the face shield from the" + toggle_on_message = "You attach the face shield to the" + toggle_off_message = "You remove the face shield from the" actions_types = list(/datum/action/item_action/toggle_helmet_mode) - can_toggle = 1 + can_toggle = TRUE toggle_cooldown = 20 toggle_sound = 'sound/items/zippoclose.ogg' dog_fashion = null @@ -421,3 +408,24 @@ see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE species_restricted = list("Human", "Slime People", "Skeleton", "Nucleation", "Machine") + +/obj/item/clothing/head/helmet/lightweighthelmet + name = "lightweight helmet" + desc = "Standard Security gear. Protects the head from impacts." + icon_state = "lightweighthelmet" + item_state = "lightweighthelmet" + flags_inv = HIDEHEADSETS + strip_delay = 60 + flags = BLOCKHEADHAIR + flags_cover = null + dog_fashion = null + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/helmet.dmi', + "Drask" = 'icons/mob/clothing/species/drask/helmet.dmi', + "Grey" = 'icons/mob/clothing/species/grey/helmet.dmi', + "Monkey" = 'icons/mob/clothing/species/monkey/head.dmi', + "Farwa" = 'icons/mob/clothing/species/monkey/head.dmi', + "Wolpin" = 'icons/mob/clothing/species/monkey/head.dmi', + "Neara" = 'icons/mob/clothing/species/monkey/head.dmi', + "Stok" = 'icons/mob/clothing/species/monkey/head.dmi' + ) diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index f875c19e718..e87a1509def 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -21,6 +21,7 @@ materials = list(MAT_METAL=1750, MAT_GLASS=400) flash_protect = 2 tint = 2 + can_toggle = TRUE armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 60) flags_inv = HIDEMASK|HIDEHEADSETS|HIDEGLASSES|HIDENAME actions_types = list(/datum/action/item_action/toggle) @@ -44,9 +45,6 @@ "Stok" = 'icons/mob/clothing/species/monkey/head.dmi' ) -/obj/item/clothing/head/welding/attack_self(mob/user) - weldingvisortoggle(user) - /obj/item/clothing/head/welding/flamedecal name = "flame decal welding helmet" desc = "A welding helmet adorned with flame decals, and several cryptic slogans of varying degrees of legibility." @@ -62,8 +60,8 @@ desc = "A white welding helmet with a character written across it." icon_state = "welding_white" -/obj/item/clothing/head/welding/attack_self() - toggle() +/obj/item/clothing/head/welding/attack_self(mob/user) + weldingvisortoggle(user) /obj/item/clothing/head/welding/attackby(obj/item/I, mob/living/user) if(istype(I, /obj/item/toy/crayon/spraycan)) @@ -98,40 +96,6 @@ return ..() -/obj/item/clothing/head/welding/proc/toggle() - if(up) - up = !up - flags_cover |= (HEADCOVERSEYES | HEADCOVERSMOUTH) - flags_inv |= (HIDEMASK|HIDEHEADSETS|HIDEGLASSES|HIDENAME) - if(paint) - icon_state = paint - else - icon_state = initial(icon_state) - to_chat(usr, "You flip the [src] down to protect your eyes.") - flash_protect = 2 - tint = 2 - else - up = !up - flags_cover &= ~(HEADCOVERSEYES | HEADCOVERSMOUTH) - flags_inv &= ~(HIDEMASK|HIDEHEADSETS|HIDEGLASSES|HIDENAME) - if(paint) - icon_state = "[paint]up" - else - icon_state = "[initial(icon_state)]up" - to_chat(usr, "You push the [src] up out of your face.") - flash_protect = 0 - tint = 0 - var/mob/living/carbon/user = usr - user.update_tint() - user.update_inv_head() //so our mob-overlays update - user.update_inv_wear_mask() - - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - - - /* * Cakehat */ @@ -139,40 +103,55 @@ name = "cake-hat" desc = "It's tasty looking!" icon_state = "cake0" + base_icon_state = "cake" flags_cover = HEADCOVERSEYES armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - var/onfire = 0.0 - var/status = 0 - var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage - var/processing = 0 //I dont think this is used anywhere. + var/on_fire = FALSE + /obj/item/clothing/head/cakehat/process() - if(!onfire) - STOP_PROCESSING(SSobj, src) - return + if(!on_fire) + return PROCESS_KILL + + var/turf/cake_turf = loc + if(is_equipped(include_pockets = TRUE, include_hands = TRUE)) + cake_turf = loc.loc + + if(isturf(cake_turf)) + cake_turf.hotspot_expose(700, 1) + + +/obj/item/clothing/head/cakehat/attack_self(mob/user) + toggle_cake_light(user) - var/turf/location = src.loc - if(istype(location, /mob/)) - var/mob/living/carbon/human/M = location - if(M.l_hand == src || M.r_hand == src || M.head == src) - location = M.loc - - if(istype(location, /turf)) - location.hotspot_expose(700, 1) - -/obj/item/clothing/head/cakehat/attack_self(mob/user as mob) - if(status > 1) return - src.onfire = !( src.onfire ) - if(src.onfire) - src.force = 3 - src.damtype = "fire" - src.icon_state = "cake1" + +/obj/item/clothing/head/cakehat/proc/toggle_cake_light(mob/user) + on_fire = !on_fire + update_icon(UPDATE_ICON_STATE) + user?.visible_message( + span_notice("[user] [on_fire ? "lights up" : "extinguishes"] [src]."), + span_notice("You [on_fire ? "lighted up" : "extinguished"] [src]."), + ) + if(on_fire) + set_light(1.5, 1, LIGHT_COLOR_YELLOW) + force = 3 + damtype = BURN START_PROCESSING(SSobj, src) else - src.force = null - src.damtype = "brute" - src.icon_state = "cake0" - return + set_light(0) + force = 0 + damtype = BRUTE + STOP_PROCESSING(SSobj, src) + + +/obj/item/clothing/head/cakehat/update_icon_state() + icon_state = "[base_icon_state][on_fire]" + + +/obj/item/clothing/head/cakehat/extinguish_light(force = FALSE) + if(!force || !on_fire) + return + toggle_cake_light() /* @@ -181,12 +160,16 @@ /obj/item/clothing/head/ushanka name = "ushanka" desc = "Perfect for winter in Siberia, da?" - icon_state = "ushankadown" - item_state = "ushankadown" + icon_state = "ushanka" + item_state = "ushanka" flags_inv = HIDEHEADSETS cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT dog_fashion = /datum/dog_fashion/head/ushanka + actions_types = list(/datum/action/item_action/toggle_helmet_mode) + can_toggle = TRUE + toggle_on_message = "You raise the ear flaps on" + toggle_off_message = "You lower the ear flaps on" sprite_sheets = list( "Grey" = 'icons/mob/clothing/species/grey/head.dmi', "Monkey" = 'icons/mob/clothing/species/monkey/head.dmi', @@ -196,16 +179,6 @@ "Stok" = 'icons/mob/clothing/species/monkey/head.dmi' ) -/obj/item/clothing/head/ushanka/attack_self(mob/user as mob) - if(src.icon_state == "ushankadown") - src.icon_state = "ushankaup" - src.item_state = "ushankaup" - to_chat(user, "You raise the ear flaps on the ushanka.") - else - src.icon_state = "ushankadown" - src.item_state = "ushankadown" - to_chat(user, "You lower the ear flaps on the ushanka.") - /obj/item/clothing/head/sovietsidecap name = "\improper Soviet side cap" desc = "A simple military cap with a Soviet star on the front. What it lacks in protection it makes up for in revolutionary spirit." @@ -280,43 +253,42 @@ name = "kitty ears" desc = "A pair of kitty ears. Meow!" icon_state = "kitty" - var/icon/mob dog_fashion = /datum/dog_fashion/head/kitty + var/mob/living/carbon/human/previous_owner + var/outer_state = "kitty" + var/inner_state = "kittyinner" -/obj/item/clothing/head/kitty/update_icon(var/mob/living/carbon/human/user) - if(!istype(user)) return - var/obj/item/organ/external/head/head_organ = user.get_organ(BODY_ZONE_HEAD) - mob = new/icon("icon" = 'icons/mob/clothing/head.dmi', "icon_state" = "kitty") - mob.Blend(head_organ.hair_colour, ICON_ADD) +/obj/item/clothing/head/kitty/mouse + name = "mouse ears" + desc = "A pair of mouse ears. Squeak!" + icon_state = "mousey" + outer_state = "mousey" + inner_state = "mouseyinner" - var/icon/earbit = new/icon("icon" = 'icons/mob/clothing/head.dmi', "icon_state" = "kittyinner") - mob.Blend(earbit, ICON_OVERLAY) - icon_override = mob +/obj/item/clothing/head/kitty/Destroy() + previous_owner = null + return ..() -/obj/item/clothing/head/kitty/equipped(mob/M, slot, initial) - . = ..() - - if(ishuman(M) && slot == slot_head) - update_icon(M) +/obj/item/clothing/head/kitty/equipped(mob/user, slot, initial) + . = ..() + if(. && slot == slot_head) + update_look(user) -/obj/item/clothing/head/kitty/mouse - name = "mouse ears" - desc = "A pair of mouse ears. Squeak!" - icon_state = "mousey" -/obj/item/clothing/head/kitty/mouse/update_icon(var/mob/living/carbon/human/user) - if(!istype(user)) return +/obj/item/clothing/head/kitty/proc/update_look(mob/living/carbon/human/user) + if(!ishuman(user) || user == previous_owner) + return + previous_owner = user var/obj/item/organ/external/head/head_organ = user.get_organ(BODY_ZONE_HEAD) - mob = new/icon("icon" = 'icons/mob/clothing/head.dmi', "icon_state" = "mousey") - mob.Blend(head_organ.hair_colour, ICON_ADD) - - var/icon/earbit = new/icon("icon" = 'icons/mob/clothing/head.dmi', "icon_state" = "mouseyinner") - mob.Blend(earbit, ICON_OVERLAY) + var/icon/new_look = icon('icons/mob/clothing/head.dmi', outer_state) + new_look.Blend(head_organ.hair_colour, ICON_ADD) + new_look.Blend(icon('icons/mob/clothing/head.dmi', inner_state), ICON_OVERLAY) + icon_override = new_look + user.update_inv_head() - icon_override = mob /obj/item/clothing/head/cardborg name = "cardborg helmet" @@ -338,19 +310,18 @@ ) -/obj/item/clothing/head/cardborg/equipped(mob/living/user, slot, initial) +/obj/item/clothing/head/cardborg/equipped(mob/living/carbon/human/user, slot, initial) . = ..() + if(ishuman(user) && slot == slot_head && istype(user.wear_suit, /obj/item/clothing/suit/cardborg)) + var/obj/item/clothing/suit/cardborg/user_suit = user.wear_suit + user_suit.disguise(user, src) - if(ishuman(user) && slot == slot_head) - var/mob/living/carbon/human/H = user - if(istype(H.wear_suit, /obj/item/clothing/suit/cardborg)) - var/obj/item/clothing/suit/cardborg/CB = H.wear_suit - CB.disguise(user, src) /obj/item/clothing/head/cardborg/dropped(mob/living/user, silent = FALSE) - ..() + . = ..() user.remove_alt_appearance("standard_borg_disguise") + /* * Head Mirror */ diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 34e2b64ec12..2cf395d7c33 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -4,7 +4,7 @@ icon_state = "cargosoft" item_state = "helmet" item_color = "cargo" - var/flipped = 0 + var/flipped = FALSE actions_types = list(/datum/action/item_action/flip_cap) dog_fashion = /datum/dog_fashion/head/cargo_tech sprite_sheets = list( @@ -17,27 +17,30 @@ ) dyeable = TRUE + +/obj/item/clothing/head/soft/update_icon_state() + icon_state = flipped ? "[item_color]soft_flipped" : "[item_color]soft" + update_equipped_item() + + /obj/item/clothing/head/soft/dropped(mob/user, silent = FALSE) - icon_state = "[item_color]soft" - flipped = 0 - ..() + . = ..() + if(flipped) + flipped = FALSE + update_icon(UPDATE_ICON_STATE) + /obj/item/clothing/head/soft/attack_self(mob/user) flip(user) + /obj/item/clothing/head/soft/proc/flip(mob/user) flipped = !flipped + update_icon(UPDATE_ICON_STATE) if(flipped) - icon_state = "[item_color]soft_flipped" - to_chat(usr, "You flip the hat backwards.") + to_chat(user, span_notice("You flip the hat backwards.")) else - icon_state = "[item_color]soft" - to_chat(user, "You flip the hat back in normal position.") - user.update_inv_head() //so our mob-overlays update - - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + to_chat(user, span_notice("You flip the hat back in normal position.")) /obj/item/clothing/head/soft/red name = "red cap" diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index cac4042c6e9..6295c77592a 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -6,6 +6,7 @@ flags = BLOCKHAIR flags_inv = HIDENAME w_class = WEIGHT_CLASS_SMALL + can_toggle = TRUE actions_types = list(/datum/action/item_action/adjust) adjusted_flags = SLOT_HEAD @@ -26,12 +27,24 @@ "Stok" = 'icons/mob/clothing/species/monkey/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/balaclava/adjustmask(user) - ..() - flags = mask_adjusted ? null : initial(flags) +/obj/item/clothing/mask/balaclava/adjustmask(mob/user) + . = ..() + if(!.) + return + var/mob/living/carbon/human/H = usr + if(H.l_hand && H.r_hand) + user.drop_item_ground(src) + else + user.drop_item_ground(src) + user.put_in_hands(src) + + if(!up) + flags |= BLOCKHAIR + else + flags &= ~BLOCKHAIR /obj/item/clothing/mask/luchador name = "Luchador Mask" diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 7603c354d17..9712a8cdc10 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -10,6 +10,7 @@ permeability_coefficient = 0.50 actions_types = list(/datum/action/item_action/adjust) resistance_flags = NONE + can_toggle = TRUE sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/mask.dmi', "Vox Armalis" = 'icons/mob/clothing/species/armalis/mask.dmi', @@ -29,7 +30,7 @@ "Stok" = 'icons/mob/clothing/species/monkey/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/living/user) @@ -57,7 +58,7 @@ species_restricted = list("Vox", "Vox Armalis") //These should fit the "Mega Vox" just fine. actions_types = null -/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 ecd69b85e3f..f36c1724294 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -38,6 +38,7 @@ materials = list(MAT_METAL=4000, MAT_GLASS=2000) flash_protect = 2 tint = 2 + can_toggle = TRUE armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 55) origin_tech = "materials=2;engineering=3" actions_types = list(/datum/action/item_action/toggle) @@ -46,9 +47,15 @@ visor_flags_inv = HIDEGLASSES resistance_flags = FIRE_PROOF + /obj/item/clothing/mask/gas/welding/attack_self(mob/user) weldingvisortoggle(user) + +/obj/item/clothing/mask/gas/welding/adjustmask(mob/user) + return + + /obj/item/clothing/mask/gas/explorer name = "explorer gas mask" desc = "A military-grade gas mask that can be connected to an air supply." @@ -56,6 +63,7 @@ actions_types = list(/datum/action/item_action/adjust) armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 20, "acid" = 40) resistance_flags = FIRE_PROOF + can_toggle = TRUE sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/mask.dmi', @@ -74,16 +82,32 @@ "Stok" = 'icons/mob/clothing/species/monkey/mask.dmi' ) + /obj/item/clothing/mask/gas/explorer/attack_self(mob/user) adjustmask(user) -/obj/item/clothing/mask/gas/explorer/adjustmask(user) - ..() - w_class = mask_adjusted ? WEIGHT_CLASS_SMALL : WEIGHT_CLASS_NORMAL -/obj/item/clothing/mask/gas/explorer/folded/Initialize() +/obj/item/clothing/mask/gas/explorer/adjustmask(mob/user) . = ..() - adjustmask() + if(.) + w_class = up ? WEIGHT_CLASS_SMALL : WEIGHT_CLASS_NORMAL + + +/obj/item/clothing/mask/gas/explorer/folded/Initialize(mapload) + . = ..() + force_adjust_mask() + + +/obj/item/clothing/mask/gas/explorer/folded/proc/force_adjust_mask() + up = !up + update_icon(UPDATE_ICON_STATE) + gas_transfer_coefficient = null + permeability_coefficient = null + flags_cover &= ~MASKCOVERSMOUTH + flags_inv &= ~HIDENAME + flags &= ~AIRTIGHT + w_class = WEIGHT_CLASS_SMALL + //Bane gas mask /obj/item/clothing/mask/banemask @@ -288,9 +312,12 @@ desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device, plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you taze them. Do not tamper with the device." icon_state = "sechailer" item_state = "sechailer" + flags_inv = HIDENAME + flags_cover = MASKCOVERSMOUTH var/phrase = 1 var/aggressiveness = 1 var/safety = 1 + can_toggle = TRUE actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/adjust, /datum/action/item_action/selectphrase) var/phrase_list = list( @@ -329,6 +356,7 @@ icon_state = "hosmask" aggressiveness = 3 phrase = 12 + can_toggle = FALSE actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/warden @@ -337,6 +365,7 @@ icon_state = "wardenmask" aggressiveness = 3 phrase = 12 + can_toggle = FALSE actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/selectphrase) @@ -346,6 +375,7 @@ icon_state = "officermask" aggressiveness = 3 phrase = 12 + can_toggle = FALSE actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/blue @@ -355,6 +385,7 @@ item_state = "blue_sechailer" aggressiveness = 3 phrase = 12 + can_toggle = FALSE actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/cyborg @@ -362,6 +393,7 @@ desc = "A set of recognizable pre-recorded messages for cyborgs to use when apprehending criminals." icon = 'icons/obj/device.dmi' icon_state = "taperecorder_idle" + can_toggle = FALSE actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, actiontype) @@ -401,8 +433,14 @@ else to_chat(user, "It's broken.") + var/datum/action/item_action/halt/halt_action = locate() in actions + if(halt_action) + halt_action.name = "[uppertext(key)]!" + halt_action.UpdateButtonIcon() + + /obj/item/clothing/mask/gas/sechailer/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/screwdriver)) + if(W.tool_behaviour == TOOL_SCREWDRIVER) switch(aggressiveness) if(1) to_chat(user, "You set the aggressiveness restrictor to the second position.") @@ -422,7 +460,7 @@ phrase = 1 if(5) to_chat(user, "You adjust the restrictor but nothing happens, probably because its broken.") - else if(istype(W, /obj/item/wirecutters)) + else if(W.tool_behaviour == TOOL_WIRECUTTER) if(aggressiveness != 5) to_chat(user, "You broke it!") aggressiveness = 5 diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 3ad5c475930..eb9b12ed201 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -23,7 +23,7 @@ ) // Clumsy folks can't take the mask off themselves. -/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob) +/obj/item/clothing/mask/muzzle/attack_hand(mob/user) if(user.wear_mask == src && !user.IsAdvancedToolUser()) return 0 else if(security_lock && locked) @@ -207,7 +207,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/living/L = can_shock(loc) if(!L) @@ -224,11 +224,11 @@ trigger.HasProximity(AM) -/obj/item/clothing/mask/muzzle/safety/shock/hear_talk(mob/living/M as mob, list/message_pieces) +/obj/item/clothing/mask/muzzle/safety/shock/hear_talk(mob/living/M, list/message_pieces) if(trigger) trigger.hear_talk(M, message_pieces) -/obj/item/clothing/mask/muzzle/safety/shock/hear_message(mob/living/M as mob, msg) +/obj/item/clothing/mask/muzzle/safety/shock/hear_message(mob/living/M, msg) if(trigger) trigger.hear_message(M, msg) @@ -243,6 +243,7 @@ flags_cover = MASKCOVERSMOUTH gas_transfer_coefficient = 0.90 permeability_coefficient = 0.01 + can_toggle = TRUE armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 25, "rad" = 0, "fire" = 0, "acid" = 0) actions_types = list(/datum/action/item_action/adjust) @@ -264,7 +265,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 @@ -332,19 +333,6 @@ w_class = WEIGHT_CLASS_SMALL gas_transfer_coefficient = 0.90 -/* -------------------------------- - * Хрен знает зачем у нас тут шарф у которого даже спрайта нет. И который ещё и маска... - * Я пожалуй оставлю, но закоменчу этот код. -/obj/item/clothing/mask/ninjascarf - name = "ninja scarf" - desc = "A stealthy, dark scarf." - icon_state = "ninja_scarf" - item_state = "ninja_scarf" - flags_cover = MASKCOVERSMOUTH - w_class = WEIGHT_CLASS_SMALL - gas_transfer_coefficient = 0.90 -*/ - /obj/item/clothing/mask/pig name = "pig mask" desc = "A rubber pig mask." @@ -534,7 +522,7 @@ adjusted_flags = SLOT_HEAD icon_state = "bandbotany" dyeable = TRUE - + can_toggle = TRUE sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/mask.dmi', "Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi', @@ -553,9 +541,18 @@ ) 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/adjustmask(mob/user) + ..() + var/mob/living/carbon/human/H = usr + if(H.l_hand && H.r_hand) + user.drop_item_ground(src) + else + user.drop_item_ground(src) + user.put_in_hands(src) + /obj/item/clothing/mask/bandana/red name = "red bandana" icon_state = "bandred" @@ -663,3 +660,39 @@ /obj/item/clothing/mask/gas/voice_modulator/change_speech_verb() if(voice_modulator.active) return pick("modulates", "drones", "hums", "buzzes") + +//sec scarf + +/obj/item/clothing/mask/secscarf + name = "security scarf" + desc = "Bleck security snood. Excellent replacement for a balaclava." + icon_state = "secscarf" + item_state = "secscarf" + icon = 'icons/obj/clothing/masks.dmi' + flags_inv = HIDENAME + flags = BLOCKFACIALHAIR + flags_cover = MASKCOVERSMOUTH + can_toggle = TRUE + strip_delay = 20 + put_on_delay = 20 + armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + gas_transfer_coefficient = 0.90 + permeability_coefficient = 0.90 + actions_types = list(/datum/action/item_action/adjust) + + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/mask.dmi', + "Drask" = 'icons/mob/clothing/species/drask/mask.dmi', + "Grey" = 'icons/mob/clothing/species/grey/mask.dmi', + "Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi', + "Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi', + "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi', + "Monkey" = 'icons/mob/clothing/species/monkey/mask.dmi', + "Farwa" = 'icons/mob/clothing/species/monkey/mask.dmi', + "Wolpin" = 'icons/mob/clothing/species/monkey/mask.dmi', + "Neara" = 'icons/mob/clothing/species/monkey/mask.dmi', + "Stok" = 'icons/mob/clothing/species/monkey/mask.dmi' + ) + +/obj/item/clothing/mask/secscarf/attack_self(mob/user) + adjustmask(user) diff --git a/code/modules/clothing/neck/cloaks.dm b/code/modules/clothing/neck/cloaks.dm index efd54786445..a64160f61d7 100644 --- a/code/modules/clothing/neck/cloaks.dm +++ b/code/modules/clothing/neck/cloaks.dm @@ -10,8 +10,8 @@ /obj/item/clothing/neck/cloak/Initialize(mapload) . = ..() + AddComponent(/datum/component/spraycan_paintable) add_atom_colour(colour, FIXED_COLOUR_PRIORITY) - update_icon() /obj/item/clothing/neck/cloak/grey colour = "#535353" @@ -121,20 +121,3 @@ icon_state = "syndadmiral" item_state = "syndadmiral" -/obj/item/clothing/neck/toggle/attack_self(mob/user) - if(icon_state == initial(icon_state)) - icon_state = icon_state + "_t" - item_state = icon_state + "_t" - else - icon_state = initial(icon_state) - item_state = initial(item_state) - user.update_inv_neck() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/neck/cloak/New() - ..() - AddComponent(/datum/component/spraycan_paintable) - START_PROCESSING(SSobj, src) - update_icon() diff --git a/code/modules/clothing/neck/mantles.dm b/code/modules/clothing/neck/mantles.dm index a5c9a82195a..32285d87202 100644 --- a/code/modules/clothing/neck/mantles.dm +++ b/code/modules/clothing/neck/mantles.dm @@ -82,8 +82,7 @@ desc = "A tweed mantle, worn by the Research Director. Smells like science." icon_state = "rdmantle" -/obj/item/clothing/neck/mantle/New() - ..() +/obj/item/clothing/neck/mantle/Initialize(mapload) + . = ..() AddComponent(/datum/component/spraycan_paintable) - START_PROCESSING(SSobj, src) - update_icon() + diff --git a/code/modules/clothing/neck/ponchos.dm b/code/modules/clothing/neck/ponchos.dm index 59002150fae..be819ebe42a 100644 --- a/code/modules/clothing/neck/ponchos.dm +++ b/code/modules/clothing/neck/ponchos.dm @@ -25,12 +25,8 @@ "Wryn" = 'icons/mob/clothing/species/wryn/neck.dmi' ) -/obj/item/clothing/neck/poncho/update_icon() - . = ..() - if(flipped) - icon_state = "[item_color]poncho_flip" - else - icon_state = "[item_color]poncho" +/obj/item/clothing/neck/poncho/update_icon_state() + icon_state = "[item_color]poncho[flipped ? "_flip" : ""]" /obj/item/clothing/neck/poncho/AltClick(mob/living/carbon/human/user) if(!iscarbon(user)) @@ -57,7 +53,7 @@ ..() if(flipped) flipped = FALSE - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/clothing/neck/poncho/equipped(mob/user, slot, initial) . = ..() @@ -65,18 +61,17 @@ var/mob/living/carbon/human/human = user if((slot != human.neck) && flipped) flipped = FALSE - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/clothing/neck/poncho/proc/flip(mob/user) if(user.incapacitated()) to_chat(user, span_warning("You can't do that right now!")) return flipped = !flipped + update_icon(UPDATE_ICON_STATE) if(flipped) - update_icon() to_chat(user, "You flip [src] behind your back.") else - update_icon() to_chat(user, "You flip [src] to its normal position.") user.update_inv_neck() diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 13a72265047..40d8a31f0dc 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -99,18 +99,24 @@ QDEL_NULL(shackles) return ..() + /obj/item/clothing/shoes/orange/attack_self(mob/user) if(shackles) user.put_in_hands(shackles) shackles = null slowdown = SHOES_SLOWDOWN - icon_state = "orange" + update_icon(UPDATE_ICON_STATE) + + +/obj/item/clothing/shoes/orange/update_icon_state() + icon_state = "orange[shackles ? "1" : ""]" + /obj/item/clothing/shoes/orange/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/restraints/handcuffs) && !shackles) - if(user.drop_transfer_item_to_loc(I, src)) - shackles = I - slowdown = 15 - icon_state = "orange1" - return + if(istype(I, /obj/item/restraints/handcuffs) && !shackles && user.drop_transfer_item_to_loc(I, src)) + shackles = I + slowdown = 15 + update_icon(UPDATE_ICON_STATE) + return return ..() + diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 5124a5c2a73..affd6bb1c19 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -4,7 +4,7 @@ icon_state = "magboots0" origin_tech = "materials=3;magnets=4;engineering=4" var/magboot_state = "magboots" - var/magpulse = 0 + var/magpulse = FALSE var/slowdown_active = 2 var/slowdown_passive = SHOES_SLOWDOWN var/magpulse_name = "mag-pulse traction system" @@ -40,21 +40,31 @@ magpulse_name = "anchoring spikes" slowdown_active = 2 -/obj/item/clothing/shoes/magboots/attack_self(mob/user) + +/obj/item/clothing/shoes/magboots/update_icon_state() + icon_state = "[magboot_state][magpulse]" + + +/obj/item/clothing/shoes/magboots/attack_self(mob/user, forced = FALSE) + toggle_magpulse(user, forced) + + +/obj/item/clothing/shoes/magboots/proc/toggle_magpulse(mob/user, forced) if(magpulse) + START_PROCESSING(SSobj, src) //Gravboots flags &= ~NOSLIP slowdown = slowdown_passive else + STOP_PROCESSING(SSobj, src) flags |= NOSLIP slowdown = slowdown_active magpulse = !magpulse - icon_state = "[magboot_state][magpulse]" - to_chat(user, "You [magpulse ? "enable" : "disable"] the [magpulse_name].") - user.update_inv_shoes() //so our mob-overlays update + update_icon(UPDATE_ICON_STATE) + if(!forced) + to_chat(user, "You [magpulse ? "enable" : "disable"] the [magpulse_name].") user.update_gravity(user.mob_has_gravity()) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + update_equipped_item() + /obj/item/clothing/shoes/magboots/negates_gravity() return flags & NOSLIP @@ -161,7 +171,7 @@ slowdown_active = 0 magboot_state = "gravboots" magpulse_name = "micro gravitational traction system" - var/datum/martial_art/grav_stomp/style = new //Only works with core and cell installed. + var/datum/martial_art/grav_stomp/style var/jumpdistance = 5 var/jumpspeed = 3 var/recharging_rate = 6 SECONDS @@ -171,6 +181,12 @@ var/obj/item/assembly/signaler/anomaly/grav/core = null var/obj/item/stock_parts/cell/cell = null + +/obj/item/clothing/shoes/magboots/gravity/Initialize() + . = ..() + style = new() + + /obj/item/clothing/shoes/magboots/gravity/Destroy() QDEL_NULL(style) QDEL_NULL(cell) @@ -189,7 +205,8 @@ else . += "It is missing a gravitational anomaly core and a power cell." -/obj/item/clothing/shoes/magboots/gravity/attack_self(mob/user) + +/obj/item/clothing/shoes/magboots/gravity/toggle_magpulse(mob/user, forced) if(!cell) to_chat(user, "Your boots do not have a power cell!") return @@ -199,8 +216,8 @@ if(!core) to_chat(user, "There's no core installed!") return + return ..() - ..() /obj/item/clothing/shoes/magboots/gravity/process() if(!cell) //There should be a cell here, but safety first @@ -209,7 +226,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/user = loc to_chat(user, "[src] has ran out of charge, and turned off!") - attack_self(user) + attack_self(user, TRUE) else cell.use(power_consumption_rate) @@ -272,7 +289,7 @@ style.remove(H) if(magpulse) to_chat(user, "As [src] are removed, they deactivate.") - attack_self(user) + attack_self(user, TRUE) /obj/item/clothing/shoes/magboots/gravity/item_action_slot_check(slot) if(slot == slot_shoes) diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index b1eb9def064..9eef7a999aa 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -207,36 +207,44 @@ "Vox Armalis" = 'icons/mob/clothing/species/armalis/feet.dmi' ) -/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user) + +/obj/item/clothing/shoes/magboots/vox/update_icon_state() + return + + +/obj/item/clothing/shoes/magboots/vox/attack_self(mob/user, forced = FALSE) + toggle_magpulse(user, forced) + + +/obj/item/clothing/shoes/magboots/vox/toggle_magpulse(mob/living/user, forced) if(magpulse) flags &= ~NOSLIP - magpulse = 0 - flags |= NODROP - to_chat(user, "You relax your deathgrip on the flooring.") + flags &= ~NODROP + slowdown = slowdown_passive + if(!forced) + to_chat(user, "You relax your deathgrip on the flooring.") else - //make sure these can only be used when equipped. - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.shoes != src) - to_chat(user, "You will have to put on the [src] before you can do that.") - return + flags |= NOSLIP + flags |= NODROP //kinda hard to take off magclaws when you are gripping them tightly. + slowdown = slowdown_active + if(!forced) + to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") + magpulse = !magpulse + user.update_gravity(user.mob_has_gravity()) - flags |= NOSLIP - magpulse = 1 - flags &= ~NODROP //kinda hard to take off magclaws when you are gripping them tightly. - to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") - to_chat(user, "It would be hard to take off the [src] without relaxing your grip first.") +/obj/item/clothing/shoes/magboots/vox/item_action_slot_check(slot) + if(slot == slot_shoes) + return TRUE + //In case they somehow come off while enabled. /obj/item/clothing/shoes/magboots/vox/dropped(mob/user, silent = FALSE) - ..() - if(src.magpulse) + . = ..() + if(magpulse) user.visible_message("The [src] go limp as they are removed from [usr]'s feet.", "The [src] go limp as they are removed from your feet.") - flags &= ~NOSLIP - magpulse = 0 - flags &= ~NODROP + toggle_magpulse(user, forced = TRUE) + /obj/item/clothing/shoes/magboots/vox/examine(mob/user) . = ..() diff --git a/code/modules/clothing/spacesuits/ert.dm b/code/modules/clothing/spacesuits/ert.dm index 2a9bccbb70f..47c0e306c85 100644 --- a/code/modules/clothing/spacesuits/ert.dm +++ b/code/modules/clothing/spacesuits/ert.dm @@ -238,11 +238,11 @@ "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi' ) - allowed = list(/obj/item/nullrod/claymore, /obj/item/storage/belt/claymore) + allowed = list(/obj/item/nullrod/claymore, /obj/item/storage/belt/claymore, /obj/item/gun/energy,/obj/item/reagent_containers/spray/pepper,/obj/item/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/flashlight/seclite,/obj/item/melee/classic_baton/telescopic,/obj/item/kitchen/knife/combat) hide_tail_by_species = list("Unathi, Ash Walker, Ash Walker Shaman, Draconid, Tajaran, Vox, Vulpkanin") -/obj/item/clothing/suit/space/hardsuit/ert/paranormal/New() - ..() +/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize(mapload) + . = ..() new /obj/item/nullrod(src) /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor @@ -314,6 +314,11 @@ "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/helmet.dmi' ) + +/obj/item/clothing/head/helmet/space/hardsuit/deathsquad/update_icon_state() + return + + /obj/item/clothing/suit/space/hardsuit/deathsquad name = "deathsquad suit" desc = "A heavily armored, advanced space suit that protects against most forms of damage." @@ -338,6 +343,12 @@ "Stok" = 'icons/mob/clothing/species/monkey/suit.dmi', "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi' ) + + +/obj/item/clothing/suit/space/hardsuit/deathsquad/update_icon_state() + return + + /obj/item/clothing/suit/space/ert_eva_amber name = "ERT Amber Spacesuit" icon_state = "ert_eva_amber" diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 252092a5966..3d852b311a1 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -7,14 +7,11 @@ item_state = "eng_helm" armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 15, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75) item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite) - //heat_protection = - //max_heat_protection_temperature = - //resistance_flags = max_integrity = 300 var/basestate = "hardsuit" allowed = list(/obj/item/flashlight) var/brightness_on = 4 //luminosity when on - var/on = FALSE + var/light_on = FALSE var/obj/item/clothing/suit/space/hardsuit/suit actions_types = list(/datum/action/item_action/toggle_helmet_light) @@ -40,57 +37,78 @@ "Vulpkanin" = 'icons/obj/clothing/species/vulpkanin/hats.dmi' ) -/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user) - toggle_light(user) -/obj/item/clothing/head/helmet/space/hardsuit/proc/toggle_light(mob/user) - on = !on - icon_state = "[basestate][on]-[item_color]" +/obj/item/clothing/head/helmet/space/hardsuit/Destroy() + suit = null + return ..() - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_head() - if(on) - set_light(brightness_on) - else - set_light(0) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() +/obj/item/clothing/head/helmet/space/hardsuit/update_icon_state() + icon_state = "[basestate][light_on]-[item_color]" + + +/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot, initial = FALSE) + . = ..() + if(slot != slot_head) + if(suit) + suit.RemoveHelmet() + else + qdel(src) -/obj/item/clothing/head/helmet/space/hardsuit/extinguish_light(force = FALSE) - if(on) - toggle_light() - visible_message(span_danger("[src]'s light fades and turns off.")) /obj/item/clothing/head/helmet/space/hardsuit/dropped(mob/user, silent = FALSE) - ..() + . = ..() + if(suit && loc != suit) + forceMove(suit) + else + qdel(src) + + +/obj/item/clothing/head/helmet/space/hardsuit/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) if(suit) suit.RemoveHelmet() + else + qdel(src) + + +/obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user) + light_on = !light_on + toggle_light(light_on) + + +/obj/item/clothing/head/helmet/space/hardsuit/proc/toggle_light(enable = TRUE, update_buttons = TRUE) + light_on = enable + update_icon(UPDATE_ICON_STATE) + update_equipped_item(update_buttons) + + if(light_on) + set_light(brightness_on) + else + set_light(0) + /obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot) if(slot == slot_head) - return 1 - -/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot, initial) - . = ..() + return TRUE - if(slot != slot_head) - if(suit) - suit.RemoveHelmet() - else - qdel(src) -/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) + wearer.show_message(span_robot("[msg]"), 1) + /obj/item/clothing/head/helmet/space/hardsuit/emp_act(severity) ..() display_visor_message("[severity > 1 ? "Light" : "Strong"] electromagnetic pulse detected!") + +/obj/item/clothing/head/helmet/space/hardsuit/extinguish_light(force = FALSE) + if(light_on) + toggle_light(enable = FALSE) + visible_message(span_danger("[src]'s light fades and turns off.")) + + /obj/item/clothing/suit/space/hardsuit name = "hardsuit" desc = "A special space suit for environments that might pose hazards beyond just the vacuum of space. Provides more protection than a standard space suit." @@ -126,15 +144,116 @@ ) -/obj/item/clothing/suit/space/hardsuit/attack_self(mob/user) - user.changeNext_move(CLICK_CD_MELEE) - ..() +/obj/item/clothing/suit/space/hardsuit/Initialize(mapload) + . = ..() + MakeHelmet() + + +/obj/item/clothing/suit/space/hardsuit/Destroy() + if(helmet) + QDEL_NULL(helmet) + QDEL_NULL(jetpack) + return ..() + + +/obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet() + if(!helmettype || helmet) + return + + var/obj/item/clothing/head/helmet/space/hardsuit/new_helmet = new helmettype(src) + new_helmet.suit = src + helmet = new_helmet + helmet.update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + + +/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot, initial) + . = ..() + if(suit_adjusted) + RemoveHelmet() + + +/obj/item/clothing/suit/space/hardsuit/dropped(mob/user, silent = FALSE) + . = ..() + if(suit_adjusted) + RemoveHelmet() + + +/obj/item/clothing/suit/space/hardsuit/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(suit_adjusted) + RemoveHelmet() + return ..() + + +/obj/item/clothing/suit/space/hardsuit/ui_action_click(mob/user) + ToggleHelmet() /obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot) if(slot == slot_wear_suit) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit. return TRUE + +/obj/item/clothing/suit/space/hardsuit/attack_self(mob/user) + user.changeNext_move(CLICK_CD_MELEE) + ..() + + +/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet() + var/mob/living/carbon/human/user = loc + if(!ishuman(user) || !helmet) + return + if(taser_proof && taser_proof.ert_mindshield_locked) + if(isertmindshielded(user)) + to_chat(user, span_notice("Access granted, identity verified...")) + else + to_chat(user, span_warning("Access denied. The user is not identified!")) + return + if(suit_adjusted) + RemoveHelmet() + return + if(user.wear_suit != src) + to_chat(user, span_warning("You must be wearing [src] to engage the helmet!")) + return + EngageHelmet() + + +/obj/item/clothing/suit/space/hardsuit/proc/EngageHelmet() + if(!helmet) + return FALSE + var/mob/living/carbon/human/user = loc + if(!ishuman(user)) + return FALSE + if(user.head) + to_chat(usr, span_warning("You're already wearing something on your head!")) + return FALSE + if(!user.equip_to_slot(helmet, slot_head)) + return FALSE + . = TRUE + suit_adjusted = TRUE + to_chat(user, span_notice("You engage the helmet on the hardsuit.")) + user.update_head(helmet, TRUE) + user.update_inv_wear_suit() + playsound(user, 'sound/items/rig_deploy.ogg', 110, TRUE) + + +/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet() + if(!helmet) + return FALSE + . = TRUE + suit_adjusted = FALSE + var/mob/living/carbon/human/user = loc + if(helmet.light_on) + helmet.toggle_light(enable = FALSE) + if(ishuman(user)) + user.temporarily_remove_item_from_inventory(helmet, force = TRUE) + user.update_inv_wear_suit() + to_chat(user, span_notice("The helmet on the hardsuit disengages.")) + helmet.forceMove(src) + playsound(user, 'sound/items/rig_retract.ogg', 110, TRUE) + for(var/datum/action/action as anything in actions) + action.UpdateButtonIcon() + + //Engineering hardsuit /obj/item/clothing/head/helmet/space/hardsuit/engine name = "engineering hardsuit helmet" @@ -230,103 +349,137 @@ name = "blood-red hardsuit helmet" desc = "A dual-mode advanced helmet designed for work in special operations. It is in travel mode. Property of Gorlex Marauders." alt_desc = "A dual-mode advanced helmet designed for work in special operations. It is in combat mode. Property of Gorlex Marauders." - icon_state = "hardsuit1-syndi" + icon_state = "hardsuit0-syndi" item_state = "syndie_helm" armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 30, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) item_color = "syndi" - on = 1 + var/on = FALSE var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null actions_types = list(/datum/action/item_action/toggle_helmet_mode) visor_flags_inv = HIDEMASK|HIDEGLASSES|HIDENAME|HIDETAIL visor_flags = STOPSPRESSUREDMAGE var/combat_rad = 50 -/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon() + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/Destroy() + linkedsuit = null + return ..() + + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon_state() icon_state = "hardsuit[on]-[item_color]" -/obj/item/clothing/head/helmet/space/hardsuit/syndi/New() - ..() - if(istype(loc, /obj/item/clothing/suit/space/hardsuit/syndi)) - linkedsuit = loc -/obj/item/clothing/head/helmet/space/hardsuit/syndi/attack_self(mob/user) //Toggle Helmet - if(!isturf(user.loc)) - to_chat(user, "You cannot toggle your helmet while in this [user.loc]!" ) +/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_name(updates = ALL) + . = ..() + name = "[initial(name)][on ? "" : " (combat)"]" + + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/update_desc(updates = ALL) + . = ..() + desc = "[initial(desc)][on ? "" : alt_desc]" + + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/attack_self(mob/user) + adjust_headgear(user) + + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/adjust_headgear(mob/living/carbon/human/user, toggle = TRUE) + if(user && !isturf(user.loc)) + to_chat(user, span_warning("You cannot toggle your helmet while in [user.loc]!" )) return - on = !on + if(toggle) + on = !on + toggle_light(enable = on, update_buttons = FALSE) + if(user) + to_chat(user, span_notice("You switch your hardsuit to [on ? "EVA mode, sacrificing speed for space protection." : "combat mode and can now run at full speed."]")) + playsound(loc, 'sound/items/rig_deploy.ogg', 110, TRUE) if(on) - to_chat(user, "You switch your hardsuit to EVA mode, sacrificing speed for space protection.") - name = initial(name) - desc = initial(desc) - set_light(brightness_on) flags |= visor_flags - flags_cover |= HEADCOVERSEYES | HEADCOVERSMOUTH + flags_cover |= (HEADCOVERSEYES|HEADCOVERSMOUTH) flags_inv |= visor_flags_inv cold_protection |= HEAD armor.rad = 100 else - to_chat(user, "You switch your hardsuit to combat mode and can now run at full speed.") - name += " (combat)" - desc = alt_desc - set_light(0) flags &= ~visor_flags - flags_cover &= ~(HEADCOVERSEYES | HEADCOVERSMOUTH) + flags_cover &= ~(HEADCOVERSEYES|HEADCOVERSMOUTH) flags_inv &= ~visor_flags_inv cold_protection &= ~HEAD armor.rad = combat_rad - update_icon() - playsound(src.loc, 'sound/items/rig_deploy.ogg', 110, 1) - toggle_hardsuit_mode(user) - user.update_inv_head() - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.update_head(src, forced = TRUE) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/head/helmet/space/hardsuit/syndi/proc/toggle_hardsuit_mode(mob/user) //Helmet Toggles Suit Mode - if(linkedsuit) - if(on) - linkedsuit.name = initial(linkedsuit.name) - linkedsuit.desc = initial(linkedsuit.desc) - linkedsuit.slowdown = 1 - linkedsuit.flags |= STOPSPRESSUREDMAGE - linkedsuit.cold_protection |= UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | TAIL - linkedsuit.on = TRUE - linkedsuit.armor.rad = 100 - else - linkedsuit.name += " (combat)" - linkedsuit.desc = linkedsuit.alt_desc - linkedsuit.slowdown = 0 - linkedsuit.flags &= ~STOPSPRESSUREDMAGE - linkedsuit.cold_protection &= ~(UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | TAIL) - linkedsuit.on = FALSE - linkedsuit.armor.rad = combat_rad - - linkedsuit.update_icon() - user.update_inv_wear_suit() - user.update_inv_w_uniform() + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + user?.update_head(src) + for(var/datum/action/action as anything in actions) + action.UpdateButtonIcon() + update_linked_hardsuit(user, toggle) + + +/obj/item/clothing/head/helmet/space/hardsuit/syndi/proc/update_linked_hardsuit(mob/user, toggle = TRUE) + if(!linkedsuit) + return + + if(toggle) + linkedsuit.on = !linkedsuit.on + + if(linkedsuit.on) + linkedsuit.slowdown = 1 + linkedsuit.flags |= STOPSPRESSUREDMAGE + linkedsuit.cold_protection |= (UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|TAIL) + linkedsuit.armor.rad = 100 + else + linkedsuit.slowdown = 0 + linkedsuit.flags &= ~STOPSPRESSUREDMAGE + linkedsuit.cold_protection &= ~(UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|TAIL) + linkedsuit.armor.rad = combat_rad + + linkedsuit.update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + user?.update_inv_wear_suit() + user?.update_inv_w_uniform() + /obj/item/clothing/suit/space/hardsuit/syndi name = "blood-red hardsuit" desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in travel mode. Property of Gorlex Marauders." alt_desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in combat mode. Property of Gorlex Marauders." - icon_state = "hardsuit1-syndi" + icon_state = "hardsuit0-syndi" item_state = "syndie_hardsuit" armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 30, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) item_color = "syndi" w_class = WEIGHT_CLASS_NORMAL - var/on = 1 + var/on = FALSE actions_types = list(/datum/action/item_action/toggle_hardsuit_mode) allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi jetpack = /obj/item/tank/jetpack/suit -/obj/item/clothing/suit/space/hardsuit/syndi/update_icon() + +/obj/item/clothing/suit/space/hardsuit/syndi/Initialize(mapload) + . = ..() + var/obj/item/clothing/head/helmet/space/hardsuit/syndi/our_helmet = helmet + our_helmet?.linkedsuit = src + our_helmet?.adjust_headgear(toggle = FALSE) + + +/obj/item/clothing/suit/space/hardsuit/syndi/update_icon_state() icon_state = "hardsuit[on]-[item_color]" + +/obj/item/clothing/suit/space/hardsuit/syndi/update_name(updates = ALL) + . = ..() + name = "[initial(name)][on ? "" : " (combat)"]" + + +/obj/item/clothing/suit/space/hardsuit/syndi/update_desc(updates = ALL) + . = ..() + desc = "[initial(desc)][on ? "" : alt_desc]" + + +/obj/item/clothing/suit/space/hardsuit/syndi/EngageHelmet() + . = ..() + if(. && on) + helmet?.toggle_light(enable = TRUE, update_buttons = FALSE) + + //Elite Syndie suit /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite name = "elite syndicate hardsuit helmet" @@ -365,14 +518,14 @@ /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/med name = "Elite medical syndicate hardsuit helmet" desc = "An elite version of the syndicate helmet. This one is made special for medics." - icon_state = "hardsuit1-smedelite" + icon_state = "hardsuit0-smedelite" item_state = "hardsuit0-smedelite" item_color = "smedelite" /obj/item/clothing/suit/space/hardsuit/syndi/elite/med name = "Elite medical syndicate hardsuit helmet" desc = "An elite version of the syndicate hardsuit. This one is made special for medics." - icon_state = "hardsuit1-smedelite" + icon_state = "hardsuit0-smedelite" item_state = "hardsuit0-smedelite" item_color = "smedelite" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/med @@ -398,7 +551,7 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/freedom sprite_sheets = null -/obj/item/clothing/suit/space/hardsuit/syndi/freedom/update_icon() +/obj/item/clothing/suit/space/hardsuit/syndi/freedom/update_icon_state() return /obj/item/clothing/head/helmet/space/hardsuit/syndi/freedom @@ -408,7 +561,7 @@ item_state = "griffinhat" sprite_sheets = null -/obj/item/clothing/head/helmet/space/hardsuit/syndi/freedom/update_icon() +/obj/item/clothing/head/helmet/space/hardsuit/syndi/freedom/update_icon_state() return //Soviet hardsuit @@ -562,25 +715,21 @@ armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) item_color = "rd" scan_reagents = TRUE - var/hud_active = TRUE var/explosion_detection_dist = 40 -/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/user, slot, initial) - . = ..() +/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/living/carbon/human/user, slot, initial) + . = ..() 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 - hud_active = TRUE + /obj/item/clothing/head/helmet/space/hardsuit/rd/dropped(mob/living/carbon/human/user, silent = FALSE) - ..() - if((user.head == src) && hud_active) + . = ..() + if(!user || user.head != src) GLOB.doppler_arrays -= src + /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) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 7d75bcc2282..d6612af62e4 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -8,7 +8,7 @@ flash_protect = 2 tint = 2 HUDType = 0 - var/list/examine_extensions = null + var/examine_extensions = 0 armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75) resistance_flags = FIRE_PROOF var/brightness_on = 4 //luminosity when the light is on @@ -27,25 +27,27 @@ sprite_sheets = list("Plasmaman" = 'icons/mob/clothing/species/plasmaman/helmet.dmi') var/upgradable = FALSE -/obj/item/clothing/head/helmet/space/plasmaman/New() - ..() + +/obj/item/clothing/head/helmet/space/plasmaman/Initialize(mapload) + . = ..() visor_toggling() update_icon() - cut_overlays() + /obj/item/clothing/head/helmet/space/plasmaman/AltClick(mob/user) if(!user.incapacitated() && Adjacent(user)) toggle_welding_screen(user) + /obj/item/clothing/head/helmet/space/plasmaman/visor_toggling() //handles all the actual toggling of flags up = !up flags ^= visor_flags flags_inv ^= visor_flags_inv - icon_state = "[initial(icon_state)]" if(visor_vars_to_toggle & VISOR_FLASHPROTECT) flash_protect ^= initial(flash_protect) if(visor_vars_to_toggle & VISOR_TINT) - tint ^= initial(tint) + tint = up ? tint_up : initial(tint) + /obj/item/clothing/head/helmet/space/plasmaman/proc/toggle_welding_screen(mob/living/user) if(weldingvisortoggle(user)) @@ -53,72 +55,72 @@ to_chat(user, "Your helmet's torch can't pass through your welding visor!") on = FALSE playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing - update_icon() + update_icon(UPDATE_OVERLAYS) + actions_types = list(/datum/action/item_action/toggle_helmet_light) else playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) //Visors don't just come from nothing - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/clothing/head/helmet/space/plasmaman/update_icon() - cut_overlays() - add_overlay(visor_icon) - ..() - actions_types = list(/datum/action/item_action/toggle_helmet_light) -/obj/item/clothing/head/helmet/space/plasmaman/attack_self(mob/user) +/obj/item/clothing/head/helmet/space/plasmaman/update_icon_state() + if(!upgradable) + icon_state = "[initial(icon_state)][on ? "-light":""]" + item_state = icon_state + return + + switch(armor.getRating(MELEE)) + if(30) + icon_state = "[initial(icon_state)][on ? "-light":""]" + item_state = icon_state + if(40,50) + icon_state = "[initial(icon_state)]_reinf[on ? "-light":""]" + item_state = icon_state + if(60) + icon_state = "[initial(icon_state)]_reinf_full[on ? "-light":""]" + item_state = icon_state + + +/obj/item/clothing/head/helmet/space/plasmaman/attack_self(mob/living/carbon/human/user) toggle_light(user) + /obj/item/clothing/head/helmet/space/plasmaman/proc/toggle_light(mob/user) on = !on - if(upgradable) - switch(armor.getRating("melee")) - if(30) - icon_state = "[initial(icon_state)][on ? "-light":""]" - item_state = icon_state - if(40,50) - icon_state = "[initial(icon_state)]_reinf[on ? "-light":""]" - item_state = icon_state - if(60) - icon_state = "[initial(icon_state)]_reinf_full[on ? "-light":""]" - item_state = icon_state - else - icon_state = "[initial(icon_state)][on ? "-light":""]" - item_state = icon_state - - var/mob/living/carbon/human/H = user - if(istype(H)) - H.update_inv_head() + update_icon(UPDATE_ICON_STATE) if(on) if(!up) - if(istype(H)) - to_chat(user, "Your helmet's torch can't pass through your welding visor!") + if(user) + to_chat(user, span_notice("Your helmet's torch can't pass through your welding visor!")) set_light(0) else set_light(brightness_on) else set_light(0) - for(var/X in actions) - var/datum/action/A=X - A.UpdateButtonIcon() + update_equipped_item() + /obj/item/clothing/head/helmet/space/plasmaman/extinguish_light(force = FALSE) if(on) toggle_light() + update_equipped_item() + /obj/item/clothing/head/helmet/space/plasmaman/equipped(mob/living/carbon/human/user, slot, initial) . = ..() - if(HUDType && slot == slot_head) var/datum/atom_hud/H = GLOB.huds[HUDType] H.add_hud_to(user) + /obj/item/clothing/head/helmet/space/plasmaman/dropped(mob/living/carbon/human/user, silent = FALSE) - ..() + . = ..() if(HUDType && istype(user) && user.head == src) var/datum/atom_hud/H = GLOB.huds[HUDType] H.remove_hud_from(user) + /obj/item/clothing/head/helmet/space/plasmaman/security name = "security plasma envirosuit helmet" desc = "A plasmaman containment helmet designed for security officers, protecting them from being flashed and burning alive, alongside other undesirables." @@ -126,7 +128,7 @@ item_state = "security_envirohelm" armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 50) HUDType = DATA_HUD_SECURITY_ADVANCED - examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE) + examine_extensions = EXAMINE_HUD_SECURITY_READ | EXAMINE_HUD_SECURITY_WRITE /obj/item/clothing/head/helmet/space/plasmaman/security/dec name = "detective plasma envirosuit helmet" @@ -135,7 +137,7 @@ armor = list("melee" = 25, "bullet" = 5, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 50) scan_reagents = 1 HUDType = DATA_HUD_SECURITY_ADVANCED - examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE) + examine_extensions = EXAMINE_HUD_SECURITY_READ | EXAMINE_HUD_SECURITY_WRITE /obj/item/clothing/head/helmet/space/plasmaman/security/warden name = "warden's plasma envirosuit helmet" @@ -155,7 +157,7 @@ icon_state = "doctor_envirohelm" item_state = "doctor_envirohelm" HUDType = DATA_HUD_MEDICAL_ADVANCED - examine_extensions = list(EXAMINE_HUD_MEDICAL) + examine_extensions = EXAMINE_HUD_MEDICAL /obj/item/clothing/head/helmet/space/plasmaman/cmo name = "chief medical officer's plasma envirosuit helmet" @@ -165,7 +167,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 HUDType = DATA_HUD_MEDICAL_ADVANCED - examine_extensions = list(EXAMINE_HUD_MEDICAL) + examine_extensions = EXAMINE_HUD_MEDICAL scan_reagents = 1 /obj/item/clothing/head/helmet/space/plasmaman/genetics @@ -303,7 +305,7 @@ icon_state = "white_envirohelm" item_state = "white_envirohelm" HUDType = DATA_HUD_SECURITY_ADVANCED - examine_extensions = list(EXAMINE_HUD_SECURITY_READ) + examine_extensions = EXAMINE_HUD_SECURITY_READ /obj/item/clothing/head/helmet/space/plasmaman/nt_rep name = "nanotrasen representative envirosuit helmet" @@ -311,7 +313,7 @@ icon_state = "ntrep_envirohelm" item_state = "ntrep_envirohelm" HUDType = DATA_HUD_SECURITY_BASIC - examine_extensions = list(EXAMINE_HUD_SKILLS) + examine_extensions = EXAMINE_HUD_SKILLS /obj/item/clothing/head/helmet/space/plasmaman/chef name = "chef plasma envirosuit helmet" @@ -334,7 +336,7 @@ item_state = "botany_envirohelm" flags = THICKMATERIAL HUDType = DATA_HUD_HYDROPONIC - examine_extensions = list(DATA_HUD_HYDROPONIC) + examine_extensions = EXAMINE_HUD_BOTANY /obj/item/clothing/head/helmet/space/plasmaman/janitor name = "janitor's plasma envirosuit helmet" @@ -363,7 +365,7 @@ item_state = "hop_envirohelm" armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 50) HUDType = DATA_HUD_SECURITY_BASIC - examine_extensions = list(EXAMINE_HUD_SKILLS) + examine_extensions = EXAMINE_HUD_SKILLS /obj/item/clothing/head/helmet/space/plasmaman/captain name = "captain envirosuit helmet" @@ -372,7 +374,7 @@ item_state = "cap_envirohelm" armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 50) HUDType = DATA_HUD_SECURITY_BASIC - examine_extensions = list(EXAMINE_HUD_SKILLS) + examine_extensions = EXAMINE_HUD_SKILLS /obj/item/clothing/head/helmet/space/plasmaman/blueshield name = "blueshield envirosuit helmet" @@ -381,7 +383,7 @@ item_state = "bs_envirohelm" armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 50) HUDType = DATA_HUD_MEDICAL_ADVANCED - examine_extensions = list(EXAMINE_HUD_MEDICAL) + examine_extensions = EXAMINE_HUD_MEDICAL /obj/item/clothing/head/helmet/space/plasmaman/wizard name = "wizard plasma envirosuit helmet" @@ -409,4 +411,4 @@ icon_state = "centcomm_envirohelm" item_state = "centcomm_envirohelm" HUDType = DATA_HUD_SECURITY_BASIC - examine_extensions = list(EXAMINE_HUD_SKILLS) + examine_extensions = EXAMINE_HUD_SKILLS diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 41e92a995e7..e8951f3a244 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -59,38 +59,47 @@ item_state = "armor" var/obj/item/clothing/accessory/holobadge/attached_badge + +/obj/item/clothing/suit/armor/vest/security/update_icon_state() + icon_state = "armor[attached_badge ? "sec" : ""]" + + +/obj/item/clothing/suit/armor/vest/security/update_desc(updates = ALL) + . = ..() + if(attached_badge) + desc = "An armored vest that protects against some damage. This one has [attached_badge] attached to it." + else + desc = initial(desc) + + /obj/item/clothing/suit/armor/vest/security/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/clothing/accessory/holobadge) && !attached_badge) - if(user.drop_transfer_item_to_loc(I, src)) - add_fingerprint(user) - attached_badge = I - var/datum/action/A = new /datum/action/item_action/remove_badge(src) - A.Grant(user) - icon_state = "armorsec" - user.update_inv_wear_suit() - desc = "An armored vest that protects against some damage. This one has [attached_badge] attached to it." - to_chat(user, "You attach [attached_badge] to [src].") + if(istype(I, /obj/item/clothing/accessory/holobadge) && !attached_badge && user.drop_transfer_item_to_loc(I, src)) + add_fingerprint(user) + attached_badge = I + var/datum/action/item_action/remove_badge/holoaction = new(src) + holoaction.Grant(user) + update_appearance(UPDATE_ICON_STATE|UPDATE_DESC) + update_equipped_item() + to_chat(user, span_notice("You attach [attached_badge] to [src].")) return ..() + /obj/item/clothing/suit/armor/vest/security/attack_self(mob/user) if(attached_badge) add_fingerprint(user) user.put_in_hands(attached_badge) - for(var/datum/action/item_action/remove_badge/action in actions) LAZYREMOVE(actions, action) action.Remove(user) - - icon_state = "armor" - user.update_inv_wear_suit() - desc = "An armored vest that protects against some damage. This one has a clip for a holobadge." - to_chat(user, "You remove [attached_badge] from [src].") attached_badge = null - + update_appearance(UPDATE_ICON_STATE|UPDATE_DESC) + update_equipped_item() + to_chat(user, span_notice("You remove [attached_badge] from [src].")) return ..() + /obj/item/clothing/suit/armor/vest/blueshield name = "blueshield security armor" desc = "An armored vest with the badge of a Blueshield Lieutenant." @@ -321,38 +330,45 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF hit_reaction_chance = 50 + +/obj/item/clothing/suit/armor/reactive/update_icon_state() + icon_state = "reactive[active ? "" : "off"]" + item_state = "reactive[active ? "" : "off"]" + + /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!") + to_chat(user, span_warning("[src] is disabled from an electromagnetic pulse!")) return + active = !active + update_icon(UPDATE_ICON_STATE) + add_fingerprint(user) if(active) - to_chat(user, "[src] is now active.") - icon_state = "reactive" - item_state = "reactive" + to_chat(user, span_notice("[src] is now active.")) else - to_chat(user, "[src] is now inactive.") - icon_state = "reactiveoff" - item_state = "reactiveoff" - add_fingerprint(user) - user.update_inv_wear_suit() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + to_chat(user, span_notice("[src] is now inactive.")) + update_equipped_item() + /obj/item/clothing/suit/armor/reactive/emp_act(severity) active = FALSE emp_d = 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_REF(reboot)), 100 / severity) + update_icon(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, PROC_REF(reboot)), 100 / severity) + if(ishuman(loc)) + var/mob/living/carbon/human/user = loc + to_chat(user, span_warning("[src] starts malfunctioning!")) + update_equipped_item() ..() + /obj/item/clothing/suit/armor/reactive/proc/reboot() emp_d = FALSE + if(ishuman(loc)) + var/mob/living/carbon/human/user = loc + update_equipped_item() + to_chat(user, span_notice("Looks like [src] returns its functionality.")) + //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 @@ -526,7 +542,7 @@ icon_state = "knight_templar" item_state = "knight_templar" hide_tail_by_species = list("Vox", "Vulpkanin") - allowed = list(/obj/item/nullrod/claymore, /obj/item/storage/belt/claymore) + allowed = list(/obj/item/nullrod/claymore, /obj/item/storage/belt/claymore, /obj/item/gun/energy,/obj/item/reagent_containers/spray/pepper,/obj/item/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/flashlight/seclite,/obj/item/melee/classic_baton/telescopic,/obj/item/kitchen/knife/combat) sprite_sheets = list( "Plasmaman" = 'icons/mob/clothing/species/plasmaman/suit.dmi', "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi' diff --git a/code/modules/clothing/suits/hood.dm b/code/modules/clothing/suits/hood.dm index 2b2e54d9306..ebdd618eae4 100644 --- a/code/modules/clothing/suits/hood.dm +++ b/code/modules/clothing/suits/hood.dm @@ -5,90 +5,138 @@ var/obj/item/clothing/head/hooded/hood var/hoodtype = /obj/item/clothing/head/hooded/winterhood //so the chaplain hoodie or other hoodies can override this + /obj/item/clothing/suit/hooded/Initialize(mapload) . = ..() MakeHood() + /obj/item/clothing/suit/hooded/Destroy() QDEL_NULL(hood) . = ..() + /obj/item/clothing/suit/hooded/proc/MakeHood() item_color = initial(icon_state) if(!hood) - var/obj/item/clothing/head/hooded/W = new hoodtype(src) - W.suit = src - hood = W + var/obj/item/clothing/head/hooded/new_hood = new hoodtype(src) + new_hood.suit = src + hood = new_hood + + +/obj/item/clothing/suit/hooded/attack_self(mob/user) + user.changeNext_move(CLICK_CD_MELEE) + ..() + + +/obj/item/clothing/suit/hooded/update_icon_state() + icon_state = "[item_color][suit_adjusted ? "_hood" : ""]" + /obj/item/clothing/suit/hooded/ui_action_click() ToggleHood() + /obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user) if(slot == slot_wear_suit) - return 1 + return TRUE -/obj/item/clothing/suit/hooded/equipped(mob/user, slot, initial) - . = ..() - if(slot != slot_wear_suit) +/obj/item/clothing/suit/hooded/equipped(mob/user, slot, initial = FALSE) + . = ..() + if(suit_adjusted) RemoveHood() -/obj/item/clothing/suit/hooded/proc/RemoveHood() - if(isnull(hood)) - return - icon_state = item_color - suit_adjusted = 0 - if(ishuman(hood.loc)) - var/mob/living/carbon/H = hood.loc - H.transfer_item_to_loc(hood, src, TRUE) - H.update_inv_wear_suit() - else - hood.forceMove(src) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() /obj/item/clothing/suit/hooded/dropped(mob/user, silent = FALSE) - ..() - RemoveHood() + . = ..() + if(suit_adjusted) + RemoveHood() + + +/obj/item/clothing/suit/hooded/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(suit_adjusted) + RemoveHood() + return ..() + /obj/item/clothing/suit/hooded/proc/ToggleHood() - if(!suit_adjusted) - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(H.wear_suit != src) - to_chat(H,"You must be wearing [src] to put up the hood!") - return - if(H.head) - to_chat(H,"You're already wearing something on your head!") - return - else if(H.equip_to_slot_if_possible(hood, slot_head)) - suit_adjusted = 1 - icon_state = "[item_color]_hood" - H.update_inv_wear_suit() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - else + var/mob/living/carbon/human/user = loc + if(!ishuman(user) || !hood) + return + if(suit_adjusted) RemoveHood() + return + if(user.wear_suit != src) + to_chat(user, span_warning("You must be wearing [src] to put up the hood!")) + return + EngageHood() + + +/obj/item/clothing/suit/hooded/proc/EngageHood() + if(!hood) + return FALSE + var/mob/living/carbon/human/user = loc + if(!ishuman(user)) + return FALSE + if(user.head) + to_chat(user, span_warning("You're already wearing something on your head!")) + return + if(!user.equip_to_slot(hood, slot_head)) + return FALSE + . = TRUE + suit_adjusted = TRUE + update_icon(UPDATE_ICON_STATE) + to_chat(user, span_notice("You adjust the hood on [src].")) + user.update_head(hood, TRUE) + user.update_inv_wear_suit() + + +/obj/item/clothing/suit/hooded/proc/RemoveHood() + if(!hood) + return FALSE + . = TRUE + suit_adjusted = FALSE + update_icon(UPDATE_ICON_STATE) + var/mob/living/carbon/human/user = loc + if(ishuman(user)) + user.temporarily_remove_item_from_inventory(hood, force = TRUE) + user.update_inv_wear_suit() + to_chat(user, span_notice("The hood fells off from [src].")) + hood.forceMove(src) + for(var/datum/action/action as anything in actions) + action.UpdateButtonIcon() + /obj/item/clothing/head/hooded var/obj/item/clothing/suit/hooded/suit + /obj/item/clothing/head/hooded/Destroy() suit = null return ..() -/obj/item/clothing/head/hooded/dropped(mob/user, silent = FALSE) - ..() - if(suit) - suit.RemoveHood() -/obj/item/clothing/head/hooded/equipped(mob/user, slot, initial) +/obj/item/clothing/head/hooded/equipped(mob/user, slot, initial = FALSE) . = ..() - if(slot != slot_head) if(suit) suit.RemoveHood() else qdel(src) + + +/obj/item/clothing/head/hooded/dropped(mob/user, silent = FALSE) + . = ..() + if(suit && loc != suit) + forceMove(suit) + else + qdel(src) + + +/obj/item/clothing/head/hooded/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) + if(suit) + suit.RemoveHood() + else + qdel(src) + diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index e8c3abe6ef8..9797d891a1f 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -505,11 +505,13 @@ "Grey" = 'icons/mob/clothing/species/grey/suit.dmi' ) + /obj/item/clothing/suit/suspenders/Initialize(mapload) . = ..() if(!color && paintable) color = "#a30e22" - update_icon() + update_icon(UPDATE_OVERLAYS) + /obj/item/clothing/suit/suspenders/attackby(obj/D, mob/user, params) . = ..() @@ -519,6 +521,7 @@ color = can.colour update_icon(UPDATE_OVERLAYS) + /obj/item/clothing/suit/suspenders/update_overlays() . = ..() if(color) @@ -527,7 +530,6 @@ var/mutable_appearance/suspenders_clips = mutable_appearance(icon='icons/obj/clothing/belts.dmi', icon_state = "suspenders_clips", appearance_flags = RESET_COLOR) . += suspenders_clips - /obj/item/clothing/suit/suspenders/nodrop flags = NODROP diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index baeb4b05493..8bf89f6ecbb 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -225,8 +225,8 @@ name = "\improper super-hero E-N suit" icon_state = "ensuit" -/obj/item/clothing/suit/corgisuit/super_hero/en/New() - ..() +/obj/item/clothing/suit/corgisuit/super_hero/en/Initialize(mapload) + . = ..() START_PROCESSING(SSobj, src) /obj/item/clothing/suit/corgisuit/super_hero/en/Destroy() @@ -235,14 +235,15 @@ /obj/item/clothing/suit/corgisuit/super_hero/en/process() if(prob(2)) - for(var/obj/M in orange(2,src)) - if(!M.anchored && (M.flags & CONDUCT)) - step_towards(M,src) - for(var/mob/living/silicon/S in orange(2,src)) - if(istype(S, /mob/living/silicon/ai)) continue - step_towards(S,src) - for(var/mob/living/carbon/human/machine/M in orange(2,src)) - step_towards(M,src) + for(var/obj/object in orange(2, src)) + if(!object.anchored && (object.flags & CONDUCT)) + step_towards(object, src) + for(var/mob/living/silicon/robot in orange(2,src)) + if(isAI(robot)) + continue + step_towards(robot, src) + for(var/mob/living/carbon/human/machine/IPC in orange(2,src)) + step_towards(IPC, src) /obj/item/clothing/suit/monkeysuit name = "monkey suit" @@ -1148,7 +1149,6 @@ if(!istype(H) || slot != slot_wear_suit) STOP_PROCESSING(SSobj, src) - return else START_PROCESSING(SSobj, src) diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index d834e1579eb..e1537044931 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -2,8 +2,8 @@ var/obj/item/storage/internal/pockets w_class = WEIGHT_CLASS_NORMAL //we don't want these to be able to fit in their own pockets. -/obj/item/clothing/suit/storage/New() - ..() +/obj/item/clothing/suit/storage/Initialize(mapload) + . = ..() pockets = new/obj/item/storage/internal(src) pockets.storage_slots = 2 //two slots pockets.max_w_class = WEIGHT_CLASS_SMALL //fit only pocket sized items @@ -13,15 +13,18 @@ QDEL_NULL(pockets) return ..() -/obj/item/clothing/suit/storage/attack_hand(mob/user as mob) - if(pockets.handle_attack_hand(user)) - ..(user) -/obj/item/clothing/suit/storage/MouseDrop(obj/over_object as obj) - if(pockets.handle_mousedrop(usr, over_object)) - ..(over_object) +/obj/item/clothing/suit/storage/attack_hand(mob/user) + if(!pockets || !pockets.handle_attack_hand(user)) + return ..() + + +/obj/item/clothing/suit/storage/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(!pockets || !pockets.handle_mousedrop(usr, over_object)) + return ..() + -/obj/item/clothing/suit/storage/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/clothing/suit/storage/attackby(obj/item/W, mob/user, params) . = ..() if(istype(W, /obj/item/radio/spy_spider)) return @@ -35,7 +38,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/toggles.dm b/code/modules/clothing/suits/toggles.dm deleted file mode 100644 index 2617619b6c7..00000000000 --- a/code/modules/clothing/suits/toggles.dm +++ /dev/null @@ -1,88 +0,0 @@ -//Hardsuit toggle code -/obj/item/clothing/suit/space/hardsuit/New() - MakeHelmet() - ..() - -/obj/item/clothing/suit/space/hardsuit/Destroy() - if(helmet) - helmet.suit = null - QDEL_NULL(helmet) - QDEL_NULL(jetpack) - return ..() - -/obj/item/clothing/head/helmet/space/hardsuit/Destroy() - if(suit) - suit.helmet = null - return ..() - -/obj/item/clothing/suit/space/hardsuit/proc/MakeHelmet() - if(!helmettype) - return - if(!helmet) - var/obj/item/clothing/head/helmet/space/hardsuit/W = new helmettype(src) - W.suit = src - helmet = W - -/obj/item/clothing/suit/space/hardsuit/ui_action_click() - ..() - ToggleHelmet() - -/obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot, initial) - . = ..() - - if(!helmettype) - return - if(slot != slot_wear_suit) - RemoveHelmet() - -/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet() - if(!helmet) - return - suittoggled = FALSE - if(ishuman(helmet.loc)) - var/mob/living/carbon/H = helmet.loc - if(helmet.on) - helmet.attack_self(H) - H.transfer_item_to_loc(helmet, src, TRUE) - H.update_inv_wear_suit() - to_chat(H, "The helmet on the hardsuit disengages.") - playsound(src.loc, 'sound/items/rig_retract.ogg', 110, 1) - else - helmet.forceMove(src) - -/obj/item/clothing/suit/space/hardsuit/dropped(mob/user, silent = FALSE) - ..() - RemoveHelmet() - -/obj/item/clothing/suit/space/hardsuit/proc/EngageHelmet() - var/mob/living/carbon/human/H = src.loc - if(H.equip_to_slot_if_possible(helmet, slot_head)) - to_chat(H, "You engage the helmet on the hardsuit.") - suittoggled = TRUE - H.update_inv_wear_suit() - playsound(src.loc, 'sound/items/rig_deploy.ogg', 110, 1) - -/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet() - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(taser_proof && taser_proof.ert_mindshield_locked) - if(isertmindshielded(H)) - to_chat(H, "Access granted, identity verified...") - else - to_chat(H, "Access denied. The user is not identified!") - return - if(!helmettype) - return - if(!helmet) - return - if(!suittoggled) - if(H.wear_suit != src) - to_chat(H, "You must be wearing [src] to engage the helmet!") - return - if(H.head) - to_chat(H, "You're already wearing something on your head!") - return - else - EngageHelmet() - else - RemoveHelmet() diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index b53d4b13383..4dd553949b8 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -78,6 +78,68 @@ dog_fashion = null flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES +/obj/item/clothing/head/wizard/magusdefender + name = "Magus Helm" + desc = "A mysterious helmet that hums with an unearthly power" + icon_state = "magusdefender" + item_state = "magusdefender" + dog_fashion = null + flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES + sprite_sheets = list( + "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/head.dmi', + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi', + "Unathi" = 'icons/mob/clothing/species/unathi/head.dmi', + "Tajaran" = 'icons/mob/clothing/species/tajaran/head.dmi' + ) + +/obj/item/clothing/head/wizard/necromage + name = "Necronat Mask" + desc = "A mysterious mask made from the skull of the previous owner." + icon_state = "necromage" + item_state = "necromage" + dog_fashion = null + flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES + sprite_sheets = list( + "Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/head.dmi', + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi', + "Unathi" = 'icons/mob/clothing/species/unathi/head.dmi', + "Tajaran" = 'icons/mob/clothing/species/tajaran/head.dmi' + ) + +/obj/item/clothing/head/wizard/artmage + name = "Wizard Sculptor's Beret" + desc = "The classic beret of the followers of the school of sculpture allows you to look like a real artist." + icon_state = "artmage" + item_state = "artmage" + dog_fashion = null + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi' + ) + +/obj/item/clothing/head/wizard/visionmage + name = "Golden tiara" + desc = "Golden tiara with a third eye, don't look directly into it." + icon_state = "visionmage" + item_state = "visionmage" + dog_fashion = null + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/head.dmi', + "Drask" = 'icons/mob/clothing/species/drask/head.dmi' + ) + +/obj/item/clothing/head/wizard/healmage + name = "Healer's Hat" + desc = "The magical hat of a healer's robe that protects against leprosy." + icon_state = "healmage" + item_state = "healmage" + dog_fashion = null + sprite_sheets = list( + "Drask" = 'icons/mob/clothing/species/drask/head.dmi' + ) + /obj/item/clothing/head/wizard/amp name = "psychic amplifier" desc = "A crown-of-thorns psychic amplifier. Kind of looks like a tiara having sex with an industrial robot." @@ -167,6 +229,57 @@ "Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi' ) +/obj/item/clothing/suit/wizrobe/magusdefender + name = "Magus Robe" + desc = "A set of armoured robes that seem to radiate a dark power." + icon_state = "magusdefender" + item_state = "magusdefender" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', + "Drask" = 'icons/mob/clothing/species/drask/suit.dmi' + ) + +/obj/item/clothing/suit/wizrobe/necromage + name = "Necronat Robe" + desc = "Black and toxic green robes that seem to radiate a dark power and scent of death." + icon_state = "necromage" + item_state = "necromage" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', + "Drask" = 'icons/mob/clothing/species/drask/suit.dmi' + ) + +/obj/item/clothing/suit/wizrobe/artmage + name = "Wizard Sculptor's Apron" + desc = "A classic apron of followers of the school of sculpture, it protects well from flying clay." + icon_state = "artmage" + item_state = "artmage" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', + "Drask" = 'icons/mob/clothing/species/drask/suit.dmi' + ) + +/obj/item/clothing/suit/wizrobe/visionmage + name = "Dark robe" + desc = "A dark seer's robe woven from otherworldly threads. Emits dark energy." + icon_state = "visionmage" + item_state = "visionmage" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', + "Drask" = 'icons/mob/clothing/species/drask/suit.dmi' + ) + +/obj/item/clothing/suit/wizrobe/healmage + name = "Healer's Robe" + desc = "Magical robe of a healing servant that protects against leprosy." + icon_state = "healmage" + item_state = "healmage" + sprite_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', + "Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi', + "Drask" = 'icons/mob/clothing/species/drask/suit.dmi' + ) + /obj/item/clothing/suit/wizrobe/psypurple name = "purple robes" desc = "Heavy, royal purple robes threaded with psychic amplifiers and weird, bulbous lenses. Do not machine wash." diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 79f9044f0e8..1beecc71651 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -14,8 +14,8 @@ var/image/inv_overlay = null //overlay used when attached to clothing. var/allow_duplicates = TRUE // Allow accessories of the same type. -/obj/item/clothing/accessory/New() - ..() +/obj/item/clothing/accessory/Initialize(mapload) + . = ..() inv_overlay = image("icon" = 'icons/obj/clothing/ties_overlay.dmi', "icon_state" = "[item_color? "[item_color]" : "[icon_state]"]") /obj/item/clothing/accessory/Destroy() @@ -31,7 +31,8 @@ has_suit = S loc = has_suit has_suit.overlays += inv_overlay - LAZYADD(has_suit.actions, actions) + if(actions) + LAZYADD(has_suit.actions, actions) for(var/X in actions) var/datum/action/A = X diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 6b54e23425c..4b201f7d857 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -12,8 +12,8 @@ actions_types = list(/datum/action/item_action/accessory/storage) w_class = WEIGHT_CLASS_NORMAL // so it doesn't fit in pockets -/obj/item/clothing/accessory/storage/New() - ..() +/obj/item/clothing/accessory/storage/Initialize(mapload) + . = ..() hold = new/obj/item/storage/internal(src) hold.storage_slots = slots @@ -21,22 +21,25 @@ QDEL_NULL(hold) return ..() -/obj/item/clothing/accessory/storage/attack_hand(mob/user as mob) + +/obj/item/clothing/accessory/storage/attack_hand(mob/user) if(has_suit) //if we are part of a suit - hold.open(user) + hold?.open(user) return - if(hold.handle_attack_hand(user)) //otherwise interact as a regular storage item - ..(user) + if(!hold || !hold.handle_attack_hand(user)) //otherwise interact as a regular storage item + return ..() + -/obj/item/clothing/accessory/storage/MouseDrop(obj/over_object as obj) +/obj/item/clothing/accessory/storage/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) if(has_suit) - return + return has_suit.MouseDrop(over_object, src_location, over_location, src_control, over_control, params) + + if(!hold || !hold.handle_mousedrop(usr, over_object)) + return ..() - if(hold.handle_mousedrop(usr, over_object)) - ..(over_object) -/obj/item/clothing/accessory/storage/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/clothing/accessory/storage/attackby(obj/item/W, mob/user, params) return hold.attackby(W, user, params) /obj/item/clothing/accessory/storage/emp_act(severity) @@ -47,7 +50,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) ..() @@ -65,7 +68,7 @@ L += G.gift:return_inv() return L -/obj/item/clothing/accessory/storage/attack_self(mob/user as mob) +/obj/item/clothing/accessory/storage/attack_self(mob/user) if(has_suit) //if we are part of a suit hold.open(user) else @@ -112,8 +115,8 @@ item_color = "unathiharness2" slots = 2 -/obj/item/clothing/accessory/storage/knifeharness/New() - ..() +/obj/item/clothing/accessory/storage/knifeharness/Initialize(mapload) + . = ..() hold.max_combined_w_class = 4 hold.can_hold = list(/obj/item/hatchet/unathiknife, /obj/item/kitchen/knife) diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 0ae953fd089..1db6254a7ea 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -3,14 +3,25 @@ dyeable = TRUE -/obj/item/clothing/under/color/random/New() - ..() - var/list/excluded = list(/obj/item/clothing/under/color/random, /obj/item/clothing/under/color/blackf, /obj/item/clothing/under/color/blue/dodgeball, /obj/item/clothing/under/color/orange/prison, /obj/item/clothing/under/color/red/dodgeball, /obj/item/clothing/under/color/red/jersey, /obj/item/clothing/under/color/blue/jersey) - var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - excluded) - name = initial(C.name) - icon_state = initial(C.icon_state) - item_state = initial(C.item_state) - item_color = initial(C.item_color) +/obj/item/clothing/under/color/random/Initialize(mapload) + . = ..() + + var/static/list/excluded = list( + /obj/item/clothing/under/color/random, + /obj/item/clothing/under/color/blackf, + /obj/item/clothing/under/color/blue/dodgeball, + /obj/item/clothing/under/color/orange/prison, + /obj/item/clothing/under/color/red/dodgeball, + /obj/item/clothing/under/color/red/jersey, + /obj/item/clothing/under/color/blue/jersey, + ) + var/static/list/allowed_colors = subtypesof(/obj/item/clothing/under/color) - excluded + var/obj/item/clothing/under/color/new_color = pick(allowed_colors) + name = initial(new_color.name) + icon_state = initial(new_color.icon_state) + item_state = initial(new_color.item_state) + item_color = initial(new_color.item_color) + /obj/item/clothing/under/color/black name = "black jumpsuit" diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 2943b71e246..35d60ac7847 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -314,6 +314,7 @@ icon_state = "barberf" item_state = "barberf" item_color = "barberf" + over_shoes = TRUE /obj/item/clothing/under/artist desc = "Formal uniform with buttons on a side" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 9ba82ef12e0..d3a5683cb02 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -1077,3 +1077,36 @@ AddComponent(/datum/component/spraycan_paintable) START_PROCESSING(SSobj, src) update_icon() + + +/obj/item/clothing/under/ussptracksuit_red + name = "red track suit" + desc = "A classic track suit. There is a small tag on the clothes that says \"Made in the USSP\"." + icon_state = "ussptracksuit_red" + item_state = "ussptracksuit_red" + item_color = "ussptracksuit_red" + + +/obj/item/clothing/under/ussptracksuit_blue + name = "blue track suit" + desc = "A classic track suit. There is a small tag on the clothes that says \"Made in the USSP\"." + icon_state = "ussptracksuit_blue" + item_state = "ussptracksuit_blue" + item_color = "ussptracksuit_blue" + + +/obj/item/clothing/under/ussptracksuit_black + name = "black track suit" + desc = "A classic track suit. There is a small tag on the clothes that says \"Made in the USSP\"." + icon_state = "ussptracksuit_black" + item_state = "ussptracksuit_black" + item_color = "ussptracksuit_black" + + +/obj/item/clothing/under/ussptracksuit_white + name = "white track suit" + desc = "A classic track suit. There is a small tag on the clothes that says \"Made in the USSP\"." + icon_state = "ussptracksuit_white" + item_state = "ussptracksuit_white" + item_color = "ussptracksuit_white" + diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 583efe231cb..c59d512f8b5 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -31,3 +31,19 @@ icon_state = "really_black_suit" item_state = "bl_suit" item_color = "black_suit" + +/obj/item/clothing/under/syndicate/blackops + name = "Black ops coverall" + desc = "Robust coverall made for covert oprations deep within enemy territory. Offers small protection to it's user due to durathread and kevlar inserts." + icon_state = "blackops" + item_state = "bops" + item_color = "bops" + armor = list("melee" = 15, "bullet" = 15, "laser" = 15,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 0) + +/obj/item/clothing/under/syndicate/blackops_civ + name = "Black ops coverall" + desc = "Nice looking coverall made out of cheap fabric, not suitible for real combat." + icon_state = "blackops" + item_state = "bops" + item_color = "bops" + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) diff --git a/code/modules/clothing/upgrade_modules/hardsuit_shield_module/hardsuit.dm b/code/modules/clothing/upgrade_modules/hardsuit_shield_module/hardsuit.dm index f31c73b380c..6b303697e3d 100644 --- a/code/modules/clothing/upgrade_modules/hardsuit_shield_module/hardsuit.dm +++ b/code/modules/clothing/upgrade_modules/hardsuit_shield_module/hardsuit.dm @@ -1,7 +1,7 @@ /obj/item/clothing/suit/space/hardsuit var/obj/item/hardsuit_shield/shield = null -/obj/item/clothing/suit/space/hardsuit/New() +/obj/item/clothing/suit/space/hardsuit/Initialize(mapload) . = ..() if(shield && ispath(shield)) shield = new shield(src) @@ -21,7 +21,7 @@ shield = new_shield shield.hardsuit = src to_chat(user, "You successfully install the shield upgrade into [src].") - return + /obj/item/clothing/suit/space/hardsuit/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(shield) diff --git a/code/modules/clothing/upgrade_modules/hardsuit_taser_proof_module/hardsuit.dm b/code/modules/clothing/upgrade_modules/hardsuit_taser_proof_module/hardsuit.dm index 73981f53808..bcb488973bc 100644 --- a/code/modules/clothing/upgrade_modules/hardsuit_taser_proof_module/hardsuit.dm +++ b/code/modules/clothing/upgrade_modules/hardsuit_taser_proof_module/hardsuit.dm @@ -1,7 +1,7 @@ /obj/item/clothing/suit/space/hardsuit var/obj/item/hardsuit_taser_proof/taser_proof = null -/obj/item/clothing/suit/space/hardsuit/New() +/obj/item/clothing/suit/space/hardsuit/Initialize(mapload) . = ..() if(taser_proof && ispath(taser_proof)) taser_proof = new taser_proof(src) diff --git a/code/modules/clothing/upgrade_modules/hardsuit_taser_proof_module/hardsuit_taser_proof.dm b/code/modules/clothing/upgrade_modules/hardsuit_taser_proof_module/hardsuit_taser_proof.dm index 50f481c7c1e..8c977b313e0 100644 --- a/code/modules/clothing/upgrade_modules/hardsuit_taser_proof_module/hardsuit_taser_proof.dm +++ b/code/modules/clothing/upgrade_modules/hardsuit_taser_proof_module/hardsuit_taser_proof.dm @@ -34,7 +34,7 @@ /obj/item/hardsuit_taser_proof/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(!hardsuit) return FALSE - if(!hardsuit.suittoggled) + if(!hardsuit.suit_adjusted) return FALSE var/obj/item/projectile/P = hitby if(P.shockbull) diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm index 7c0ea71d05f..c6cbdd4e6a3 100644 --- a/code/modules/crafting/guncrafting.dm +++ b/code/modules/crafting/guncrafting.dm @@ -38,7 +38,7 @@ /obj/item/weaponcrafting/ishotgunconstruction/attackby(var/obj/item/I, mob/user as mob, params) ..() - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) var/obj/item/weaponcrafting/ishotgunconstruction2/C = new(drop_location()) user.temporarily_remove_item_from_inventory(src) user.put_in_hands(C, ignore_anim = FALSE) diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index f26a7f733a3..e0e5d6e7292 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -1339,6 +1339,14 @@ /obj/item/toy/crayon/spraycan = 1) category = CAT_MISC +/datum/crafting_recipe/ntlockerpaint + name = "NT Special Mech Paintkit" + result = /obj/item/paintkit/lockermech_nt + time = 35 + reqs = list(/obj/item/stack/sheet/cardboard = 5, + /obj/item/toy/crayon/spraycan = 1) + category = CAT_MISC + /datum/crafting_recipe/stacklifter name = "The weight stacklifter" result = /obj/structure/weightmachine/stacklifter diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 023bb48b9ac..ddc42aa3ae2 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -76,21 +76,20 @@ playsound(src.loc, usesound, 20, 1) used = 1 - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/fluff/tattoo_gun/update_icon() - ..() - overlays.Cut() +/obj/item/fluff/tattoo_gun/update_overlays() + . = ..() if(!used) var/image/ink = image(src.icon, src, "ink_overlay") ink.icon += rgb(tattoo_r, tattoo_g, tattoo_b, 190) - overlays += ink + . += ink /obj/item/fluff/tattoo_gun/New() ..() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/fluff/tattoo_gun/elliot_cybernetic_tat desc = "A cheap plastic tattoo application pen.
    This one seems heavily used." @@ -314,17 +313,18 @@ var/obj/item/clothing/suit/armor/jacket = target jacket.icon_state = "desolate_coat_open" jacket.icon = 'icons/obj/custom_items.dmi' - jacket.ignore_suitadjust = 0 - jacket.suit_adjusted = 1 + jacket.ignore_suitadjust = FALSE + jacket.suit_adjusted = TRUE + jacket.update_icon(UPDATE_ICON_STATE) + jacket.update_equipped_item(update_buttons = FALSE) var/has_action = FALSE - for(var/datum/action/A in jacket.actions) - if(istype(A, /datum/action/item_action/openclose)) - has_action = TRUE + for(var/datum/action/item_action/openclose/action in jacket.actions) + action.UpdateButtonIcon() + has_action = TRUE if(!has_action) new /datum/action/item_action/openclose(jacket)//this actually works jacket.adjust_flavour = "unbutton" jacket.sprite_sheets = null - user.update_inv_wear_suit() qdel(src) /obj/item/fluff/fei_gasmask_kit //Fei Hazelwood: Tariq Yon-Dale @@ -953,29 +953,27 @@ "Neara" = 'icons/mob/clothing/species/monkey/suit.dmi', "Stok" = 'icons/mob/clothing/species/monkey/suit.dmi' ) - ignore_suitadjust = 0 actions_types = list(/datum/action/item_action/toggle) - suit_adjusted = 0 + suit_adjusted = FALSE + + +/obj/item/clothing/suit/storage/fluff/k3_webbing/update_icon_state() + var/base_icon_state = copytext(icon_state, 1, findtext(icon_state, "_on")) + var/base_item_state = copytext(item_state, 1, findtext(item_state, "_on")) + + icon_state = suit_adjusted ? base_icon_state : "[base_icon_state]_on" + item_state = suit_adjusted ? base_item_state : "[base_item_state]_on" + + +/obj/item/clothing/suit/storage/fluff/k3_webbing/adjustsuit(mob/user) + if(user.incapacitated()) + return + + update_icon(UPDATE_ICON_STATE) + update_equipped_item() + to_chat(user, "You turn the [src]'s lighting system [suit_adjusted ? "off" : "on"].") + suit_adjusted = !suit_adjusted -/obj/item/clothing/suit/storage/fluff/k3_webbing/adjustsuit(var/mob/user) - if(!user.incapacitated()) - var/flavour - if(suit_adjusted) - flavour = "off" - icon_state = copytext(icon_state, 1, findtext(icon_state, "_on")) - item_state = copytext(item_state, 1, findtext(item_state, "_on")) - suit_adjusted = 0 //Lights Off - else - flavour = "on" - icon_state += "_on" - item_state += "_on" - suit_adjusted = 1 //Lights On - - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - to_chat(user, "You turn the [src]'s lighting system [flavour].") - user.update_inv_wear_suit() /obj/item/clothing/suit/hooded/hoodie/fluff/xantholne // Xantholne: Meex Zwichsnicrur name = "stripped winter coat" @@ -1326,26 +1324,24 @@ flags = BLOCKHAIR flags_cover = HEADCOVERSEYES actions_types = list(/datum/action/item_action/toggle) - var/adjusted = 0 + var/adjusted = FALSE + /obj/item/clothing/head/fluff/chronx/ui_action_click() adjust() + +/obj/item/clothing/head/fluff/chronx/update_icon_state() + icon_state = adjusted ? initial(icon_state) : "[initial(icon_state)][adjusted ? "" : "_open"]" + item_state = adjusted ? initial(item_state) : "[initial(item_state)][adjusted ? "" : "_open"]" + + /obj/item/clothing/head/fluff/chronx/proc/adjust() - if(adjusted) - icon_state = initial(icon_state) - item_state = initial(item_state) - to_chat(usr, "You untransform \the [src].") - adjusted = 0 - else - icon_state += "_open" - item_state += "_open" - to_chat(usr, "You transform \the [src].") - adjusted = 1 - usr.update_inv_head() - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + update_icon(UPDATE_ICON_STATE) + update_equipped_item() + to_chat(usr, "You untransform [src].") + adjusted = !adjusted + /obj/item/clothing/suit/chaplain_hoodie/fluff/chronx //chronx100: Hughe O'Splash name = "Cthulhu's Robes" @@ -1420,6 +1416,12 @@ icon = 'icons/obj/custom_items.dmi' icon_state = "classic_witch" item_state = "classic_witch" + var/current_state + + +/obj/item/clothing/head/wizard/fluff/dreamy/update_icon_state() + icon_state = current_state ? current_state : initial(icon_state) + /obj/item/clothing/head/wizard/fluff/dreamy/attack_self(mob/user) var/list/options = list() @@ -1439,7 +1441,8 @@ var/choice = tgui_input_list(user, "To what form do you wish to Shapeshift this hat?", "Shapeshift Hat", options) if(choice && !user.stat && in_range(user, src)) - icon_state = options[choice] + current_state = options[choice] + update_icon(UPDATE_ICON_STATE) to_chat(user, "Your strange witch hat has now shapeshifted into it's [choice] form!") return 1 ..() @@ -1647,21 +1650,19 @@ species_restricted = list("Vox") - /obj/item/clothing/gloves/ring/fluff name = "fluff ring" desc = "Someone forgot to set this fluff item's description, notify a coder!" icon = 'icons/obj/custom_items.dmi' fluff_material = TRUE -/obj/item/clothing/gloves/ring/fluff/update_icon() +/obj/item/clothing/gloves/ring/fluff/update_icon_state() return -/obj/item/clothing/gloves/ring/fluff/attackby(obj/item/I as obj, mob/user as mob, params) +/obj/item/clothing/gloves/ring/fluff/attackby(obj/item/I, mob/user, params) return - /obj/item/clothing/gloves/ring/fluff/benjaminfallout //Benjaminfallout: Pretzel Brassheart name = "Pretzel's Ring" desc = "A small platinum ring with a large light blue diamond. Engraved inside the band are the words: 'To my lovely Pristine Princess. Forever yours, Savinien.'" diff --git a/code/modules/detective_work/footprints_and_rag.dm b/code/modules/detective_work/footprints_and_rag.dm index fe9b50547c1..06a7527061b 100644 --- a/code/modules/detective_work/footprints_and_rag.dm +++ b/code/modules/detective_work/footprints_and_rag.dm @@ -21,6 +21,7 @@ flags = NOBLUDGEON container_type = OPENCONTAINER has_lid = FALSE + blocks_emissive = EMISSIVE_BLOCK_GENERIC var/wipespeed = 30 /obj/item/reagent_containers/glass/rag/attack(atom/target as obj|turf|area, mob/user as mob , flag) diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm index 11c84e1a87e..f0891505652 100644 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ b/code/modules/detectivework/microscope/dnascanner.dm @@ -31,7 +31,7 @@ to_chat(user, "Вы вставляете \the [W] в ДНК анализатор.") user.drop_transfer_item_to_loc(W, src) swab = W - update_icon() + update_icon(UPDATE_ICON_STATE) return ..() @@ -41,21 +41,21 @@ to_chat(user, "Сканер пуст!") return add_fingerprint(user) - scanning = 1 - update_icon() + scanning = TRUE + update_icon(UPDATE_ICON_STATE) to_chat(user, "Сканер начинает с жужением анализировать содержимое пробирки \the [swab].") if(!do_after(user, 25, src) || !swab) to_chat(user, "Вы перестали анализировать \the [swab].") - scanning = 0 - update_icon() + scanning = FALSE + update_icon(UPDATE_ICON_STATE) return to_chat(user, "Печать отчета...") var/obj/item/paper/report = new(get_turf(src)) report.stamped = list(/obj/item/stamp) - report.overlays = list("paper_stamped") + report.stamp_overlays += "paper_stamped" report_num++ if(swab) @@ -73,8 +73,8 @@ report.info += "\nАнализируемый объект:
    [bloodswab.name]
    [bloodswab.desc]

    " + data report.forceMove(src.loc) report.update_icon() - scanning = 0 - update_icon() + scanning = FALSE + update_icon(UPDATE_ICON_STATE) return /obj/machinery/dnaforensics/proc/remove_sample(mob/living/remover) @@ -87,18 +87,18 @@ swab.forceMove_turf() remover.put_in_hands(swab, ignore_anim = FALSE) swab = null - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/machinery/dnaforensics/AltClick() remove_sample(usr) -/obj/machinery/dnaforensics/MouseDrop(atom/other) - if(usr == other) +/obj/machinery/dnaforensics/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(usr == over_object) remove_sample(usr) - else - return ..() + return FALSE + return ..() -/obj/machinery/dnaforensics/update_icon() +/obj/machinery/dnaforensics/update_icon_state() icon_state = "dnaopen" if(swab) icon_state = "dnaclosed" diff --git a/code/modules/detectivework/tools/sample_kits.dm b/code/modules/detectivework/tools/sample_kits.dm index fc97702a6c3..fe9ddba2c85 100644 --- a/code/modules/detectivework/tools/sample_kits.dm +++ b/code/modules/detectivework/tools/sample_kits.dm @@ -157,19 +157,19 @@ . = ..() -/obj/item/forensics/sample_kit/MouseDrop(atom/over) +/obj/item/forensics/sample_kit/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() if(!.) return FALSE var/mob/user = usr - if(istype(over, /obj/screen)) + if(istype(over_object, /obj/screen)) return FALSE if(loc != user || user.incapacitated() || !ishuman(user)) return FALSE - afterattack(over, user, TRUE) + afterattack(over_object, user, TRUE) return TRUE diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm index 0d0b1d317e6..17dd86af2a6 100644 --- a/code/modules/economy/Accounts.dm +++ b/code/modules/economy/Accounts.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(all_money_accounts) if(!R.stamped) R.stamped = new R.stamped += /obj/item/stamp - R.overlays += stampoverlay + R.stamp_overlays += stampoverlay R.stamps += "
    This paper has been stamped by the Accounts Database." //add the account diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index 2555ad08253..0f7aaa0a90b 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -39,7 +39,7 @@ icon = 'icons/obj/bureaucracy.dmi' icon_state = "paper_eftpos" -/obj/item/paper/check/update_icon() +/obj/item/paper/check/update_icon_state() return /obj/item/paper/check/AltClick(mob/user, obj/item/I) diff --git a/code/modules/economy/quests/_base_quests.dm b/code/modules/economy/quests/_base_quests.dm index 2a5a5e49757..7022f3a0dd6 100644 --- a/code/modules/economy/quests/_base_quests.dm +++ b/code/modules/economy/quests/_base_quests.dm @@ -36,6 +36,8 @@ var/order_time /// List of quest modificators var/list/modificators + /// How many times we add time for order + var/time_add_count = -1 /datum/cargo_quests_storage/proc/generate(easy_mode) if(!quest_difficulty) @@ -86,13 +88,18 @@ /datum/cargo_quests_storage/proc/after_activated() if(!fast_check_timer) return - var/timeleft = time_start + quest_time - world.time - deltimer(quest_check_timer) - quest_check_timer = addtimer(CALLBACK(SScargo_quests, TYPE_PROC_REF(/datum/controller/subsystem/cargo_quests, remove_quest), UID()), timeleft + 3 MINUTES, TIMER_STOPPABLE) + add_time() if(world.time - time_start - 0.4 * quest_time + 120 SECONDS >= 0) deltimer(fast_check_timer) fast_check_timer = addtimer(VARSET_CALLBACK(src, fast_failed, TRUE), 120 SECONDS, TIMER_STOPPABLE) +/datum/cargo_quests_storage/proc/add_time(time = 3 MINUTES) + var/timeleft = time_start + quest_time - world.time + deltimer(quest_check_timer) + quest_time += time + quest_check_timer = addtimer(CALLBACK(SScargo_quests, TYPE_PROC_REF(/datum/controller/subsystem/cargo_quests, remove_quest), UID()), timeleft + time, TIMER_STOPPABLE) + time_add_count++ + /datum/cargo_quests_storage/proc/check_quest_completion(obj/structure/bigDelivery/closet, failed_quest_length, mismatch_content, quest_len) var/new_reward = reward modificators = list() @@ -116,6 +123,9 @@ if(closet.cc_tag == customer.departament_name) customer.set_sale() + if(time_add_count) + new_reward -= time_add_count * reward * 0.1 + if(new_reward <= 0) new_reward = 1 @@ -161,4 +171,7 @@ /datum/cargo_quest/proc/after_check() return TRUE +/datum/cargo_quest/proc/completed_quest() + return TRUE + #undef MIN_PLAYERS_FOR_MIX diff --git a/code/modules/economy/quests/quest_console.dm b/code/modules/economy/quests/quest_console.dm index 046680b3ad8..17e213989c6 100644 --- a/code/modules/economy/quests/quest_console.dm +++ b/code/modules/economy/quests/quest_console.dm @@ -75,8 +75,6 @@ if(for_active_quests && !quest_storage.active) continue var/timeleft_sec = round((quest_storage.time_start + quest_storage.quest_time - world.time) / 10) - if(quest_storage.active) - timeleft_sec += 180 var/list/quests_items = list() for(var/datum/cargo_quest/cargo_quest as anything in quest_storage.current_quests) var/image_index = rand(1, length(cargo_quest.interface_icons)) @@ -156,6 +154,21 @@ print_order(quest) addtimer(VARSET_CALLBACK(src, print_delayed, FALSE), PRINT_COOLDOWN) + if("add_time") + var/datum/cargo_quests_storage/quest = locateUID(params["uid"]) + if(!istype(quest)) + return FALSE + var/obj/item/card/id/I = user.get_id_card() + if(!has_access(list(ACCESS_QM), TRUE, I ? I.GetAccess() : list()) && !user.can_admin_interact()) + to_chat(user, span_warning("Access Denied.")) + playsound(src, pick('sound/machines/button.ogg', 'sound/machines/button_alternate.ogg', 'sound/machines/button_meloboom.ogg'), 20) + return FALSE + if(quest.time_add_count > 4) + to_chat(user, span_warning("You've done that too many times already.")) + playsound(src, pick('sound/machines/button.ogg', 'sound/machines/button_alternate.ogg', 'sound/machines/button_meloboom.ogg'), 20) + return FALSE + quest.add_time() + if("buy_tech") if(hightech_recovery) to_chat(user, span_warning("The Centcom institutes are not ready to provide you with this technology yet.")) @@ -266,6 +279,9 @@ if(!complete) paper.info += "time expired (-100%)
    " phrases += pick_list(QUEST_NOTES_STRINGS, "not_complete_phrases") + else if(quest.time_add_count > 0) + paper.info += "shipment delay (-[10 * quest.time_add_count]%)
    " + else if(!length(modificators)) paper.info += "- none
    " paper.info += "
    Bonus:
    " @@ -274,9 +290,13 @@ phrases += pick_list(QUEST_NOTES_STRINGS, "fast_complete_phrases") else paper.info += "- none
    " - if(complete) + if(complete && !length(phrases)) phrases += pick_list(QUEST_NOTES_STRINGS, "good_complete_phrases") paper.info += "

    Total reward: [complete ? new_reward : "0"]
    " + if(modificators["quick_shipment"] && !modificators["departure_mismatch"]) + paper.info += "

    " + for(var/sale_category in quest.customer.cargo_sale) + paper.info += "You have received a [100 - quest.customer.cargo_sale[sale_category]*100]% discount on [sale_category] category in orders.
    " paper.info += "

    [pick(phrases)]
    " paper.info += "


    This paper has been stamped by the [station_name()]
    " var/obj/item/stamp/navcom/stamp = new() diff --git a/code/modules/economy/quests/reagents_quests.dm b/code/modules/economy/quests/reagents_quests.dm index 8133250e67c..9acb56afdbc 100644 --- a/code/modules/economy/quests/reagents_quests.dm +++ b/code/modules/economy/quests/reagents_quests.dm @@ -19,7 +19,8 @@ "thc" = list("volume" = 30, "reward" = 90), "fliptonium" = list("volume" = 10, "reward" = 90), "glycerol" = list("volume" = 30, "reward" = 110), - "weak_omnizine" = list("volume" = 30, "reward" = 45) + "weak_omnizine" = list("volume" = 30, "reward" = 45), + "super_hairgrownium" = list("volume" = 15, "reward" = 110), ) var/list/unique_reagents = list("strange_reagent" = list("volume" = 15, "reward" = 80), "fomepizole" = list("volume" = 20, "reward" = 60), @@ -100,6 +101,7 @@ "gibbfloats" = list("volume" = 30,"reward" = 40), "nuka_cola" = list("volume" = 30,"reward" = 60), "pumpkin_latte" = list("volume" = 30,"reward" = 40), + "zazafizzy" = list("volume" = 30, "reward" = 20) ) unique_reagents = list() diff --git a/code/modules/economy/quests/thing_quests.dm b/code/modules/economy/quests/thing_quests.dm index 96d8ae5888a..1f568bd52a0 100644 --- a/code/modules/economy/quests/thing_quests.dm +++ b/code/modules/economy/quests/thing_quests.dm @@ -70,32 +70,32 @@ /datum/cargo_quest/thing/xenobio quest_type_name = "Xenobiological extract" easy_items = list( - /obj/item/slime_extract/grey = 25, - /obj/item/slime_extract/orange = 60, - /obj/item/slime_extract/purple = 60, - /obj/item/slime_extract/blue = 60, - /obj/item/slime_extract/metal = 60, - /obj/item/slime_extract/yellow = 85, - /obj/item/slime_extract/darkblue = 85, - /obj/item/slime_extract/darkpurple = 85, - /obj/item/slime_extract/silver = 85, + /obj/item/slime_extract/grey = 45, + /obj/item/slime_extract/orange = 90, + /obj/item/slime_extract/purple = 90, + /obj/item/slime_extract/blue = 90, + /obj/item/slime_extract/metal = 90, + /obj/item/slime_extract/yellow = 115, + /obj/item/slime_extract/darkblue = 115, + /obj/item/slime_extract/darkpurple = 115, + /obj/item/slime_extract/silver = 115, ) normal_items = list( - /obj/item/slime_extract/bluespace = 115, - /obj/item/slime_extract/sepia = 115, - /obj/item/slime_extract/cerulean = 115, - /obj/item/slime_extract/pyrite = 115, - /obj/item/slime_extract/green = 145, - /obj/item/slime_extract/red = 145, - /obj/item/slime_extract/pink = 145, - /obj/item/slime_extract/gold = 145 + /obj/item/slime_extract/bluespace = 170, + /obj/item/slime_extract/sepia = 170, + /obj/item/slime_extract/cerulean = 170, + /obj/item/slime_extract/pyrite = 170, + /obj/item/slime_extract/green = 215, + /obj/item/slime_extract/red = 215, + /obj/item/slime_extract/pink = 215, + /obj/item/slime_extract/gold = 215 ) hard_items = list( - /obj/item/slime_extract/adamantine = 200, - /obj/item/slime_extract/oil = 200, - /obj/item/slime_extract/black = 200, - /obj/item/slime_extract/lightpink = 200, - /obj/item/slime_extract/rainbow = 270 + /obj/item/slime_extract/adamantine = 270, + /obj/item/slime_extract/oil = 270, + /obj/item/slime_extract/black = 270, + /obj/item/slime_extract/lightpink = 270, + /obj/item/slime_extract/rainbow = 300 ) difficultly_flags = (QUEST_DIFFICULTY_EASY|QUEST_DIFFICULTY_NORMAL|QUEST_DIFFICULTY_HARD) @@ -108,11 +108,14 @@ /obj/item/organ/internal/eyes/unathi = 170, /obj/item/organ/internal/eyes/nian = 170, /obj/item/organ/internal/liver/skrell = 170, + /obj/item/organ/internal/kidneys/grey = 175, + /obj/item/organ/internal/liver/kidan = 175, /obj/item/organ/internal/lungs/slime = 185, - /obj/item/organ/internal/heart/slime = 210, - /obj/item/organ/external/wing/nian = 210 ) hard_items = list( + /obj/item/organ/internal/liver/grey = 200, + /obj/item/organ/internal/heart/slime = 210, + /obj/item/organ/external/wing/nian = 210, /obj/item/organ/internal/liver/diona = 300, /obj/item/organ/internal/lungs/unathi/ash_walker = 325, /obj/item/organ/internal/lantern = 400 @@ -121,13 +124,14 @@ /obj/item/organ/internal/heart/cursed = 550, /obj/item/organ/internal/xenos/plasmavessel/hunter = 550, /obj/item/organ/internal/xenos/plasmavessel/drone = 550, - /obj/item/organ/internal/xenos/neurotoxin = 650, + /obj/item/organ/internal/xenos/neurotoxin/sentinel = 650, /obj/item/organ/internal/wryn/glands = 700, /obj/item/organ/internal/xenos/hivenode = 700, /obj/item/organ/internal/heart/plasmaman = 750, /obj/item/organ/internal/xenos/acidgland/sentinel = 750, /obj/item/organ/internal/xenos/acidgland/praetorian = 750, /obj/item/organ/internal/xenos/resinspinner = 750, + /obj/item/organ/internal/xenos/neurotoxin = 850, /obj/item/organ/internal/xenos/acidgland/queen = 900, /obj/item/organ/internal/xenos/plasmavessel/queen = 900 ) @@ -154,32 +158,43 @@ /obj/item/reagent_containers/food/snacks/vulpix/chilli = 60, /obj/item/reagent_containers/food/snacks/vulpix/cheese = 60, /obj/item/reagent_containers/food/snacks/vulpix = 60, + /obj/item/reagent_containers/food/snacks/monkeysdelight = 60, + /obj/item/reagent_containers/food/snacks/aesirsalad = 60, + /obj/item/reagent_containers/food/snacks/rofflewaffles = 60, + ) + + normal_items = list( /obj/item/reagent_containers/food/snacks/candy/jawbreaker = 70, + /obj/item/reagent_containers/food/snacks/weirdoliviersalad = 70, /obj/item/reagent_containers/food/snacks/doner_mushroom = 70, + /obj/item/reagent_containers/food/snacks/doner_vegan = 70, /obj/item/reagent_containers/food/snacks/tajaroni = 70, /obj/item/reagent_containers/food/snacks/boiledslimecore = 70, /obj/item/reagent_containers/food/snacks/sliceable/lizard = 70, + /obj/item/reagent_containers/food/snacks/shawarma = 70, /obj/item/reagent_containers/food/snacks/dionaroast = 80, /obj/item/reagent_containers/food/snacks/chawanmushi = 90, + /obj/item/reagent_containers/food/snacks/fruitcup = 90, /obj/item/reagent_containers/food/snacks/candy/cotton/bad_rainbow = 100, /obj/item/reagent_containers/food/snacks/candy/cotton/rainbow = 100, - /obj/item/reagent_containers/food/snacks/fried_vox = 100 + /obj/item/reagent_containers/food/snacks/fried_vox = 100, + /obj/item/reagent_containers/food/snacks/sliceable/bread/xeno = 110, ) - difficultly_flags = (QUEST_DIFFICULTY_EASY) + difficultly_flags = (QUEST_DIFFICULTY_EASY|QUEST_DIFFICULTY_NORMAL) /datum/cargo_quest/thing/miner quest_type_name = "Shaft Miner Loot" easy_items = list( - /obj/item/crusher_trophy/legion_skull = 50, + /obj/item/crusher_trophy/legion_skull = 60, /obj/item/crusher_trophy/watcher_wing = 50, /obj/item/gem/topaz = 60, /obj/item/gem/emerald = 60, /obj/item/gem/sapphire = 60, /obj/item/gem/ruby = 60, /obj/item/gem/fdiamond = 60, - /obj/item/crusher_trophy/goliath_tentacle = 80, - /obj/item/crusher_trophy/blaster_tubes/magma_wing = 100, - /obj/item/crusher_trophy/watcher_wing/ice_wing = 100, + /obj/item/crusher_trophy/goliath_tentacle = 95, + /obj/item/crusher_trophy/blaster_tubes/magma_wing = 110, + /obj/item/crusher_trophy/watcher_wing/ice_wing = 110, ) normal_items = list( /obj/item/gem/rupee = 130, @@ -214,23 +229,23 @@ var/static/list/unique_minerals = list(/obj/item/stack/sheet/bluespace_crystal, /obj/item/stack/sheet/mineral/bananium, /obj/item/stack/sheet/mineral/tranquillite) req_items = list(/obj/item/stack/sheet) easy_items = list( - /obj/item/stack/sheet/metal = list("reward" = 40, "amount" = 50), - /obj/item/stack/sheet/mineral/gold = list("reward" = 90, "amount" = 20), - /obj/item/stack/sheet/mineral/titanium = list("reward" = 70, "amount" = 30), - /obj/item/stack/sheet/mineral/uranium = list("reward" = 80, "amount" = 15), - /obj/item/stack/sheet/glass = list("reward" = 25, "amount" = 50), + /obj/item/stack/sheet/metal = list("reward" = 20, "amount" = 50), + /obj/item/stack/sheet/mineral/gold = list("reward" = 70, "amount" = 20), + /obj/item/stack/sheet/mineral/titanium = list("reward" = 60, "amount" = 30), + /obj/item/stack/sheet/mineral/uranium = list("reward" = 65, "amount" = 15), + /obj/item/stack/sheet/glass = list("reward" = 15, "amount" = 50), ) normal_items = list( - /obj/item/stack/sheet/mineral/diamond = list("reward" = 130, "amount" = 10), - /obj/item/stack/sheet/plasteel/lowplasma = list("reward" = 120, "amount" = 30), - /obj/item/stack/sheet/mineral/plasma = list("reward" = 150, "amount" = 40), - /obj/item/stack/sheet/mineral/silver = list("reward" = 100, "amount" = 25) + /obj/item/stack/sheet/mineral/diamond = list("reward" = 100, "amount" = 10), + /obj/item/stack/sheet/plasteel = list("reward" = 90, "amount" = 30), + /obj/item/stack/sheet/mineral/plasma = list("reward" = 120, "amount" = 40), + /obj/item/stack/sheet/mineral/silver = list("reward" = 90, "amount" = 25) ) hard_items = list( - /obj/item/stack/sheet/bluespace_crystal = list("reward" = 250, "amount" = 7), - /obj/item/stack/sheet/mineral/bananium = list("reward" = 370, "amount" = 4), - /obj/item/stack/sheet/mineral/tranquillite = list("reward" = 480, "amount" = 4), - /obj/item/stack/sheet/mineral/adamantine = list("reward" = 310, "amount" = 20) + /obj/item/stack/sheet/bluespace_crystal = list("reward" = 220, "amount" = 7), + /obj/item/stack/sheet/mineral/bananium = list("reward" = 340, "amount" = 4), + /obj/item/stack/sheet/mineral/tranquillite = list("reward" = 440, "amount" = 4), + /obj/item/stack/sheet/mineral/adamantine = list("reward" = 280, "amount" = 20) ) difficultly_flags = (QUEST_DIFFICULTY_EASY|QUEST_DIFFICULTY_NORMAL|QUEST_DIFFICULTY_HARD) @@ -259,6 +274,8 @@ if(generated_mineral in unique_minerals) difficult_list.Remove(generated_mineral) current_list = required_minerals.Copy() + if(unique_things) + difficult_list.Remove(generated_mineral) /datum/cargo_quest/thing/minerals/check_required_item(atom/movable/check_item) if(!length(required_minerals)) @@ -412,17 +429,20 @@ /datum/cargo_quest/thing/botanygenes/generate_goal(difficultly, request_obj, target_reward) - var/datum/plant_gene/generated_gene + var/list/difficult_list switch(difficultly) if(QUEST_DIFFICULTY_EASY) - generated_gene = pick(easy_items) - q_storage.reward += easy_items[generated_gene] + difficult_list = easy_items if(QUEST_DIFFICULTY_NORMAL) - generated_gene = pick(normal_items) - q_storage.reward += normal_items[generated_gene] + difficult_list = normal_items if(QUEST_DIFFICULTY_HARD) - generated_gene = pick(hard_items) - q_storage.reward += hard_items[generated_gene] + difficult_list = hard_items + + var/datum/plant_gene/generated_gene = pick(difficult_list) + + q_storage.reward += difficult_list[generated_gene] + if(unique_things) + difficult_list.Remove(generated_gene) required_genes += generated_gene current_list = required_genes.Copy() @@ -517,8 +537,19 @@ /datum/cargo_quest/thing/genes/generate_goal(difficultly, request_obj, target_reward) - var/generated_gene = pick(hard_items) - q_storage.reward += hard_items[generated_gene] + var/list/difficult_list + switch(difficultly) + if(QUEST_DIFFICULTY_EASY) + difficult_list = easy_items + if(QUEST_DIFFICULTY_NORMAL) + difficult_list = normal_items + if(QUEST_DIFFICULTY_HARD) + difficult_list = hard_items + + var/generated_gene = pick(difficult_list) + q_storage.reward += difficult_list[generated_gene] + if(unique_things) + difficult_list.Remove(generated_gene) for(var/block in GLOB.assigned_blocks) if(block == generated_gene) @@ -615,30 +646,34 @@ return length(required_symptoms) /datum/cargo_quest/thing/virus/generate_goal(difficultly, request_obj, target_reward) - var/datum/symptom/generated_symptom - + var/list/difficult_list switch(difficultly) if(QUEST_DIFFICULTY_EASY) - generated_symptom = pick(easy_items) - q_storage.reward += easy_items[generated_symptom] + difficult_list = easy_items if(QUEST_DIFFICULTY_NORMAL) - generated_symptom = pick(normal_items) - q_storage.reward += normal_items[generated_symptom] + difficult_list = normal_items if(QUEST_DIFFICULTY_HARD) - generated_symptom = pick(hard_items) - q_storage.reward += hard_items[generated_symptom] + difficult_list = hard_items + + if(QUEST_DIFFICULTY_VERY_HARD) + difficult_list = very_hard_items + + var/datum/symptom/generated_symptom = pick(difficult_list) + q_storage.reward += difficult_list[generated_symptom] + if(unique_things) + difficult_list.Remove(generated_symptom) required_symptoms += generated_symptom required_symptoms[generated_symptom] = REQUIRED_BLOOD_AMOUNT current_list = required_symptoms.Copy() - desc += "[capitalize(format_text(initial(generated_symptom.name)))]
    " + desc += "[capitalize(format_text(initial(generated_symptom.name)))], [REQUIRED_BLOOD_AMOUNT]u
    " /datum/cargo_quest/thing/virus/check_required_item(atom/movable/check_item) - if(!length(required_symptoms)) + if(!length(current_list)) return FALSE var/obj/item/reagent_containers/glass/beaker/vial/vial = check_item @@ -666,3 +701,85 @@ /datum/cargo_quest/thing/virus/after_check() . = TRUE current_list = required_symptoms.Copy() + +#undef REQUIRED_BLOOD_AMOUNT + +/datum/cargo_quest/thing/capsule + quest_type_name = "Mob in lazarus capsule" + interface_icons = list('icons/obj/mobcap.dmi') + interface_icon_states = list("mobcap3") + req_items = list(/obj/item/mobcapsule) + + var/list/required_mobs = list() + var/list/capsules + + normal_items = list( + /mob/living/simple_animal/hostile/asteroid/goliath/beast = 180, + /mob/living/simple_animal/hostile/asteroid/goldgrub = 120, + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 130, + /mob/living/simple_animal/hostile/asteroid/marrowweaver = 210, + ) + hard_items = list( + /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 450, + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing = 330, + /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/magmawing = 350, + /mob/living/simple_animal/hostile/asteroid/marrowweaver/frost = 350 + ) + difficultly_flags = (QUEST_DIFFICULTY_NORMAL|QUEST_DIFFICULTY_HARD) + +/datum/cargo_quest/thing/capsule/update_interface_icon() + return + +/datum/cargo_quest/thing/capsule/length_quest() + return length(required_mobs) + +/datum/cargo_quest/thing/capsule/generate_goal(difficultly, request_obj, target_reward) + var/list/difficult_list + switch(difficultly) + if(QUEST_DIFFICULTY_EASY) + difficult_list = easy_items + + if(QUEST_DIFFICULTY_NORMAL) + difficult_list = normal_items + + if(QUEST_DIFFICULTY_HARD) + difficult_list = hard_items + + if(QUEST_DIFFICULTY_VERY_HARD) + difficult_list = very_hard_items + + var/mob/generated_mob = pick(difficult_list) + q_storage.reward += difficult_list[generated_mob] + if(unique_things) + difficult_list.Remove(generated_mob) + + required_mobs += generated_mob + current_list = required_mobs.Copy() + + desc += "[capitalize(format_text(initial(generated_mob.name)))]
    " + +/datum/cargo_quest/thing/capsule/check_required_item(atom/movable/check_item) + + if(!length(current_list)) + return FALSE + + var/obj/item/mobcapsule/capsule = check_item + if(!capsule.captured) + return FALSE + var/mob/living/simple_animal/captured_mob = capsule.captured + + for(var/mobtype in current_list) + if(istype(captured_mob, mobtype)) + current_list.Remove(mobtype) + LAZYADD(capsules, capsule) + return TRUE + return FALSE + + +/datum/cargo_quest/thing/capsule/after_check() + . = TRUE + current_list = required_mobs.Copy() + +/datum/cargo_quest/thing/capsule/completed_quest() + if(length(capsules)) + QDEL_LIST(capsules) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index e6dce3240bb..a0ab1c3bc12 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -222,7 +222,7 @@ GLOBAL_LIST_EMPTY(event_last_fired) new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ревенант", /datum/event/revenant, 150), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Спавн свармеров", /datum/event/spawn_swarmer, 0, is_one_shot = TRUE), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Спавн морфа", /datum/event/spawn_morph, 40, list(ASSIGNMENT_SECURITY = 10), is_one_shot = TRUE), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Pulse Demon Infiltration", /datum/event/spawn_pulsedemon, 150, list(ASSIGNMENT_ENGINEER = 10), is_one_shot = TRUE), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Pulse Demon Infiltration", /datum/event/spawn_pulsedemon, 0), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Вспышка болезни", /datum/event/disease_outbreak, 0, list(ASSIGNMENT_MEDICAL = 150), TRUE), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Хедкрабы", /datum/event/headcrabs, 0, list(ASSIGNMENT_SECURITY = 20)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Сбой работы дверей", /datum/event/door_runtime, 50, list(ASSIGNMENT_ENGINEER = 25, ASSIGNMENT_AI = 150), TRUE), diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm index e47c5a98942..59d2caab707 100644 --- a/code/modules/fish/fish_items.dm +++ b/code/modules/fish/fish_items.dm @@ -131,7 +131,7 @@ force = 3 /obj/item/fish/shark/attackby(var/obj/item/O, var/mob/user as mob) - if(istype(O, /obj/item/wirecutters)) + if(O.tool_behaviour == TOOL_WIRECUTTER) to_chat(user, "You rip out the teeth of \the [src.name]!") new /obj/item/fish/toothless_shark(get_turf(src)) new /obj/item/shard/shark_teeth(get_turf(src)) diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm index 3de68fcce0c..c0a63fa2fda 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm @@ -20,7 +20,7 @@ var/list/datum/bottler_recipe/available_recipes var/list/acceptable_items var/list/containers = list("glass bottle" = 10, "plastic bottle" = 20, "metal can" = 25) - var/bottling = 0 + var/bottling = FALSE /obj/machinery/bottler/New() . = ..() @@ -275,7 +275,8 @@ containers[con_type]-- //select and process a recipe based on inserted ingredients visible_message("[src] hums as it processes the ingredients...") - bottling = 1 + bottling = TRUE + update_icon(UPDATE_ICON_STATE) var/datum/bottler_recipe/recipe_to_use = select_recipe() if(!recipe_to_use) //bad recipe, ruins the drink @@ -293,7 +294,8 @@ flick("bottler_on", src) spawn(45) resetSlots() - bottling = 0 + bottling = FALSE + update_icon(UPDATE_ICON_STATE) drink_container.forceMove(loc) updateUsrDialog() @@ -409,7 +411,7 @@ updateUsrDialog() return -/obj/machinery/bottler/update_icon() +/obj/machinery/bottler/update_icon_state() if(stat & BROKEN) icon_state = "bottler_broken" else if(bottling) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 56022e21541..0206b210962 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -78,10 +78,10 @@ else return -/obj/item/reagent_containers/food/drinks/MouseDrop(atom/over) //CHUG! CHUG! CHUG! - if(!iscarbon(over)) +/obj/item/reagent_containers/food/drinks/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) //CHUG! CHUG! CHUG! + if(!iscarbon(over_object)) return ..() - var/mob/living/carbon/chugger = over + var/mob/living/carbon/chugger = over_object if(!(container_type & DRAINABLE)) to_chat(chugger, "You need to open [src] first!") return @@ -301,11 +301,14 @@ possible_transfer_amounts = null volume = 10 + +/obj/item/reagent_containers/food/drinks/sillycup/update_icon_state() + icon_state = "water_cup[reagents.total_volume ? "" : "_e"]" + + /obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change() - if(reagents.total_volume) - icon_state = "water_cup" - else - icon_state = "water_cup_e" + update_icon(UPDATE_ICON_STATE) + //////////////////////////drinkingglass and shaker// //Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink @@ -398,3 +401,54 @@ /obj/item/reagent_containers/food/drinks/oilcan/full list_reagents = list("oil" = 100) + + +/obj/item/reagent_containers/food/drinks/zaza + name = "Cherry Zaza" + desc = "I possess Zaza!" + icon_state = "zaza_can" + item_state = "zaza_can" + volume = 80 + foodtype = SUGAR + container_type = NONE + list_reagents = list("zaza" = 80) + + +/obj/item/reagent_containers/food/drinks/zaza/on_reagent_change() + update_icon(UPDATE_OVERLAYS) + + +/obj/item/reagent_containers/food/drinks/zaza/update_overlays() + . = ..() + + if(reagents.total_volume) + var/image/filling = image('icons/obj/reagentfillings.dmi', "[icon_state]50") + + switch(round(reagents.total_volume)) + if(1 to 50) + filling.icon_state = "[icon_state]50" + if(51 to 60) + filling.icon_state = "[icon_state]60" + if(61 to 65) + filling.icon_state = "[icon_state]65" + if(66 to 70) + filling.icon_state = "[icon_state]70" + if(71 to 75) + filling.icon_state = "[icon_state]75" + if(76 to INFINITY) + filling.icon_state = "[icon_state]80" + filling.icon += mix_color_from_reagents(reagents.reagent_list) + . += filling + + if(!is_open_container()) + . += "zaza_lid" + + +/obj/item/reagent_containers/food/drinks/zaza/attack_self(mob/user) + if(!is_open_container()) + container_type |= OPENCONTAINER + to_chat(user, span_notice("You put the lid on [src].")) + else + to_chat(user, span_notice("You take the lid off [src].")) + container_type &= ~OPENCONTAINER + update_icon(UPDATE_OVERLAYS) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 35a8a2a1726..1ce01f36217 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -377,17 +377,37 @@ list_reagents = list() var/list/accelerants = list(/datum/reagent/consumable/ethanol,/datum/reagent/fuel,/datum/reagent/clf3,/datum/reagent/phlogiston, /datum/reagent/napalm,/datum/reagent/hellwater,/datum/reagent/plasma,/datum/reagent/plasma_dust) - var/active = 0 + var/active = FALSE + + +/obj/item/reagent_containers/food/drinks/bottle/molotov/update_desc(updates = ALL) + . = ..() + desc = initial(desc) + if(!isGlass) + desc += " You're not sure if making this out of a carton was the brightest idea." + + +/obj/item/reagent_containers/food/drinks/bottle/molotov/update_icon_state() + var/obj/item/reagent_containers/food/drinks/bottle/bottle = locate() in contents + if(bottle) + icon_state = bottle.icon_state + + +/obj/item/reagent_containers/food/drinks/bottle/molotov/update_overlays() + . = ..() + if(active) + . += GLOB.fire_overlay + /obj/item/reagent_containers/food/drinks/bottle/molotov/CheckParts(list/parts_list) ..() - var/obj/item/reagent_containers/food/drinks/bottle/B = locate() in contents - if(B) - icon_state = B.icon_state - B.reagents.copy_to(src, 100) - if(!B.isGlass) - desc += " You're not sure if making this out of a carton was the brightest idea." - isGlass = 0 + var/obj/item/reagent_containers/food/drinks/bottle/bottle = locate() in contents + if(bottle) + bottle.reagents.copy_to(src, 100) + if(!bottle.isGlass) + isGlass = FALSE + update_appearance(UPDATE_DESC|UPDATE_ICON) + /obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/target, datum/thrownthing/throwingdatum) var/firestarter = 0 @@ -402,6 +422,7 @@ new /obj/effect/hotspot(get_turf(target)) ..() + /obj/item/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params) if(is_hot(I) && !active) active = 1 @@ -426,11 +447,12 @@ A.fire_act() qdel(src) + /obj/item/reagent_containers/food/drinks/bottle/molotov/attack_self(mob/user) if(active) if(!isGlass) to_chat(user, "The flame's spread too far on it!") return to_chat(user, "You snuff out the flame on \the [src].") - overlays -= GLOB.fire_overlay - active = 0 + active = FALSE + update_icon(UPDATE_OVERLAYS) diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index 23763ddeef4..44859f6260a 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -185,7 +185,7 @@ name = "non-alcoholic beer" desc = "A favorite thing of all students and those who drive." icon_state = "alcoholfreebeercan" - list_reagents = list("alcohol_free_beer" = 30) + list_reagents = list("noalco_beer" = 30) /obj/item/reagent_containers/food/drinks/cans/adminbooze @@ -289,12 +289,13 @@ desc = "this shouldn't ever be spawned. shame on you" icon_state = "glass_bottle" + /obj/item/reagent_containers/food/drinks/cans/bottler/on_reagent_change() - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/cans/bottler/update_icon() - overlays.Cut() +/obj/item/reagent_containers/food/drinks/cans/bottler/update_overlays() + . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") @@ -313,7 +314,8 @@ filling.icon_state = "[icon_state]50" filling.icon += mix_color_from_reagents(reagents.reagent_list) - overlays += filling + . += filling + /obj/item/reagent_containers/food/drinks/cans/bottler/glass_bottle name = "glass bottle" diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index b57f6ce792a..59ecbf757de 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -46,22 +46,45 @@ reagents.clear_reagents() extinguish() -/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change() - overlays.Cut() - if(reagents.reagent_list.len) - var/datum/reagent/R = reagents.get_master_reagent() - name = R.drink_name - desc = R.drink_desc - if(R.drink_icon) - icon_state = R.drink_icon - else - var/image/I = image(icon, "glassoverlay") - I.color = mix_color_from_reagents(reagents.reagent_list) - overlays += I + +/obj/item/reagent_containers/food/drinks/drinkingglass/update_icon_state() + if(length(reagents.reagent_list)) + var/datum/reagent/check = reagents.get_master_reagent() + if(check.drink_icon) + icon_state = check.drink_icon + + +/obj/item/reagent_containers/food/drinks/drinkingglass/update_overlays() + . = ..() + if(length(reagents.reagent_list)) + var/datum/reagent/check = reagents.get_master_reagent() + if(!check.drink_icon) + . += mutable_appearance(icon, "glassoverlay", color = mix_color_from_reagents(reagents.reagent_list)) + else + icon_state = initial(icon_state) + + +/obj/item/reagent_containers/food/drinks/drinkingglass/update_name(updates) + . = ..() + if(length(reagents.reagent_list)) + var/datum/reagent/check = reagents.get_master_reagent() + name = check.drink_name else - icon_state = "glass_empty" - name = "glass" - desc = "Your standard drinking glass." + name = initial(name) + + +/obj/item/reagent_containers/food/drinks/drinkingglass/update_desc(updates) + . = ..() + if(length(reagents.reagent_list)) + var/datum/reagent/check = reagents.get_master_reagent() + desc = check.drink_desc + else + desc = initial(desc) + + +/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change() + update_appearance() + // for /obj/machinery/vending/sovietsoda /obj/item/reagent_containers/food/drinks/drinkingglass/soda diff --git a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm index af301de5e50..3a3aa6640dc 100644 --- a/code/modules/food_and_drinks/drinks/drinks/shotglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/shotglass.dm @@ -2,6 +2,7 @@ name = "shot glass" desc = "No glasses were shot in the making of this glass." icon_state = "shotglass" + custom_fire_overlay = "shotglass_fire" amount_per_transfer_from_this = 15 volume = 15 materials = list(MAT_GLASS=100) @@ -12,10 +13,21 @@ /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change() if(!isShotFlammable() && (resistance_flags & ON_FIRE)) extinguish() - update_icon() + update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/update_icon() - overlays.Cut() + +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/update_name() + . = ..() + if(reagents.total_volume) + name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future. + if(resistance_flags & ON_FIRE) + name = "flaming [name]" + else + name = "shot glass" + + +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/update_overlays() + . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1") @@ -28,14 +40,8 @@ if(80 to INFINITY) filling.icon_state = "[icon_state]12" filling.icon += mix_color_from_reagents(reagents.reagent_list) - overlays += filling - name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future. - if(resistance_flags & ON_FIRE) - cut_overlay(GLOB.fire_overlay, TRUE) - overlays += "shotglass_fire" - name = "flaming [name]" - else - name = "shot glass" + . += filling + /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/proc/clumsilyDrink(mob/living/carbon/human/user) //Clowns beware if(!(resistance_flags & ON_FIRE)) @@ -59,14 +65,14 @@ ..() set_light(light_intensity, null, light_color) visible_message("[src] begins to burn with a blue hue!") - update_icon() + update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/extinguish(silent = FALSE) ..() set_light(0) if(!silent) visible_message("The dancing flame on [src] dies out.") - update_icon() + update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/burn() //Let's override fire deleting the reagents inside the shot return @@ -96,7 +102,7 @@ extinguish() -/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user) +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/MouseDrop(mob/living/carbon/human/user, src_location, over_location, src_control, over_control, params) if(!ishuman(user)) return ..() diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 77f936b5956..17ecac08b11 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -304,20 +304,37 @@ reagents.trans_to(target, amount_per_transfer_from_this) qdel(src) -/obj/item/reagent_containers/food/condiment/pack/on_reagent_change() - if(reagents.reagent_list.len > 0) + +/obj/item/reagent_containers/food/condiment/pack/update_desc(updates = ALL) + . = ..() + if(length(reagents.reagent_list)) var/main_reagent = reagents.get_master_reagent_id() if(main_reagent in possible_states) var/list/temp_list = possible_states[main_reagent] - icon_state = temp_list[1] desc = temp_list[3] else - icon_state = "condi_mixed" desc = "A small condiment pack. The label says it contains [originalname]." else - icon_state = "condi_empty" desc = "A small condiment pack. It is empty." + +/obj/item/reagent_containers/food/condiment/pack/update_icon_state() + . = ..() + if(length(reagents.reagent_list)) + var/main_reagent = reagents.get_master_reagent_id() + if(main_reagent in possible_states) + var/list/temp_list = possible_states[main_reagent] + icon_state = temp_list[1] + else + icon_state = "condi_mixed" + else + icon_state = "condi_empty" + + +/obj/item/reagent_containers/food/condiment/pack/on_reagent_change() + update_appearance(UPDATE_DESC|UPDATE_ICON_STATE) + + //Ketchup /obj/item/reagent_containers/food/condiment/pack/ketchup name = "ketchup pack" diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index dcc622dc441..0feb40259e3 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -1,66 +1,47 @@ +/obj/item/proc/make_custom_food(obj/item/reagent_containers/food/snacks/snack, mob/user, custom_type) + . = TRUE + if(!istype(snack) || !user.can_unEquip(snack)) + return FALSE + + var/obj/item/reagent_containers/food/snacks/customizable/custom_snack = new custom_type(get_turf(src)) + custom_snack.add_ingredient(snack, user) + qdel(src) + + /obj/item/reagent_containers/food/snacks/breadslice/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - var/obj/item/reagent_containers/food/snacks/customizable/sandwich/S = new(get_turf(user)) - S.attackby(W,user, params) - qdel(src) - else - ..() + if(!make_custom_food(W, user, /obj/item/reagent_containers/food/snacks/customizable/sandwich)) + return ..() + /obj/item/reagent_containers/food/snacks/bun/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - var/obj/item/reagent_containers/food/snacks/customizable/burger/S = new(get_turf(user)) - S.attackby(W,user, params) - qdel(src) + if(!make_custom_food(W, user, /obj/item/reagent_containers/food/snacks/customizable/burger)) + return ..() + /obj/item/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - var/obj/item/reagent_containers/food/snacks/customizable/pizza/S = new(get_turf(user)) - S.attackby(W,user, params) - qdel(src) - else - ..() + if(!make_custom_food(W, user, /obj/item/reagent_containers/food/snacks/customizable/pizza)) + return ..() /obj/item/reagent_containers/food/snacks/boiledspaghetti/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - var/obj/item/reagent_containers/food/snacks/customizable/pasta/S = new(get_turf(user)) - S.attackby(W,user, params) - qdel(src) - else - ..() + if(!make_custom_food(W, user, /obj/item/reagent_containers/food/snacks/customizable/pasta)) + return ..() /obj/item/trash/plate/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - var/obj/item/reagent_containers/food/snacks/customizable/fullycustom/S = new(get_turf(user)) - S.attackby(W,user, params) - qdel(src) - else - ..() + if(!make_custom_food(W, user, /obj/item/reagent_containers/food/snacks/customizable/fullycustom)) + return ..() /obj/item/trash/bowl name = "bowl" desc = "An empty bowl. Put some food in it to start making a soup." - icon = 'icons/obj/food/food.dmi' + icon = 'icons/obj/food/custom.dmi' icon_state = "soup" -/obj/item/trash/bowl/attackby(obj/item/W, mob/user, params) - - if(istype(W, /obj/item/reagent_containers/food/snacks) && !(W.flags & NODROP)) - var/obj/item/reagent_containers/food/snacks/customizable/soup/S = new(get_turf(user)) - S.attackby(W,user, params) - qdel(src) - else - ..() - -/obj/item/reagent_containers/food/snacks/customizable/sandwich - name = "sandwich" - desc = "A sandwich! A timeless classic." - icon_state = "breadslice" - baseicon = "sandwichcustom" - basename = "sandwich" - toptype = new /obj/item/reagent_containers/food/snacks/breadslice() +/obj/item/trash/bowl/attackby(obj/item/W, mob/user, params) + if(!make_custom_food(W, user, /obj/item/reagent_containers/food/snacks/customizable/soup)) + return ..() /obj/item/reagent_containers/food/snacks/customizable @@ -71,24 +52,39 @@ var/baseicon = "sandwichcustom" var/basename = "sandwichcustom" bitesize = 4 - var/top = 1 //Do we have a top? - var/obj/item/toptype - var/snack_overlays = 1 //Do we stack? -// var/offsetstuff = 1 //Do we offset the overlays? - var/sandwich_limit = 40 - var/fullycustom = 0 + var/top = FALSE //Do we have a top? + /// The image of the top + var/image/top_image + var/snack_overlays = FALSE //Do we stack? + var/ingredient_limit = 40 + var/fullycustom = FALSE trash = /obj/item/trash/plate var/list/ingredients = list() list_reagents = list("nutriment" = 8) + +/obj/item/reagent_containers/food/snacks/customizable/Initialize(mapload) + . = ..() + if(top) + top_image = new(icon, "[baseicon]_top") + add_overlay(top_image) + if(snack_overlays) + layer = ABOVE_ALL_MOB_LAYER // all should see our monstrosity + +/obj/item/reagent_containers/food/snacks/customizable/sandwich + name = "sandwich" + desc = "A sandwich! A timeless classic." + icon_state = "breadslice" + baseicon = "sandwichcustom" + basename = "sandwich" + snack_overlays = TRUE + /obj/item/reagent_containers/food/snacks/customizable/pizza name = "personal pizza" desc = "A personalized pan pizza meant for only one person." icon_state = "personal_pizza" baseicon = "personal_pizza" basename = "personal pizza" - snack_overlays = 0 - top = 0 tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) /obj/item/reagent_containers/food/snacks/customizable/pasta @@ -97,17 +93,12 @@ icon_state = "pasta_bot" baseicon = "pasta_bot" basename = "pasta" - snack_overlays = 0 - top = 0 - /obj/item/reagent_containers/food/snacks/customizable/cook/bread name = "bread" desc = "Tasty bread." icon_state = "breadcustom" baseicon = "breadcustom" basename = "bread" - snack_overlays = 0 - top = 0 tastes = list("bread" = 10) /obj/item/reagent_containers/food/snacks/customizable/cook/pie @@ -116,8 +107,6 @@ icon_state = "piecustom" baseicon = "piecustom" basename = "pie" - snack_overlays = 0 - top = 0 tastes = list("pie" = 1) /obj/item/reagent_containers/food/snacks/customizable/cook/cake @@ -126,8 +115,6 @@ icon_state = "cakecustom" baseicon = "cakecustom" basename = "cake" - snack_overlays = 0 - top = 0 tastes = list("cake" = 1) /obj/item/reagent_containers/food/snacks/customizable/cook/jelly @@ -136,8 +123,6 @@ icon_state = "jellycustom" baseicon = "jellycustom" basename = "jelly" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/cook/donkpocket name = "donk pocket" @@ -145,8 +130,6 @@ icon_state = "donkcustom" baseicon = "donkcustom" basename = "donk pocket" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/cook/kebab name = "kebab" @@ -154,8 +137,6 @@ icon_state = "kababcustom" baseicon = "kababcustom" basename = "kebab" - snack_overlays = 0 - top = 0 tastes = list("meat" = 3, "metal" = 1) /obj/item/reagent_containers/food/snacks/customizable/cook/salad @@ -164,8 +145,6 @@ icon_state = "saladcustom" baseicon = "saladcustom" basename = "salad" - snack_overlays = 0 - top = 0 tastes = list("leaves" = 1) /obj/item/reagent_containers/food/snacks/customizable/cook/waffles @@ -174,8 +153,6 @@ icon_state = "wafflecustom" baseicon = "wafflecustom" basename = "waffles" - snack_overlays = 0 - top = 0 tastes = list("waffles" = 1) /obj/item/reagent_containers/food/snacks/customizable/candy/cookie @@ -184,8 +161,6 @@ icon_state = "cookiecustom" baseicon = "cookiecustom" basename = "cookie" - snack_overlays = 0 - top = 0 tastes = list("cookie" = 1) /obj/item/reagent_containers/food/snacks/customizable/candy/cotton @@ -194,8 +169,6 @@ icon_state = "cottoncandycustom" baseicon = "cottoncandycustom" basename = "flavored cotton candy" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/gummybear name = "flavored giant gummy bear" @@ -203,8 +176,6 @@ icon_state = "gummybearcustom" baseicon = "gummybearcustom" basename = "flavored giant gummy bear" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/gummyworm name = "flavored giant gummy worm" @@ -212,8 +183,6 @@ icon_state = "gummywormcustom" baseicon = "gummywormcustom" basename = "flavored giant gummy worm" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/jellybean name = "flavored giant jelly bean" @@ -221,8 +190,6 @@ icon_state = "jellybeancustom" baseicon = "jellybeancustom" basename = "flavored giant jelly bean" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/jawbreaker name = "flavored jawbreaker" @@ -230,8 +197,6 @@ icon_state = "jawbreakercustom" baseicon = "jawbreakercustom" basename = "flavored jawbreaker" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/candycane name = "flavored candy cane" @@ -239,8 +204,6 @@ icon_state = "candycanecustom" baseicon = "candycanecustom" basename = "flavored candy cane" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/gum name = "flavored gum" @@ -248,8 +211,6 @@ icon_state = "gumcustom" baseicon = "gumcustom" basename = "flavored gum" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/donut name = "filled donut" @@ -257,8 +218,6 @@ icon_state = "donutcustom" baseicon = "donutcustom" basename = "filled donut" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/bar name = "flavored chocolate bar" @@ -266,8 +225,6 @@ icon_state = "barcustom" baseicon = "barcustom" basename = "flavored chocolate bar" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/sucker name = "flavored sucker" @@ -275,8 +232,6 @@ icon_state = "suckercustom" baseicon = "suckercustom" basename = "flavored sucker" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/cash name = "flavored chocolate cash" @@ -284,8 +239,6 @@ icon_state = "cashcustom" baseicon = "cashcustom" basename = "flavored cash" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/candy/coin name = "flavored chocolate coin" @@ -293,8 +246,6 @@ icon_state = "coincustom" baseicon = "coincustom" basename = "flavored coin" - snack_overlays = 0 - top = 0 /obj/item/reagent_containers/food/snacks/customizable/fullycustom // In the event you fuckers find something I forgot to add a customizable food for. name = "on a plate" @@ -302,10 +253,8 @@ icon_state = "fullycustom" baseicon = "fullycustom" basename = "on a plate" - snack_overlays = 0 - top = 0 - sandwich_limit = 20 - fullycustom = 1 + ingredient_limit = 20 + fullycustom = TRUE /obj/item/reagent_containers/food/snacks/customizable/soup name = "soup" @@ -313,9 +262,7 @@ icon_state = "soup" baseicon = "soup" basename = "soup" - snack_overlays = 0 trash = /obj/item/trash/bowl - top = 0 tastes = list("soup" = 1) /obj/item/reagent_containers/food/snacks/customizable/burger @@ -324,73 +271,106 @@ icon_state = "burger" baseicon = "burgercustom" basename = "burger" - toptype = new /obj/item/reagent_containers/food/snacks/bun() + top = TRUE + snack_overlays = TRUE tastes = list("bun" = 4) + +/obj/item/reagent_containers/food/snacks/customizable/Destroy() + QDEL_LIST(ingredients) + return ..() + + +/obj/item/reagent_containers/food/snacks/customizable/examine(mob/user) + . = ..() + if(LAZYLEN(ingredients)) + var/whatsinside = pick(ingredients) + . += span_notice("You think you can see [whatsinside] in there.") + + /obj/item/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user, params) - if(contents.len > sandwich_limit) - to_chat(user, "If you put anything else in or on [src] it's going to make a mess.") - return if(!istype(I, /obj/item/reagent_containers/food/snacks)) - to_chat(user, "\The [I] isn't exactly something that you would want to eat.") - return - to_chat(user, "You add [I] to [src].") - if(istype(I, /obj/item/reagent_containers/)) - var/obj/item/reagent_containers/F = I - F.reagents.trans_to(src, F.reagents.total_volume) - if(istype(I, /obj/item/reagent_containers/food/snacks/customizable)) - var/obj/item/reagent_containers/food/snacks/customizable/origin = I - ingredients += origin.ingredients - foodtype |= origin.foodtype - user.drop_transfer_item_to_loc(I, src) - cooktype[basename] = 1 - if(!istype(I, toptype)) - ingredients += I - updateicon() + to_chat(user, span_warning("[I] isn't exactly something that you would want to eat.")) + return ..() + + if(!user.can_unEquip(I)) + return ..() + + if(!add_ingredient(I, user)) + return ..() + + +/** + * Tries to add one ingredient and it's ingredients, if any and applicable, to this snack + * + * Arguments: + * * snack - The ingredient that will be added + * * user - chef + */ +/obj/item/reagent_containers/food/snacks/customizable/proc/add_ingredient(obj/item/reagent_containers/food/snacks/snack, mob/user) + . = FALSE + + if(length(ingredients) > ingredient_limit) + to_chat(user, span_warning("If you put anything else in or on [src] it's going to make a mess.")) + return . + + // Fully custom snacks don't add the ingredients. So no need to check + var/fullycustom_check = !fullycustom && istype(snack, /obj/item/reagent_containers/food/snacks/customizable) + if(fullycustom_check) + var/obj/item/reagent_containers/food/snacks/customizable/origin = snack + if(length(ingredients) + length(origin.ingredients) > ingredient_limit) + to_chat(user, span_warning("Merging [snack] and [src] together is going to make a mess.")) + return . + + . = TRUE + + to_chat(user, span_notice("You add [snack] to [src].")) + user.drop_transfer_item_to_loc(snack, src) + snack.reagents.trans_to(src, snack.reagents.total_volume) + + var/list/added_ingredients = list(snack) + + // Only merge when it is not fullycustom. Else it looks weird + if(fullycustom_check) + var/obj/item/reagent_containers/food/snacks/customizable/origin = snack + added_ingredients += origin.ingredients + origin.ingredients.Cut() + origin.name = initial(origin.name) // Reset the name for the examine text + + cooktype[basename] = TRUE + add_ingredients(added_ingredients) name = newname() -/obj/item/reagent_containers/food/snacks/customizable/proc/updateicon() - overlays = 0 - var/i=0 - for(var/obj/item/O in ingredients) - i++ +/obj/item/reagent_containers/food/snacks/customizable/proc/add_ingredients(list/new_ingredients) + cut_overlay(top_image) // Remove the top image so we can change it again + + var/ingredient_num = length(ingredients) + ingredients += new_ingredients + for(var/obj/item/reagent_containers/food/snacks/food as anything in new_ingredients) + ingredient_num++ + var/image/ingredient_image if(!fullycustom) - var/image/I = new(icon, "[baseicon]_filling") - if(istype(O, /obj/item/reagent_containers/food/snacks)) - var/obj/item/reagent_containers/food/snacks/food = O - if(!food.filling_color == "#FFFFFF") - I.color = food.filling_color - else - I.color = pick("#FF0000","#0000FF","#008000","#FFFF00") + ingredient_image = new(icon, "[baseicon]_filling") + if(!food.filling_color == "#FFFFFF") + ingredient_image.color = food.filling_color else - I.color = pick("#FF0000","#0000FF","#008000","#FFFF00") + ingredient_image.color = pick("#FF0000", "#0000FF", "#008000", "#FFFF00") if(snack_overlays) - I.pixel_x = pick(list(-1,0,1)) - I.pixel_y = (i*2)+1 - overlays += I + ingredient_image.pixel_x = rand(2) - 1 + ingredient_image.pixel_y = ingredient_num * 2 + 1 else - var/image/F = new(O.icon, O.icon_state) - F.pixel_x = pick(list(-1,0,1)) - F.pixel_y = pick(list(-1,0,1)) - overlays += F - overlays += O.overlays + ingredient_image = new(food.icon, food.icon_state) + ingredient_image.pixel_x = rand(2) - 1 + ingredient_image.pixel_y = rand(2) - 1 + add_overlay(food.overlays) - if(top) - var/image/T = new(icon, "[baseicon]_top") - T.pixel_x = pick(list(-1,0,1)) - T.pixel_y = (ingredients.len * 2)+1 - overlays += T - -/obj/item/reagent_containers/food/snacks/customizable/Destroy() - QDEL_LIST(ingredients) - return ..() + add_overlay(ingredient_image) -/obj/item/reagent_containers/food/snacks/customizable/examine(mob/user) - . = ..() - if(LAZYLEN(ingredients)) - var/whatsinside = pick(ingredients) - . += " You think you can see [whatsinside] in there." + if(top_image) + top_image.pixel_x = rand(2) - 1 + top_image.pixel_y = ingredient_num * 2 + 1 + add_overlay(top_image) /obj/item/reagent_containers/food/snacks/customizable/proc/newname() @@ -473,6 +453,7 @@ sendback = "[pick(list("absurd","colossal","enormous","ridiculous","massive","oversized","cardiac-arresting","pipe-clogging","edible but sickening","sickening","gargantuan","mega","belly-burster","chest-burster"))] [basename]" return sendback + /obj/item/reagent_containers/food/snacks/customizable/proc/sortlist(list/unsorted, highest) var/sorted[0] for(var/i = 1, i<= highest, i++) @@ -480,3 +461,4 @@ if(unsorted[it] == i) sorted[it] = i return sorted + diff --git a/code/modules/food_and_drinks/food/foods/baked_goods.dm b/code/modules/food_and_drinks/food/foods/baked_goods.dm index 0ed47a2cfdc..df437c75618 100644 --- a/code/modules/food_and_drinks/food/foods/baked_goods.dm +++ b/code/modules/food_and_drinks/food/foods/baked_goods.dm @@ -387,6 +387,81 @@ tastes = list("pie" = 1, "meat" = 1) foodtype = GRAIN | MEAT +/obj/item/reagent_containers/food/snacks/meatpie/human + list_reagents = list("nutriment" = 9, "protein" = 3) + tastes = list("pie" = 2, "salty meat" = 1, "human meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/vulpkanin + list_reagents = list("nutriment" = 7, "protein" = 5) + tastes = list("pie" = 2, "salty meat" = 2, "vulpkanin meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/tajaran + list_reagents = list("nutriment" = 9, "protein" = 3) + tastes = list("pie" = 2, "salty meat" = 1, "tajaran meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/unathi + list_reagents = list("nutriment" = 8, "protein" = 3, "zessulblood" = 1) + tastes = list("pie" = 2, "chiken meat" = 1, "unathi meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/drask + list_reagents = list("nutriment" = 7, "protein" = 3, "ice" = 2) + tastes = list("pie" = 2, "salty meat" = 1, "drask meat odor" = 1, "ice" = 2) + +/obj/item/reagent_containers/food/snacks/meatpie/grey + list_reagents = list("nutriment" = 9, "protein" = 2, "mannitol" = 1) + tastes = list("pie" = 2, "salty meat" = 1, "grey meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/skrell + list_reagents = list("nutriment" = 9, "protein" = 2, "water" = 1) + tastes = list("pie" = 2, "watery meat" = 1, "skrell meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/vox + list_reagents = list("nutriment" = 8, "protein" = 3, "toxin" = 1) + tastes = list("pie" = 2, "chiken meat" = 1, "vox meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/slime + list_reagents = list("sugar" = 4, "slimejelly" = 8) + tastes = list("pie" = 2, "sweet jelly" = 1, "slime meat odor" = 1) + foodtype = GRAIN | MEAT | SUGAR + +/obj/item/reagent_containers/food/snacks/meatpie/wryn + list_reagents = list("nutriment" = 8, "protein" = 1, "sugar" = 3) + tastes = list("pie" = 2, "sweet meat" = 1, "wryn meat odor" = 1) + foodtype = GRAIN | MEAT | SUGAR + +/obj/item/reagent_containers/food/snacks/meatpie/kidan + list_reagents = list("nutriment" = 8, "protein" = 3, "blood" = 1) + tastes = list("pie" = 2, "bug meat odor" = 1, "kidan meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/nian + list_reagents = list("nutriment" = 8, "protein" = 1, "phosphorus" = 3) + tastes = list("pie" = 2, "bug meat odor" = 1, "nian meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/diona + list_reagents = list("plantmatter" = 5, "protein" = 3) + tastes = list("pie" = 2, "vegetables" = 1, "stik" = 1, "diona odor" = 1) + foodtype = GRAIN | VEGETABLES + +/obj/item/reagent_containers/food/snacks/meatpie/monkey + list_reagents = list("nutriment" = 5, "protein" = 3) + tastes = list("pie" = 2, "salty meat" = 1, "monkey meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/farwa + list_reagents = list("nutriment" = 5, "protein" = 1) + tastes = list("pie" = 2, "salty meat" = 1, "farwa meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/wolpin + list_reagents = list("nutriment" = 5, "protein" = 3) + tastes = list("pie" = 2, "salty meat" = 1, "wolpin meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/neara + list_reagents = list("nutriment" = 5, "protein" = 1, "water" = 2) + tastes = list("pie" = 2, "watery meat" = 1, "neara meat odor" = 1) + +/obj/item/reagent_containers/food/snacks/meatpie/stok + list_reagents = list("nutriment" = 5, "protein" = 2, "zessulblood" = 1) + tastes = list("pie" = 2, "salty meat" = 1, "chiken meat" = 1, "stok meat odor" = 1) + /obj/item/reagent_containers/food/snacks/tofupie name = "tofu-pie" icon_state = "meatpie" @@ -525,7 +600,7 @@ filling_color = "#FF69B4" . = ..() -/obj/item/reagent_containers/food/snacks/donut/update_icon() +/obj/item/reagent_containers/food/snacks/donut/update_icon_state() return /obj/item/reagent_containers/food/snacks/donut/sprinkles diff --git a/code/modules/food_and_drinks/food/foods/desserts.dm b/code/modules/food_and_drinks/food/foods/desserts.dm index fc340b29b7f..8d455df01a3 100644 --- a/code/modules/food_and_drinks/food/foods/desserts.dm +++ b/code/modules/food_and_drinks/food/foods/desserts.dm @@ -13,11 +13,9 @@ tastes = list("ice cream" = 1) foodtype = SUGAR | DAIRY -/obj/item/reagent_containers/food/snacks/icecream/update_icon() - cut_overlays() - var/mutable_appearance/filling = mutable_appearance('icons/obj/kitchen.dmi', "icecream_color") - filling.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(filling) +/obj/item/reagent_containers/food/snacks/icecream/update_overlays() + . = ..() + . += mutable_appearance('icons/obj/kitchen.dmi', "icecream_color", color = mix_color_from_reagents(reagents.reagent_list)) /obj/item/reagent_containers/food/snacks/icecream/icecreamcone name = "ice cream cone" diff --git a/code/modules/food_and_drinks/food/foods/ingredients.dm b/code/modules/food_and_drinks/food/foods/ingredients.dm index eaedc39227f..38512905943 100644 --- a/code/modules/food_and_drinks/food/foods/ingredients.dm +++ b/code/modules/food_and_drinks/food/foods/ingredients.dm @@ -100,6 +100,16 @@ tastes = list("cucumber" = 1) foodtype = VEGETABLES +/obj/item/reagent_containers/food/snacks/cucumberslice/attackby(obj/item/thing, mob/user, params) + if(istype(thing, src) && thing != src && loc == user) + var/obj/item/clothing/glasses/sunglasses/blindfold/cucumbermask/new_thing = new(loc) + user.temporarily_remove_item_from_inventory(src, force = TRUE) + user.temporarily_remove_item_from_inventory(thing, force = TRUE) + user.put_in_hands(new_thing) + qdel(src) + qdel(thing) + ..() + /obj/item/reagent_containers/food/snacks/watermelonslice name = "watermelon slice" desc = "A slice of watery goodness." @@ -188,7 +198,7 @@ tastes = list("dough" = 1, "sugar" = 1) foodtype = GRAIN | SUGAR -/obj/item/reagent_containers/food/snacks/cookiedough/update_icon() +/obj/item/reagent_containers/food/snacks/cookiedough/update_icon_state() if(flat) icon_state = "cookiedough_flat" name = "flat pastry dough" @@ -196,7 +206,6 @@ icon_state = "cookiedough" - // Dough + rolling pin = flat cookie dough // Flat dough + circular cutter = unbaked cookies /obj/item/reagent_containers/food/snacks/cookiedough/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/kitchen/rollingpin) && !flat) diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 39bc68ff36c..63cbae2dea6 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -27,12 +27,191 @@ name = "synthetic meat" desc = "A synthetic slab of flesh." -/obj/item/reagent_containers/food/snacks/meat/human - name = "-meat" +/obj/item/reagent_containers/food/snacks/meat/humanoid + name = "humanoid meat" var/subjectname = "" var/subjectjob = null tastes = list("salty meat" = 1) +/obj/item/reagent_containers/food/snacks/meat/humanoid/Initialize(mapload, mob/living/carbon/human/victim) + . = ..() + if(victim) + subjectname = victim.real_name + subjectjob = victim.job + victim.reagents.trans_to(src, (victim.reagents.total_volume) / victim.meatleft) + transfer_mob_blood_dna(victim) + + if(!isplasmaman(victim) && !ismachineperson(victim)) + reagents.add_reagent("nutriment", (victim.nutrition / 15) / initial(victim.meatleft)) + +/obj/item/reagent_containers/food/snacks/meat/humanoid/human + name = "human meat" + tastes = list("salty meat" = 1) + +/obj/item/reagent_containers/food/snacks/meat/humanoid/vulpkanin + name = "vulpkanin meat" + tastes = list("salty meat" = 1) + list_reagents = list("protein" = 5) + icon_state = "meat_vulp" + filling_color = "#850808" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/tajaran + name = "tajaran meat" + tastes = list("salty meat" = 1) + list_reagents = list("protein" = 3) + icon_state = "meat_tajara" + filling_color = "#df1919" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/unathi + name = "unathi meat" + tastes = list("chiken meat" = 1) + list_reagents = list("protein" = 3, "zessulblood" = 2) + icon_state = "meat_unathi" + filling_color = "#850808" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/drask + name = "drask meat" + tastes = list("icy meat" = 1) + list_reagents = list("protein" = 3, "ice" = 10) + icon_state = "meat_drask" + filling_color = "#329983" + bitesize = 5 + var/type1 = "meat_drask" + var/type2 = "meat_drask2" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/drask/New() + ..() + icon_state = pick(type1, type2) + +/obj/item/reagent_containers/food/snacks/meat/humanoid/grey + name = "grey meat" + tastes = list("salty meat" = 1) + list_reagents = list("protein" = 2, "mannitol" = 2) + icon_state = "meat_grey" + filling_color = "#8d17a5" + var/type1 = "meat_grey" + var/type2 = "meat_grey2" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/grey/New() + ..() + icon_state = pick(type1, type2) + +/obj/item/reagent_containers/food/snacks/meat/humanoid/skrell + name = "skrell meat" + tastes = list("watery meat" = 1) + list_reagents = list("protein" = 3, "water" = 20) + icon_state = "meat_skrell" + filling_color = "#4d17a5" + bitesize = 10 + +/obj/item/reagent_containers/food/snacks/meat/humanoid/vox + name = "vox meat" + tastes = list("chiken meat" = 1) + list_reagents = list("protein" = 3, "toxin" = 1) + icon_state = "meat_vox" + filling_color = "#0c5ac0" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/slime + name = "slime jelly" + tastes = list("sweet jelly" = 1) + list_reagents = list("sugar" = 5, "slimejelly" = 10) + icon_state = "meat_slime" + filling_color = "#11a0cc" + bitesize = 5 + +/obj/item/reagent_containers/food/snacks/meat/humanoid/wryn + name = "wryn meat" + tastes = list("sweet meat" = 1) + list_reagents = list("protein" = 1, "sugar" = 5) + icon_state = "meat_wryn" + filling_color = "#d1be0d" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/kidan + name = "kidan meat" + tastes = list("bug meat" = 1) + list_reagents = list("protein" = 2, "blood" = 1) + icon_state = "meat_kidan" + filling_color = "#db9808" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/nian + name = "nian meat" + tastes = list("bug meat" = 1) + list_reagents = list("protein" = 2, "phosphorus" = 5) + icon_state = "meat_nian" + filling_color = "#866929" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/diona + name = "diona branch" + tastes = list("crunchy green" = 1) + list_reagents = list("plantmatter" = 5) + icon_state = "branch_diona" + filling_color = "#2d6102" + foodtype = VEGETABLES + +/obj/item/reagent_containers/food/snacks/meat/humanoid/nucleation + name = "nucleation remains" + tastes = list("radioactive dust" = 1) + list_reagents = list("radium" = 30) + icon_state = "dust_nucleation" + filling_color = "#edf5ac" + bitesize = 10 + foodtype = TOXIC + +/obj/item/reagent_containers/food/snacks/meat/humanoid/plasmaman + name = "plasmaman remains" + tastes = list("radioactive dust" = 1) + list_reagents = list("radium" = 10, "plasma" = 10) + icon_state = "dust_plasmaman" + filling_color = "#a502c5" + bitesize = 10 + foodtype = TOXIC + +/obj/item/reagent_containers/food/snacks/meat/humanoid/machine + name = "machine remains" + tastes = list("radioactive dust" = 1) + list_reagents = list("iron" = 3, "aluminum" = 2, "lithium" = 1, "mercury" = 2, "metalicdust" = 1) + icon_state = "dust_machine" + filling_color = "#403e41" + bitesize = 9 + foodtype = TOXIC + +/obj/item/reagent_containers/food/snacks/meat/humanoid/monkey + name = "monkey meat" + tastes = list("salty meat" = 1) + list_reagents = list("protein" = 2) + filling_color = "#FF1C1C" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/farwa + name = "farwa meat" + list_reagents = list("protein" = 1) + tastes = list("salty meat" = 1) + icon_state = "meat_tajara" + filling_color = "#df1919" + +/obj/item/reagent_containers/food/snacks/meat/humanoid/wolpin + name = "wolpin meat" + list_reagents = list("protein" = 3) + tastes = list("salty meat" = 1) + icon_state = "meat_vulp" + filling_color = "#850808" + bitesize = 2 + +/obj/item/reagent_containers/food/snacks/meat/humanoid/neara + name = "neara meat" + list_reagents = list("protein" = 2, "water" = 5) + tastes = list("watery meat" = 1) + icon_state = "meat_skrell" + filling_color = "#4d17a5" + bitesize = 4 + +/obj/item/reagent_containers/food/snacks/meat/humanoid/stok + name = "stok meat" + list_reagents = list("protein" = 2, "zessulblood" = 1) + tastes = list("chiken meat" = 1) + icon_state = "meat_unathi" + filling_color = "#850808" + bitesize = 2 + /obj/item/reagent_containers/food/snacks/meat/slab/meatproduct name = "meat product" desc = "A slab of reclaimed and chemically processed meat product." @@ -43,9 +222,6 @@ icon = 'icons/obj/food/food.dmi' icon_state = "birdmeat" -/obj/item/reagent_containers/food/snacks/meat/monkey - name = "lesser meat" - /obj/item/reagent_containers/food/snacks/meat/corgi name = "corgi meat" desc = "Tastes like the Head of Personnel's hopes and dreams" @@ -231,6 +407,103 @@ tastes = list("meat" = 1) foodtype = MEAT +/obj/item/reagent_containers/food/snacks/meatsteak/human + icon_state = "meatstake_human" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("human meat odor" = 1, "eggplant" = 1) + +/obj/item/reagent_containers/food/snacks/meatsteak/vulpkanin + icon_state = "meatstake_vulp" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("vulpkanin meat odor" = 1, "chanterelle" = 1, "lemon" = 1) + +/obj/item/reagent_containers/food/snacks/meatsteak/tajaran + icon_state = "meatstake_tajara" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("tajaran meat odor" = 1, "nettle" = 1, "soda water" = 1) + +/obj/item/reagent_containers/food/snacks/meatsteak/unathi + icon_state = "meatstake_unathi" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("unathi meat odor" = 1, "tomato" = 2, "harebell" = 1, "black pepper" = 2, "salt" = 2, "chiken" = 1) + +/obj/item/reagent_containers/food/snacks/meatsteak/drask + desc = "A piece of cold spicy meat." + icon_state = "meatstake_drask" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("drask meat odor" = 1, "garlic" = 1, "chili" = 2, "berries" = 2, "black pepper" = 2) + +/obj/item/reagent_containers/food/snacks/meatsteak/grey + icon_state = "meatstake_grey" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("grey meat odor" = 1, "garlic" = 1, "cabbage" = 1, "tomato" = 2, "salt" = 2) + +/obj/item/reagent_containers/food/snacks/meatsteak/skrell + icon_state = "meatstake_skrell" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("skrell meat odor" = 1, "banana" = 1, "tomato" = 1, "black pepper" = 2) + +/obj/item/reagent_containers/food/snacks/meatsteak/vox + icon_state = "meatstake_vox" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("vox meat odor" = 1, "garlic" = 1, "herbs" = 1, "chiken" = 1, "sweet potato" = 2) + +/obj/item/reagent_containers/food/snacks/meatsteak/slime + name = "grilled jelly" + desc = "A piece of hot spicy jelly." + icon_state = "meatstake_slime" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("slime meat odor" = 1, "garlic" = 1, "sugar" = 1, "herbs" = 1, "lemon" = 1, "ambrosia" = 1, "salt" = 2) + +/obj/item/reagent_containers/food/snacks/meatsteak/wryn + icon_state = "meatstake_wryn" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("wryn meat odor" = 1, "sweetness" = 1, "potato" = 2, "orange" = 1) + +/obj/item/reagent_containers/food/snacks/meatsteak/kidan + icon_state = "meatstake_kidan" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("kidan meat odor" = 1, "bug odor" = 1, "herbs" = 2, "olives" = 2, "salt" = 2) + +/obj/item/reagent_containers/food/snacks/meatsteak/nian + icon_state = "meatstake_nian" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("nian meat odor" = 1, "bug odor" = 1, "sweetness" = 1, "orange" = 1, "lemon" = 1, "herbs" = 1) + +/obj/item/reagent_containers/food/snacks/meatsteak/diona + name = "grilled vagetables" + desc = "Hot spicy asparagus." + filling_color = "#548100" + icon_state = "meatstake_diona" + list_reagents = list("plantmatter" = 4, "vitamins" = 5) + tastes = list("diona odor" = 1, "salt" = 2, "herbs" = 1, "garlic" = 1, "lemon" = 1) + foodtype = VEGETABLES + +/obj/item/reagent_containers/food/snacks/meatsteak/monkey + icon_state = "meatstake_monkey" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("monkey meat odor" = 1, "salt" = 2, "herbs" = 1, "lemon" = 1, "chili" = 2) + +/obj/item/reagent_containers/food/snacks/meatsteak/farwa + icon_state = "meatstake_farwa" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("farwa meat odor" = 1, "poppy" = 2, "grape" = 1) + +/obj/item/reagent_containers/food/snacks/meatsteak/wolpin + icon_state = "meatstake_wolpin" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("wolpin meat odor" = 1, "potato" = 1, "onion" = 2) + +/obj/item/reagent_containers/food/snacks/meatsteak/neara + icon_state = "meatstake_neara" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("neara meat odor" = 1, "lemon" = 1, "soy" = 2, "herbs" = 1) + +/obj/item/reagent_containers/food/snacks/meatsteak/stok + icon_state = "meatstake_stok" + list_reagents = list("nutriment" = 3, "vitamins" = 3, "protein" = 3) + tastes = list("stok meat odor" = 1, "chiken" = 1, "cucumber" = 2, "herbs" = 1, "orange" = 1) + /obj/item/reagent_containers/food/snacks/birdsteak name = "Chicken steak" desc = "A piece of hot light bird meat." diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index d80a1bc4399..0596630c63f 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -204,64 +204,70 @@ icon = 'icons/obj/food/pizza.dmi' icon_state = "pizzabox1" - var/open = 0 // Is the box open? - var/ismessy = 0 // Fancy mess on the lid + var/open = FALSE // Is the box open? + var/is_messy = FALSE // Fancy mess on the lid var/obj/item/reagent_containers/food/snacks/sliceable/pizza/pizza // Content pizza var/list/boxes = list() // If the boxes are stacked, they come here - var/boxtag = "" + var/box_tag = "" -/obj/item/pizzabox/update_icon() - overlays = list() - // Set appropriate description +/obj/item/pizzabox/Initialize(mapload) + . = ..() + update_appearance(UPDATE_DESC|UPDATE_ICON) + + +/obj/item/pizzabox/update_desc(updates = ALL) + . = ..() if(open && pizza) desc = "A box suited for pizzas. It appears to have a [pizza.name] inside." - else if(boxes.len > 0) - desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile." - var/obj/item/pizzabox/topbox = boxes[boxes.len] - var/toptag = topbox.boxtag - if(toptag != "") - desc = "[desc] The box on top has a tag, it reads: '[toptag]'." + else if(length(boxes)) + desc = "A pile of boxes suited for pizzas. There appears to be [length(boxes) + 1] boxes in the pile." + var/obj/item/pizzabox/top_box = boxes[length(boxes)] + var/top_tag = top_box.box_tag + if(top_tag != "") + desc = "[desc] The box on top has a tag, it reads: '[top_tag]'." else desc = "A box suited for pizzas." - if(boxtag != "") - desc = "[desc] The box has a tag, it reads: '[boxtag]'." + if(box_tag != "") + desc = "[desc] The box has a tag, it reads: '[box_tag]'." + - // Icon states and overlays +/obj/item/pizzabox/update_icon_state() if(open) - if(ismessy) + if(is_messy) icon_state = "pizzabox_messy" else icon_state = "pizzabox_open" - if(pizza) - var/image/pizzaimg = image("food/pizza.dmi", icon_state = pizza.icon_state) - pizzaimg.pixel_y = -3 - overlays += pizzaimg + return + icon_state = "pizzabox[length(boxes) + 1]" + +/obj/item/pizzabox/update_overlays() + . = ..() + if(open && pizza) + . += image("food/pizza.dmi", icon_state = pizza.icon_state, pixel_y = -3) return else // Stupid code because byondcode sucks - var/doimgtag = 0 - if(boxes.len > 0) - var/obj/item/pizzabox/topbox = boxes[boxes.len] - if(topbox.boxtag != "") - doimgtag = 1 + var/set_tag = TRUE + if(length(boxes)) + var/obj/item/pizzabox/top_box = boxes[length(boxes)] + if(top_box.box_tag != "") + set_tag = TRUE else - if(boxtag != "") - doimgtag = 1 - if(doimgtag) - var/image/tagimg = image("food/pizza.dmi", icon_state = "pizzabox_tag") - tagimg.pixel_y = boxes.len * 3 - overlays += tagimg - icon_state = "pizzabox[boxes.len+1]" + if(box_tag != "") + set_tag = TRUE + if(!open && set_tag) + . += image("food/pizza.dmi", icon_state = "pizzabox_tag", pixel_y = length(boxes) * 3) + /obj/item/pizzabox/attack_hand(mob/user) if(open && pizza) pizza.forceMove_turf() user.put_in_hands(pizza, ignore_anim = FALSE) - to_chat(user, "You take the [pizza] out of the [src].") + to_chat(user, span_warning("You take the [pizza] out of the [src].")) pizza = null - update_icon() + update_appearance(UPDATE_DESC|UPDATE_ICON) return if(boxes.len > 0) @@ -272,19 +278,21 @@ boxes -= box box.forceMove_turf() user.put_in_hands(box, ignore_anim = FALSE) - to_chat(user, "You remove the topmost [src] from your hand.") - box.update_icon() - update_icon() + to_chat(user, span_warning("You remove the topmost [src] from your hand.")) + box.update_appearance(UPDATE_DESC|UPDATE_ICON) + update_appearance(UPDATE_DESC|UPDATE_ICON) return ..() + /obj/item/pizzabox/attack_self(mob/user) - if(boxes.len > 0) + if(length(boxes)) return open = !open if(open && pizza) - ismessy = 1 - update_icon() + is_messy = TRUE + update_appearance(UPDATE_DESC|UPDATE_ICON) + /obj/item/pizzabox/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/pizzabox/)) @@ -295,17 +303,17 @@ boxestoadd += box for(var/obj/item/pizzabox/i in box.boxes) boxestoadd += i - if((boxes.len+1) + boxestoadd.len <= 5) + if((length(boxes) + 1) + length(boxestoadd) <= 5) user.drop_transfer_item_to_loc(box, src) box.boxes = list() // Clear the box boxes so we don't have boxes inside boxes. - Xzibit boxes.Add(boxestoadd) - box.update_icon() - update_icon() - to_chat(user, "You put the [box] ontop of the [src]!") + box.update_appearance(UPDATE_DESC|UPDATE_ICON) + update_appearance(UPDATE_DESC|UPDATE_ICON) + to_chat(user, span_warning("You put the [box] ontop of the [src]!")) else - to_chat(user, "The stack is too high!") + to_chat(user, span_warning("The stack is too high!")) else - to_chat(user, "Close the [box] first!") + to_chat(user, span_warning("Close the [box] first!")) return if(istype(I, /obj/item/reagent_containers/food/snacks/sliceable/pizza/)) // Long ass fucking object name @@ -313,46 +321,52 @@ user.drop_transfer_item_to_loc(I, src) pizza = I - update_icon() + update_appearance(UPDATE_DESC|UPDATE_ICON) - to_chat(user, "You put the [I] in the [src]!") + to_chat(user, span_warning("You put the [I] in the [src]!")) else - to_chat(user, "You try to push the [I] through the lid but it doesn't work!") + to_chat(user, span_warning("You try to push the [I] through the lid but it doesn't work!")) return - if(istype(I, /obj/item/pen/)) + if(is_pen(I)) if(open) return var/t = clean_input("Enter what you want to add to the tag:", "Write", null) var/obj/item/pizzabox/boxtotagto = src - if(boxes.len > 0) - boxtotagto = boxes[boxes.len] - boxtotagto.boxtag = copytext("[boxtotagto.boxtag][t]", 1, 30) - update_icon() + if(length(boxes)) + boxtotagto = boxes[length(boxes)] + boxtotagto.box_tag = copytext("[boxtotagto.box_tag][t]", 1, 30) + update_appearance(UPDATE_DESC|UPDATE_ICON) return ..() -/obj/item/pizzabox/margherita/New() - ..() + +/obj/item/pizzabox/margherita/Initialize(mapload) pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita(src) - boxtag = "margherita deluxe" + box_tag = "margherita deluxe" + . = ..() -/obj/item/pizzabox/vegetable/New() - ..() + +/obj/item/pizzabox/vegetable/Initialize(mapload) pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src) - boxtag = "gourmet vegetable" + box_tag = "gourmet vegetable" + . = ..() -/obj/item/pizzabox/mushroom/New() - ..() + +/obj/item/pizzabox/mushroom/Initialize(mapload) pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src) - boxtag = "mushroom special" + box_tag = "mushroom special" + . = ..() -/obj/item/pizzabox/meat/New() - ..() + +/obj/item/pizzabox/meat/Initialize(mapload) pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src) - boxtag = "meatlover's supreme" + box_tag = "meatlover's supreme" + . = ..() -/obj/item/pizzabox/hawaiian/New() - ..() + +/obj/item/pizzabox/hawaiian/Initialize(mapload) pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src) - boxtag = "Hawaiian feast" + box_tag = "Hawaiian feast" + . = ..() + diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index af7c17d09b3..f215d64c6ba 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -31,7 +31,7 @@ else ..() -/obj/item/reagent_containers/food/snacks/update_icon() +/obj/item/reagent_containers/food/snacks/update_icon_state() if(!opened) icon_state = "[initial(icon_state)]-closed" else @@ -59,7 +59,7 @@ if(!opened) opened = TRUE to_chat(user, "You open the [src].") - update_icon() + update_icon(UPDATE_ICON_STATE) return ..() else return diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 085a2c1cfef..05e28ead563 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -8,7 +8,7 @@ anchored = 1 var/operating = 0 //Is it on? var/dirty = 0 // Does it need cleaning? - var/mob/living/occupant // Mob who has been put inside + var/mob/living/carbon/human/occupant // Mob who has been put inside var/locked = 0 //Used to prevent mobs from breaking the feedin anim var/gib_throw_dir = WEST // Direction to spit meat and gibs in. Defaults to west. @@ -255,28 +255,19 @@ var/offset = prob(50) ? -2 : 2 animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = gibtime * 5) //start shaking - var/slab_name = occupant.name - var/slab_count = 3 - var/slab_type = /obj/item/reagent_containers/food/snacks/meat/human //gibber can only gib humans on paracode, no need to check meat type - var/slab_nutrition = occupant.nutrition / 15 - - slab_nutrition /= slab_count - - for(var/i=1 to slab_count) - var/obj/item/reagent_containers/food/snacks/meat/new_meat = new slab_type(src) - new_meat.name = "[slab_name] [new_meat.name]" - new_meat.reagents.add_reagent("nutriment", slab_nutrition) - - - if(occupant.reagents) - occupant.reagents.trans_to(new_meat, round(occupant.reagents.total_volume/slab_count, 1)) + while(occupant.meatleft > 0) + new occupant.dna.species.meat_type(src, occupant) + occupant.meatleft-- if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant var/skinned = H.dna.species.skinned_type + if(ismachineperson(H)) + new /obj/effect/gibspawner/robot(src) + else if(!isplasmaman(H) && !isnucleation(H) && !isgolem(H)) + new /obj/effect/gibspawner(src, H.dna) if(skinned) new skinned(src) - new /obj/effect/decal/cleanable/blood/gibs(src) if(!UserOverride) add_attack_logs(user, occupant, "Gibbed in [src]", !!occupant.ckey ? ATKLOG_FEW : ATKLOG_ALL) diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index 42f02593cd5..6a600443657 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -69,7 +69,7 @@ return if(exchange_parts(user, O)) return - if(!broken && istype(O, /obj/item/wrench)) + if(!broken && O.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) playsound(src, O.usesound, 50, 1) if(anchored) @@ -85,13 +85,13 @@ return if(broken > 0) - if(broken == 2 && istype(O, /obj/item/screwdriver)) // If it's broken and they're using a screwdriver + if(broken == 2 && O.tool_behaviour == TOOL_SCREWDRIVER) // If it's broken and they're using a screwdriver user.visible_message("[user] starts to fix part of [src].", "You start to fix part of [src].") if(do_after(user, 20 * O.toolspeed * gettoolspeedmod(user), target = src)) add_fingerprint(user) user.visible_message("[user] fixes part of [src].", "You have fixed part of \the [src].") broken = 1 // Fix it a bit - else if(broken == 1 && istype(O, /obj/item/wrench)) // If it's broken and they're doing the wrench + else if(broken == 1 && O.tool_behaviour == TOOL_WRENCH) // If it's broken and they're doing the wrench user.visible_message("[user] starts to fix part of [src].", "You start to fix part of [src].") if(do_after(user, 20 * O.toolspeed * gettoolspeedmod(user), target = src)) add_fingerprint(user) diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index 80e7b8a65f6..e0a5c89e52d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -61,7 +61,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers) if(default_deconstruction_crowbar(user, O)) return - if(istype(O, /obj/item/multitool)) + if(O.tool_behaviour == TOOL_MULTITOOL) add_fingerprint(user) if(!panel_open) cycle_through++ diff --git a/code/modules/food_and_drinks/recipes/recipes_grill.dm b/code/modules/food_and_drinks/recipes/recipes_grill.dm index 88e174abd5c..cbfb182717d 100644 --- a/code/modules/food_and_drinks/recipes/recipes_grill.dm +++ b/code/modules/food_and_drinks/recipes/recipes_grill.dm @@ -57,6 +57,169 @@ ) result = /obj/item/reagent_containers/food/snacks/meatsteak +/datum/recipe/grill/meatsteak_human + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "herbsmix" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/human, + /obj/item/reagent_containers/food/snacks/grown/eggplant + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/human + +/datum/recipe/grill/meatsteak_vulpkanin + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "lemonjuice" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/vulpkanin, + /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle, + /obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/vulpkanin + +/datum/recipe/grill/meatsteak_tajaran + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "sodawater" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/tajaran, + /obj/item/grown/nettle/basic + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/tajaran + +/datum/recipe/grill/meatsteak_unathi + reagents = list("sodiumchloride" = 5, "blackpepper" = 5, "herbsmix" = 5, "tomatojuice" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/unathi, + /obj/item/reagent_containers/food/snacks/grown/harebell + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/unathi + +/datum/recipe/grill/meatsteak_drask + reagents = list("sodiumchloride" = 5, "blackpepper" = 5, "capsaicin" = 10, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/drask, + /obj/item/reagent_containers/food/snacks/grown/garlic, + /obj/item/reagent_containers/food/snacks/grown/chili, + /obj/item/reagent_containers/food/snacks/grown/berries, + /obj/item/reagent_containers/food/snacks/grown/berries, + /obj/item/reagent_containers/food/snacks/grown/berries + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/drask + +/datum/recipe/grill/meatsteak_grey + reagents = list("sodiumchloride" = 5, "blackpepper" = 1, "tomatojuice" = 10, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/grey, + /obj/item/reagent_containers/food/snacks/grown/garlic, + /obj/item/reagent_containers/food/snacks/grown/cabbage + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/grey + +/datum/recipe/grill/meatsteak_skrell + reagents = list("sodiumchloride" = 1, "blackpepper" = 5, "tomatojuice" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/skrell, + /obj/item/reagent_containers/food/snacks/grown/banana + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/skrell + +/datum/recipe/grill/meatsteak_vox + reagents = list("sodiumchloride" = 5, "blackpepper" = 5, "herbsmix" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/vox, + /obj/item/reagent_containers/food/snacks/grown/garlic, + /obj/item/reagent_containers/food/snacks/grown/potato/sweet, + /obj/item/reagent_containers/food/snacks/grown/potato/sweet + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/vox + +/datum/recipe/grill/meatsteak_slime + reagents = list("sodiumchloride" = 10, "sugar" = 5, "herbsmix" = 5, "lemonjuice" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/slime, + /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/slime + +/datum/recipe/grill/meatsteak_wryn + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "orangejuice" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/wryn, + /obj/item/reagent_containers/food/snacks/grown/potato, + /obj/item/reagent_containers/food/snacks/grown/potato + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/wryn + +/datum/recipe/grill/meatsteak_kidan + reagents = list("sodiumchloride" = 5, "blackpepper" = 5, "herbsmix" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/kidan, + /obj/item/reagent_containers/food/snacks/grown/garlic, + /obj/item/reagent_containers/food/snacks/grown/olive, + /obj/item/reagent_containers/food/snacks/grown/olive, + /obj/item/reagent_containers/food/snacks/grown/olive + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/kidan + +/datum/recipe/grill/meatsteak_nian + reagents = list("sodiumchloride" = 5, "sugar" = 5, "herbsmix" = 5, "lemonjuice" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/nian, + /obj/item/reagent_containers/food/snacks/grown/citrus/orange + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/nian + +/datum/recipe/grill/meatsteak_diona + reagents = list("sodiumchloride" = 5, "blackpepper" = 1, "herbsmix" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/diona, + /obj/item/reagent_containers/food/snacks/grown/garlic, + /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/diona + +/datum/recipe/grill/meatsteak_monkey + reagents = list("sodiumchloride" = 5, "blackpepper" = 1, "herbsmix" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, + /obj/item/reagent_containers/food/snacks/grown/chili, + /obj/item/reagent_containers/food/snacks/grown/chili, + /obj/item/reagent_containers/food/snacks/grown/citrus/lemon + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/monkey + +/datum/recipe/grill/meatsteak_farwa + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "grapejuice" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/farwa, + /obj/item/reagent_containers/food/snacks/grown/poppy, + /obj/item/reagent_containers/food/snacks/grown/poppy + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/farwa + +/datum/recipe/grill/meatsteak_wolpin + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "potato" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/wolpin, + /obj/item/reagent_containers/food/snacks/onion_slice/red, + /obj/item/reagent_containers/food/snacks/onion_slice/red + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/wolpin + +/datum/recipe/grill/meatsteak_neara + reagents = list("sodiumchloride" = 2, "blackpepper" = 2, "lemonjuice" = 5, "herbsmix" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/neara, + /obj/item/reagent_containers/food/snacks/grown/soybeans, + /obj/item/reagent_containers/food/snacks/grown/soybeans + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/neara + +/datum/recipe/grill/meatsteak_stok + reagents = list("sodiumchloride" = 2, "blackpepper" = 2, "orangejuice" = 5, "herbsmix" = 5, "oliveoil" = 5) + items = list( + /obj/item/reagent_containers/food/snacks/meat/humanoid/stok, + /obj/item/reagent_containers/food/snacks/cucumberslice, + /obj/item/reagent_containers/food/snacks/cucumberslice + ) + result = /obj/item/reagent_containers/food/snacks/meatsteak/stok + /datum/recipe/grill/waffles reagents = list("sugar" = 10) items = list( @@ -126,16 +289,16 @@ /datum/recipe/grill/human/kabob items = list( /obj/item/stack/rods, - /obj/item/reagent_containers/food/snacks/meat/human, - /obj/item/reagent_containers/food/snacks/meat/human, + /obj/item/reagent_containers/food/snacks/meat/humanoid/human, + /obj/item/reagent_containers/food/snacks/meat/humanoid/human, ) result = /obj/item/reagent_containers/food/snacks/kabob /datum/recipe/grill/monkeykabob items = list( /obj/item/stack/rods, - /obj/item/reagent_containers/food/snacks/meat/monkey, - /obj/item/reagent_containers/food/snacks/meat/monkey, + /obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, + /obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, ) result = /obj/item/reagent_containers/food/snacks/monkeykabob diff --git a/code/modules/food_and_drinks/recipes/recipes_microwave.dm b/code/modules/food_and_drinks/recipes/recipes_microwave.dm index 9fb68cf7f84..7d5181fd3f1 100644 --- a/code/modules/food_and_drinks/recipes/recipes_microwave.dm +++ b/code/modules/food_and_drinks/recipes/recipes_microwave.dm @@ -51,7 +51,7 @@ /datum/recipe/microwave/human/burger items = list( - /obj/item/reagent_containers/food/snacks/meat/human, + /obj/item/reagent_containers/food/snacks/meat/humanoid/human, /obj/item/reagent_containers/food/snacks/bun ) result = /obj/item/reagent_containers/food/snacks/human_burger @@ -176,8 +176,8 @@ /datum/recipe/microwave/soylentgreen reagents = list("flour" = 10) items = list( - /obj/item/reagent_containers/food/snacks/meat/human, - /obj/item/reagent_containers/food/snacks/meat/human, + /obj/item/reagent_containers/food/snacks/meat/humanoid/human, + /obj/item/reagent_containers/food/snacks/meat/humanoid/human, ) result = /obj/item/reagent_containers/food/snacks/soylentgreen diff --git a/code/modules/food_and_drinks/recipes/recipes_oven.dm b/code/modules/food_and_drinks/recipes/recipes_oven.dm index 62d4e29dd14..44378766fd4 100644 --- a/code/modules/food_and_drinks/recipes/recipes_oven.dm +++ b/code/modules/food_and_drinks/recipes/recipes_oven.dm @@ -105,6 +105,151 @@ ) result = /obj/item/reagent_containers/food/snacks/meatpie +/datum/recipe/oven/meatpie_human + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/human, + /obj/item/organ/internal/liver, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/human + +/datum/recipe/oven/meatpie_vulpkanin + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/vulpkanin, + /obj/item/organ/internal/liver/vulpkanin, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/vulpkanin + +/datum/recipe/oven/meatpie_tajaran + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/tajaran, + /obj/item/organ/internal/liver/tajaran, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/tajaran + +/datum/recipe/oven/meatpie_unathi + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/unathi, + /obj/item/organ/internal/liver/unathi, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/unathi + +/datum/recipe/oven/meatpie_drask + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/drask, + /obj/item/organ/internal/liver/drask, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/drask + +/datum/recipe/oven/meatpie_grey + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/grey, + /obj/item/organ/internal/liver/grey, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/grey + +/datum/recipe/oven/meatpie_skrell + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/skrell, + /obj/item/organ/internal/liver/skrell, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/skrell + +/datum/recipe/oven/meatpie_vox + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/vox, + /obj/item/organ/internal/liver/vox, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/vox + +/datum/recipe/oven/meatpie_slime + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/slime, + /obj/item/organ/internal/heart/slime, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/slime + +/datum/recipe/oven/meatpie_wryn + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/wryn, + /obj/item/organ/internal/wryn/glands, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/wryn + +/datum/recipe/oven/meatpie_kidan + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/kidan, + /obj/item/organ/internal/liver/kidan, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/kidan + +/datum/recipe/oven/meatpie_nian + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/nian, + /obj/item/organ/internal/liver/nian, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/nian + +/datum/recipe/oven/meatpie_diona + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/diona, + /obj/item/reagent_containers/food/snacks/meat/humanoid/diona, + /obj/item/organ/internal/liver/diona, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/diona + +/datum/recipe/oven/meatpie_monkey + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/monkey, + /obj/item/organ/internal/heart, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/monkey + +/datum/recipe/oven/meatpie_farwa + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/farwa, + /obj/item/organ/internal/heart/tajaran, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/farwa + +/datum/recipe/oven/meatpie_wolpin + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/wolpin, + /obj/item/organ/internal/heart/vulpkanin, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/wolpin + +/datum/recipe/oven/meatpie_neara + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/neara, + /obj/item/organ/internal/heart/skrell, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/neara + +/datum/recipe/oven/meatpie_stok + items = list( + /obj/item/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/reagent_containers/food/snacks/meat/humanoid/stok, + /obj/item/organ/internal/heart/unathi, + ) + result = /obj/item/reagent_containers/food/snacks/meatpie/stok + /datum/recipe/oven/tofupie items = list( /obj/item/reagent_containers/food/snacks/sliceable/flatdough, diff --git a/code/modules/holiday/new_year.dm b/code/modules/holiday/new_year.dm index 0e78e181618..c747cbe348f 100644 --- a/code/modules/holiday/new_year.dm +++ b/code/modules/holiday/new_year.dm @@ -25,7 +25,7 @@ to_chat(user, span_notice("You [anchored ? "un" : ""]wrenched [src]")) /obj/structure/garland/attackby(obj/item/P, mob/user, params) - if(istype(P, /obj/item/wirecutters) || istype(P, /obj/item/wrench)) + if(P.tool_behaviour == TOOL_WIRECUTTER || P.tool_behaviour == TOOL_WRENCH) return return ..() diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index 0afdf0822a4..2bbd51e0600 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -16,6 +16,7 @@ ..() pixel_x = rand(8,-8) pixel_y = rand(8,-8) + update_icon(UPDATE_OVERLAYS) /obj/item/reagent_containers/honeycomb/set_APTFT() set hidden = TRUE @@ -23,15 +24,16 @@ /obj/item/reagent_containers/honeycomb/empty() set hidden = TRUE -/obj/item/reagent_containers/honeycomb/update_icon() - overlays.Cut() + +/obj/item/reagent_containers/honeycomb/update_overlays() + . = ..() var/image/honey if(honey_color) honey = image(icon = 'icons/obj/hydroponics/harvest.dmi', icon_state = "greyscale_honey") honey.color = honey_color else honey = image(icon = 'icons/obj/hydroponics/harvest.dmi', icon_state = "honey") - overlays += honey + . += honey /obj/item/reagent_containers/honeycomb/proc/set_reagent(reagent) @@ -42,4 +44,5 @@ reagents.add_reagent(R.id,5) else honey_color = "" - update_icon() + update_icon(UPDATE_OVERLAYS) + diff --git a/code/modules/hydroponics/fermenting_barrel.dm b/code/modules/hydroponics/fermenting_barrel.dm index 019557365b6..32c7329c4e2 100644 --- a/code/modules/hydroponics/fermenting_barrel.dm +++ b/code/modules/hydroponics/fermenting_barrel.dm @@ -63,7 +63,7 @@ else container_type = DRAINABLE | AMOUNT_VISIBLE to_chat(user, "You close [src], letting you draw from its tap.") - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/fermenting_barrel/crowbar_act(mob/living/user, obj/item/I) . = TRUE @@ -85,11 +85,10 @@ new /obj/item/stack/sheet/wood(drop_location(), mat_drop) ..() -/obj/structure/fermenting_barrel/update_icon() - if(open) - icon_state = "barrel_open" - else - icon_state = "barrel" + +/obj/structure/fermenting_barrel/update_icon_state() + icon_state = "barrel[open ? "_open" : ""]" + /datum/crafting_recipe/fermenting_barrel name = "Wooden Barrel" diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index e2cb65c56cc..bcd4eb7232f 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -10,7 +10,7 @@ yield = 4 potency = 15 icon_dead = "wheat-dead" - mutatelist = list(/obj/item/seeds/wheat/oat, /obj/item/seeds/wheat/meat) + mutatelist = list(/obj/item/seeds/wheat/oat) reagents_add = list("plantmatter" = 0.04) /obj/item/reagent_containers/food/snacks/grown/wheat diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index fb3fdec085e..afb48e9720b 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -156,13 +156,18 @@ density = FALSE anchored = TRUE buckle_lying = FALSE - var/burning = 0 + var/burning = FALSE var/lighter // Who lit the fucking thing var/fire_stack_strength = 5 /obj/structure/bonfire/dense density = TRUE + +/obj/structure/bonfire/update_icon_state() + icon_state = "bonfire[burning ? "_on_fire" : ""]" + + /obj/structure/bonfire/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/stack/rods) && !can_buckle) add_fingerprint(user) @@ -202,8 +207,8 @@ /obj/structure/bonfire/proc/StartBurning() if(!burning && CheckOxygen()) - icon_state = "bonfire_on_fire" - burning = 1 + burning = TRUE + update_icon(UPDATE_ICON_STATE) set_light(6, l_color = "#ED9200") Burn() START_PROCESSING(SSobj, src) @@ -241,8 +246,8 @@ /obj/structure/bonfire/extinguish() if(burning) - icon_state = "bonfire" - burning = 0 + burning = FALSE + update_icon(UPDATE_ICON_STATE) set_light(0) STOP_PROCESSING(SSobj, src) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index e5d064edf91..fdf2940df3d 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -184,8 +184,6 @@ extend = !extend if(extend) to_chat(user, "With a flick of your wrist, you extend the scythe. It's reaping time!") - icon_state = "tscythe1" - item_state = "scythe0" //use the normal scythe in-hands slot_flags = SLOT_BACK //won't fit on belt, but can be worn on belt when extended w_class = WEIGHT_CLASS_BULKY //won't fit in backpacks while extended force = 15 //slightly better than normal scythe damage @@ -195,8 +193,6 @@ playsound(src.loc, 'sound/weapons/blade_unsheath.ogg', 50, 1) //Sound credit to Qat of Freesound.org else to_chat(user, "You collapse the scythe, folding it away for easy storage.") - icon_state = "tscythe0" - item_state = null //no sprite for folded version, like a tele-baton slot_flags = SLOT_BELT //can be worn on belt again, but no longer makes sense to wear on the back w_class = WEIGHT_CLASS_SMALL force = 3 @@ -205,13 +201,19 @@ //Collapse sound (blade sheath) playsound(src.loc, 'sound/weapons/blade_sheath.ogg', 50, 1) //Sound credit to Q.K. of Freesound.org sharp = extend - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() + update_icon(UPDATE_ICON_STATE) + update_equipped_item() add_fingerprint(user) +/obj/item/scythe/tele/update_icon_state() + if(extend) + icon_state = "tscythe1" + item_state = "scythe0" //use the normal scythe in-hands + else + icon_state = "tscythe0" + item_state = null //no sprite for folded version, like a tele-baton + // ************************************* // Nutrient defines for hydroponics @@ -242,7 +244,7 @@ /obj/item/reagent_containers/glass/bottle/nutrient/on_reagent_change() . = ..() - update_icon() + update_icon(UPDATE_OVERLAYS) if(reagents.total_volume) hitsound = 'sound/weapons/jug_filled_impact.ogg' mob_throw_hit_sound = 'sound/weapons/jug_filled_impact.ogg' @@ -250,9 +252,9 @@ hitsound = 'sound/weapons/jug_empty_impact.ogg' mob_throw_hit_sound = 'sound/weapons/jug_empty_impact.ogg' -/obj/item/reagent_containers/glass/bottle/nutrient/update_icon() - cut_overlays() +/obj/item/reagent_containers/glass/bottle/nutrient/update_overlays() + . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "plastic_jug10") @@ -274,10 +276,10 @@ filling.icon_state = "plastic_jug100" filling.icon += mix_color_from_reagents(reagents.reagent_list) - add_overlay(filling) + . += filling if(!is_open_container()) - add_overlay("lid_jug") + . += "lid_jug" /obj/item/reagent_containers/glass/bottle/nutrient/ez diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index be88cebe3ce..4c41a1ff386 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -353,7 +353,7 @@ . += "It has the [myseed.variant] variant of [myseed.plantname] planted." else . += "It has [myseed.plantname] planted." - if (hasHUD(user, DATA_HUD_HYDROPONIC) || isobserver(user)) + if (hasHUD(user, EXAMINE_HUD_BOTANY) || isobserver(user)) . += myseed.get_analyzer_text() . += "Weed: [weedlevel] / 10" . += "Pest: [pestlevel] / 10" diff --git a/code/modules/input/input.dm b/code/modules/input/input.dm index 23b5c0e2e5b..17877e5eb51 100644 --- a/code/modules/input/input.dm +++ b/code/modules/input/input.dm @@ -24,11 +24,11 @@ "default" = list( "Any" = "\"KeyDown \[\[*\]\]\"", // Passes any key down to the rebindable input system "Any+UP" = "\"KeyUp \[\[*\]\]\"", // Passes any key up to the rebindable input system - "Tab" = "\".winset \\\"mainwindow.macro=legacy input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", // Swaps us to legacy mode, forces input to the input bar, sets the input bar colour to salmon pink + "Tab" = "\".winset \\\"mainwindow.macro=legacy input.focus=true input.background-color=[(prefs?.toggles & PREFTOGGLE_UI_DARKMODE) ? COLOR_DARK_INPUT_ENABLED : COLOR_INPUT_ENABLED]\\\"\"", // Swaps us to legacy mode, forces input to the input bar, sets the input bar colour to salmon pink "Back" = "\".winset \\\"input.focus=true ? input.text=\\\"\"" // This makes it so backspace can remove default inputs ), "legacy" = list( - "Tab" = "\".winset \\\"mainwindow.macro=default map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"", // Swaps us to rebind mode, moves input away from input bar, sets input bar to white + "Tab" = "\".winset \\\"mainwindow.macro=default map.focus=true input.background-color=[(prefs?.toggles & PREFTOGGLE_UI_DARKMODE) ? COLOR_DARK_INPUT_DISABLED : COLOR_INPUT_DISABLED]\\\"\"", // Swaps us to rebind mode, moves input away from input bar, sets input bar to white "Back" = "\".winset \\\"input.focus=true ? input.text=\\\"\"" // This makes it so backspace can remove default inputs ), ) @@ -62,8 +62,7 @@ var/key = macro_set[k] var/command = macro_set[key] winset(src, "[setname]-[key]", "parent=[setname];name=[key];command=[command]") - - winset(src, null, "input.background-color=[COLOR_INPUT_DISABLED]") //screw you, we start in hotkey mode now + winset(src, null, "input.background-color=[(prefs?.toggles & PREFTOGGLE_UI_DARKMODE) ? COLOR_DARK_INPUT_DISABLED : COLOR_INPUT_DISABLED]") //screw you, we start in hotkey mode now macro_sets = null //not needed anymore, bye have a great time /client/verb/KeyDown(_key as text) diff --git a/code/modules/input/keybindings.dm b/code/modules/input/keybindings.dm index 1d231127996..7f064cf64ad 100644 --- a/code/modules/input/keybindings.dm +++ b/code/modules/input/keybindings.dm @@ -13,4 +13,11 @@ else active_keybindings[key] += list(KB) + if(!mob) // Clients can join before world/new is setup, so we gotta mob check em + return active_keybindings + for(var/datum/action/action as anything in mob.actions) + if(action.button?.linked_keybind?.binded_to) + var/datum/keybinding/mob/trigger_action_button/linked_bind = action.button.linked_keybind + active_keybindings[linked_bind.binded_to] += list(linked_bind) + return active_keybindings diff --git a/code/modules/instruments/objs/items/headphones.dm b/code/modules/instruments/objs/items/headphones.dm index 741032ef3e2..5366a777640 100644 --- a/code/modules/instruments/objs/items/headphones.dm +++ b/code/modules/instruments/objs/items/headphones.dm @@ -5,6 +5,8 @@ item_state = "headphones0" actions_types = list(/datum/action/item_action/change_headphones_song) var/datum/song/headphones/song + var/on = FALSE + /obj/item/clothing/ears/headphones/Initialize(mapload) . = ..() @@ -15,50 +17,60 @@ RegisterSignal(src, COMSIG_SONG_START, PROC_REF(start_playing)) RegisterSignal(src, COMSIG_SONG_END, PROC_REF(stop_playing)) + /obj/item/clothing/ears/headphones/Destroy() QDEL_NULL(song) return ..() + /obj/item/clothing/ears/headphones/attack_self(mob/user) ui_interact(user) + /obj/item/clothing/ears/headphones/ui_data(mob/user) return song.ui_data(user) + /obj/item/clothing/ears/headphones/ui_interact(mob/user) if(should_stop_playing(user) || user.incapacitated()) return song.ui_interact(user) + /obj/item/clothing/ears/headphones/ui_act(action, params) if(..()) return return song.ui_act(action, params) -/obj/item/clothing/ears/headphones/update_icon() - var/mob/living/carbon/human/user = loc - if(istype(user)) - user.update_action_buttons_icon() - user.update_inv_ears() - ..() + +/obj/item/clothing/ears/headphones/update_icon_state() + icon_state = "headphones[on]" + item_state = "headphones[on]" + update_equipped_item() + /obj/item/clothing/ears/headphones/item_action_slot_check(slot) if(slot == slot_l_ear || slot == slot_r_ear) return TRUE + /** * Called by a component signal when our song starts playing. */ /obj/item/clothing/ears/headphones/proc/start_playing() - icon_state = item_state = "headphones1" - update_icon() + SIGNAL_HANDLER + on = TRUE + update_icon(UPDATE_ICON_STATE) + /** * Called by a component signal when our song stops playing. */ /obj/item/clothing/ears/headphones/proc/stop_playing() - icon_state = item_state = "headphones0" - update_icon() + SIGNAL_HANDLER + on = FALSE + update_icon(UPDATE_ICON_STATE) + /** * Whether the headphone's song should stop playing @@ -69,12 +81,15 @@ /obj/item/clothing/ears/headphones/proc/should_stop_playing(mob/living/carbon/human/user) return !(src in user) || !istype(user) || !((src == user.l_ear) || (src == user.r_ear)) + // special subtype so it uses the correct item type /datum/song/headphones + /datum/song/headphones/should_stop_playing(mob/user) . = ..() if(.) return TRUE var/obj/item/clothing/ears/headphones/I = parent return I.should_stop_playing(user) + diff --git a/code/modules/library/admin.dm b/code/modules/library/admin.dm index b9967703ea2..8ec728d0267 100644 --- a/code/modules/library/admin.dm +++ b/code/modules/library/admin.dm @@ -31,13 +31,20 @@ holder.view_flagged_books() -/datum/admins/proc/view_flagged_books() +#define FLAGGED_BOOKS_PER_PAGE 10 + +/datum/admins/proc/view_flagged_books(page_num = 1) if(!usr.client.holder) return var/dat = {"
    " var/rank if(job.alt_titles) rank = "[GetPlayerAltTitle(job)]" else rank = job.title + if((job_support_low & JOB_CIVILIAN) && (job.title != "Civilian")) + rank = "[GetPlayerAltTitle(job)]" lastJob = job if(!is_job_whitelisted(user, job.title)) - html += "[rank] \[КАРМА]
    \[КАРМА]
    \[ЗАБАНЕНО]
    \[ЗАБАНЕНО]
    \[" + get_exp_format(available_in_playtime) + " за " + job.get_exp_req_type() + "\]
    \[" + get_exp_format(available_in_playtime) + " за " + job.get_exp_req_type() + "\]
    \[ИНВАЛИДНОСТЬ\]
    \[ИНВАЛИДНОСТЬ\]
    \[ЧЕРЕЗ [(available_in_days)] ДНЕЙ]
    \[ЧЕРЕЗ [(available_in_days)] ДНЕЙ]
    \[ВОЗРАСТ ОТ [(job.min_age_allowed)]]
    \[ВОЗРАСТ ОТ [(job.min_age_allowed)]]
    " - var/prefLevelLabel = "ERROR" - var/prefLevelColor = "pink" + var/prefLevelLabel = "ОШИБКА" + var/prefLevelColor = "bg-danger" var/prefUpperLevel = -1 // level to assign on left click var/prefLowerLevel = -1 // level to assign on right click if(GetJobDepartment(job, 1) & job.flag) - prefLevelLabel = "High" - prefLevelColor = "slateblue" + prefLevelLabel = "Высокий" + prefLevelColor = "btn-primary text-light" prefUpperLevel = 4 prefLowerLevel = 2 else if(GetJobDepartment(job, 2) & job.flag) - prefLevelLabel = "Medium" - prefLevelColor = "green" + prefLevelLabel = "Средний" + prefLevelColor = "btn-success text-light" prefUpperLevel = 1 prefLowerLevel = 3 else if(GetJobDepartment(job, 3) & job.flag) - prefLevelLabel = "Low" - prefLevelColor = "orange" + prefLevelLabel = "Низкий" + prefLevelColor = "btn-warning text-dark" prefUpperLevel = 2 prefLowerLevel = 4 else - prefLevelLabel = "NEVER" - prefLevelColor = "red" + prefLevelLabel = "НИКОГДА" + prefLevelColor = "btn-outline-secondary" prefUpperLevel = 3 prefLowerLevel = 1 - html += "" - - // HTML += "" + html += "" if(job.title == "Civilian")//Civilian is special if(job_support_low & JOB_CIVILIAN) - html += " Yes" + html += " Да" else - html += " No" + html += " Нет" html += "
      
      
    "} - var/datum/db_query/query = SSdbcore.NewQuery("SELECT id, title, flagged FROM [format_table_name("library")] WHERE flagged > 0 ORDER BY flagged DESC") + var/datum/db_query/query = SSdbcore.NewQuery("SELECT id, title, flagged FROM [format_table_name("library")] WHERE \ + flagged > 0 ORDER BY flagged DESC LIMIT :lowerlimit, :upperlimit", list( + "lowerlimit" = text2num((page_num - 1) * FLAGGED_BOOKS_PER_PAGE), + "upperlimit" = FLAGGED_BOOKS_PER_PAGE + )) + if(!query.warn_execute()) qdel(query) return @@ -58,7 +65,8 @@ if(!books) dat = "

    No flagged books! :)

    " - var/datum/browser/popup = new(usr, "admin_view_flagged_books", "Flagged Books", 700, 400) + var/datum/browser/popup = new(usr, "admin_view_flagged_books", "Flagged Books (Shown first [FLAGGED_BOOKS_PER_PAGE] books)", 700, 400) popup.set_content(dat) popup.open(0) +#undef FLAGGED_BOOKS_PER_PAGE diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index fc5b09873bd..f5b62b93ae6 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -21,97 +21,104 @@ resistance_flags = FLAMMABLE max_integrity = 200 armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) - var/tmp/busy = 0 - var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/bible, /obj/item/tome) //Things allowed in the bookcase + /// Things allowed in the bookcase + var/list/allowed_books = list( + /obj/item/book, + /obj/item/spellbook, + /obj/item/storage/bible, + /obj/item/tome, + ) + /obj/structure/bookcase/Initialize() ..() for(var/obj/item/I in loc) if(is_type_in_list(I, allowed_books)) I.forceMove(src) - update_icon() + update_icon(UPDATE_ICON_STATE) -/obj/structure/bookcase/attackby(obj/item/O as obj, mob/user as mob, params) - if(busy) //So that you can't mess with it while deconstructing - return TRUE + +/obj/structure/bookcase/attackby(obj/item/O, mob/user, params) if(is_type_in_list(O, allowed_books)) if(!user.drop_transfer_item_to_loc(O, src)) return add_fingerprint(user) - update_icon() + update_icon(UPDATE_ICON_STATE) return TRUE - else if(istype(O, /obj/item/storage/bag/books)) + if(istype(O, /obj/item/storage/bag/books)) var/obj/item/storage/bag/books/B = O for(var/obj/item/T in B.contents) - if(istype(T, /obj/item/book) || istype(T, /obj/item/spellbook) || istype(T, /obj/item/tome) || istype(T, /obj/item/storage/bible)) + if(is_type_in_list(T, allowed_books)) T.add_fingerprint(user) B.remove_from_storage(T, src) add_fingerprint(user) - to_chat(user, "You empty [O] into [src].") - update_icon() + to_chat(user, span_notice("You empty [O] into [src].")) + update_icon(UPDATE_ICON_STATE) return TRUE - else if(istype(O, /obj/item/wrench)) - user.visible_message("[user] starts disassembling \the [src].", \ - "You start disassembling \the [src].") - playsound(get_turf(src), O.usesound, 50, 1) - busy = TRUE - - if(do_after(user, 50 * O.toolspeed * gettoolspeedmod(user), target = src)) - playsound(get_turf(src), O.usesound, 75, 1) - user.visible_message("[user] disassembles \the [src].", \ - "You disassemble \the [src].") - busy = FALSE - density = 0 - deconstruct(TRUE) - else - busy = FALSE - return TRUE - else if(istype(O, /obj/item/pen)) + if(is_pen(O)) add_fingerprint(user) rename_interactive(user, O) return TRUE - else - return ..() + return ..() + + +/obj/structure/bookcase/screwdriver_act(mob/user, obj/item/I) + if(flags & NODECONSTRUCT) + return + . = TRUE + if(!I.tool_use_check(user, 0)) + return + TOOL_ATTEMPT_DISMANTLE_MESSAGE + if(!I.use_tool(src, user, 2 SECONDS, volume = I.tool_volume)) + return + TOOL_DISMANTLE_SUCCESS_MESSAGE + deconstruct(TRUE) + + +/obj/structure/bookcase/wrench_act(mob/user, obj/item/I) + . = TRUE + default_unfasten_wrench(user, I, 0) + + +/obj/structure/bookcase/attack_hand(mob/user) + if(!length(contents)) + return + + var/obj/item/book/choice = tgui_input_list(user, "Which book would you like to remove from [src]?", "Bookcase", contents) + if(!choice || user.incapacitated() || !Adjacent(user)) + return + add_fingerprint(user) + choice.forceMove_turf() + user.put_in_hands(choice, ignore_anim = FALSE) + update_icon(UPDATE_ICON_STATE) -/obj/structure/bookcase/attack_hand(var/mob/user as mob) - if(contents.len) - var/obj/item/book/choice = tgui_input_list(user, "Which book would you like to remove from [src]?", "Bookcase", contents) - if(choice) - if(user.incapacitated() || user.lying || !Adjacent(user)) - return - add_fingerprint(user) - if(!user.get_active_hand()) - choice.forceMove_turf() - user.put_in_hands(choice, ignore_anim = FALSE) - else - choice.forceMove(get_turf(src)) - update_icon() /obj/structure/bookcase/deconstruct(disassembled = TRUE) new /obj/item/stack/sheet/wood(loc, 5) for(var/obj/item/I in contents) if(is_type_in_list(I, allowed_books)) I.forceMove(get_turf(src)) - qdel(src) + ..() + + +/obj/structure/bookcase/update_icon_state() + icon_state = "book-[min(length(contents), 5)]" -/obj/structure/bookcase/update_icon() - if(contents.len < 5) - icon_state = "book-[contents.len]" - else - icon_state = "book-5" /obj/structure/bookcase/manuals/medical name = "Medical Manuals bookcase" + /obj/structure/bookcase/manuals/medical/Initialize() . = ..() new /obj/item/book/manual/medical_cloning(src) - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/bookcase/manuals/engineering name = "Engineering Manuals bookcase" + /obj/structure/bookcase/manuals/engineering/Initialize() . = ..() new /obj/item/book/manual/engineering_construction(src) @@ -120,15 +127,17 @@ new /obj/item/book/manual/engineering_guide(src) new /obj/item/book/manual/engineering_singularity_safety(src) new /obj/item/book/manual/robotics_cyborgs(src) - update_icon() + update_icon(UPDATE_ICON_STATE) + /obj/structure/bookcase/manuals/research_and_development name = "R&D Manuals bookcase" + /obj/structure/bookcase/manuals/research_and_development/Initialize() . = ..() new /obj/item/book/manual/research_and_development(src) - update_icon() + update_icon(UPDATE_ICON_STATE) /* diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index be10f84a7e6..316fc48657e 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -78,6 +78,8 @@ GLOBAL_LIST_INIT(library_section_names, list("Any", "Fiction", "Non-Fiction", "A books_flagged_this_round["[id]"] = 1 message_admins("[key_name_admin(user)] has flagged book #[id] as inappropriate.") + log_game("[user] (ckey: [user.key]) has flagged book #[id] as inappropriate.") + var/datum/db_query/query = SSdbcore.NewQuery("UPDATE [format_table_name("library")] SET flagged = flagged + 1 WHERE id=:id", list( "id" = text2num(id) )) diff --git a/code/modules/martial_arts/adminfu.dm b/code/modules/martial_arts/adminfu.dm index dca93adf7ba..020f44f1156 100644 --- a/code/modules/martial_arts/adminfu.dm +++ b/code/modules/martial_arts/adminfu.dm @@ -2,6 +2,7 @@ name = "Way of the Dancing Admin" has_explaination_verb = TRUE combos = list(/datum/martial_combo/adminfu/healing_palm) + weight = 99999999 /datum/martial_art/adminfu/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) MARTIAL_ARTS_ACT_CHECK @@ -37,9 +38,24 @@ desc = "An aged and frayed scrap of paper written in shifting runes. There are hand-drawn illustrations of pugilism." icon = 'icons/obj/wizard.dmi' icon_state ="scroll2" - var/used = 0 + var/used = FALSE -/obj/item/adminfu_scroll/attack_self(mob/user as mob) + +/obj/item/adminfu_scroll/update_icon_state() + icon_state = used ? "blankscroll" : initial(icon_state) + + +/obj/item/adminfu_scroll/update_name(updates = ALL) + . = ..() + name = used ? "empty scroll" : initial(name) + + +/obj/item/adminfu_scroll/update_desc(updates = ALL) + . = ..() + desc = used ? "It's completely blank." : initial(desc) + + +/obj/item/adminfu_scroll/attack_self(mob/user) if(!ishuman(user)) return if(!used) @@ -47,7 +63,6 @@ var/datum/martial_art/adminfu/F = new/datum/martial_art/adminfu(null) F.teach(H) to_chat(H, "You have learned the ancient martial art of the Admins.") - used = 1 - desc = "It's completely blank." - name = "empty scroll" - icon_state = "blankscroll" + used = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + diff --git a/code/modules/martial_arts/brawling.dm b/code/modules/martial_arts/brawling.dm index dae3805d38b..56402a38ed2 100644 --- a/code/modules/martial_arts/brawling.dm +++ b/code/modules/martial_arts/brawling.dm @@ -1,6 +1,7 @@ /datum/martial_art/boxing name = "Boxing" has_dirslash = FALSE + weight = 1 /datum/martial_art/boxing/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) to_chat(A, "Can't disarm while boxing!") @@ -48,6 +49,7 @@ /datum/martial_art/drunk_brawling name = "Drunken Brawling" + weight = 2 /datum/martial_art/drunk_brawling/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(prob(70)) diff --git a/code/modules/martial_arts/cqc.dm b/code/modules/martial_arts/cqc.dm index b324cae076a..1d4d0cedbc9 100644 --- a/code/modules/martial_arts/cqc.dm +++ b/code/modules/martial_arts/cqc.dm @@ -1,5 +1,6 @@ /datum/martial_art/cqc name = "CQC" + weight = 7 block_chance = 75 has_explaination_verb = TRUE combos = list(/datum/martial_combo/cqc/slam, /datum/martial_combo/cqc/kick, /datum/martial_combo/cqc/restrain, /datum/martial_combo/cqc/pressure, /datum/martial_combo/cqc/consecutive) @@ -13,6 +14,22 @@ /datum/martial_art/cqc/under_siege name = "Close Quarters Cooking" + weight = 5 + +/datum/martial_art/cqc/under_siege/teach(mob/living/carbon/human/H, make_temporary) + RegisterSignal(H, COMSIG_AREA_ENTERED, PROC_REF(kitchen_check)) + return ..() + +/datum/martial_art/cqc/under_siege/remove(mob/living/carbon/human/H) + UnregisterSignal(H, COMSIG_AREA_ENTERED) + return ..() + +/datum/martial_art/cqc/under_siege/proc/kitchen_check(mob/living/carbon/human/H, area/entered_area) + SIGNAL_HANDLER //COMSIG_AREA_ENTERED + if(!is_type_in_typecache(entered_area, areas_under_siege)) + weight = 0 + else + weight = initial(weight) /datum/martial_art/cqc/under_siege/can_use(mob/living/carbon/human/H) var/area/A = get_area(H) @@ -20,6 +37,12 @@ return FALSE return ..() +/datum/martial_art/cqc/teach(mob/living/carbon/human/H, make_temporary) + if(H.mind) + for(var/datum/martial_art/cqc/under_siege/chef_art in H.mind.known_martial_arts) + chef_art.remove(H) + return ..() + /datum/martial_art/cqc/proc/drop_restraining() restraining = FALSE diff --git a/code/modules/martial_arts/grav_stomp.dm b/code/modules/martial_arts/grav_stomp.dm index 0f8a54ecf88..40bd4fc6a16 100644 --- a/code/modules/martial_arts/grav_stomp.dm +++ b/code/modules/martial_arts/grav_stomp.dm @@ -1,5 +1,6 @@ /datum/martial_art/grav_stomp name = "Gravitational Boots" + weight = 4 /datum/martial_art/grav_stomp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) MARTIAL_ARTS_ACT_CHECK diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm index 40579af2ff6..2b6e211ab6d 100644 --- a/code/modules/martial_arts/krav_maga.dm +++ b/code/modules/martial_arts/krav_maga.dm @@ -1,6 +1,7 @@ /datum/martial_art/krav_maga name = "Krav Maga" has_dirslash = FALSE + weight = 8 //Higher weight, since you can choose to put on or take off the gloves var/datum/action/neck_chop/neckchop = new/datum/action/neck_chop() var/datum/action/leg_sweep/legsweep = new/datum/action/leg_sweep() var/datum/action/lung_punch/lungpunch = new/datum/action/lung_punch() @@ -25,12 +26,15 @@ button_icon_state = "neckchop" /datum/action/neck_chop/Trigger(left_click = TRUE) + var/mob/living/carbon/human/H = owner + if(!istype(H.mind.martial_art, /datum/martial_art/krav_maga)) + to_chat(owner, span_warning("You don't know how to do that right now.")) + return if(owner.incapacitated()) to_chat(owner, "You can't use Krav Maga while you're incapacitated.") return to_chat(owner, "Your next attack will be a Neck Chop.") owner.visible_message("[owner] assumes the Neck Chop stance!") - var/mob/living/carbon/human/H = owner H.mind.martial_art.combos.Cut() H.mind.martial_art.combos.Add(/datum/martial_combo/krav_maga/neck_chop) H.mind.martial_art.reset_combos() @@ -41,12 +45,15 @@ button_icon_state = "legsweep" /datum/action/leg_sweep/Trigger(left_click = TRUE) + var/mob/living/carbon/human/H = owner + if(!istype(H.mind.martial_art, /datum/martial_art/krav_maga)) + to_chat(owner, span_warning("You don't know how to do that right now.")) + return if(owner.incapacitated()) to_chat(owner, "You can't use Krav Maga while you're incapacitated.") return to_chat(owner, "Your next attack will be a Leg Sweep.") owner.visible_message("[owner] assumes the Leg Sweep stance!") - var/mob/living/carbon/human/H = owner H.mind.martial_art.combos.Cut() H.mind.martial_art.combos.Add(/datum/martial_combo/krav_maga/leg_sweep) H.mind.martial_art.reset_combos() @@ -57,12 +64,15 @@ button_icon_state = "lungpunch" /datum/action/lung_punch/Trigger(left_click = TRUE) + var/mob/living/carbon/human/H = owner + if(!istype(H.mind.martial_art, /datum/martial_art/krav_maga)) + to_chat(owner, span_warning("You don't know how to do that right now.")) + return if(owner.incapacitated()) to_chat(owner, "You can't use Krav Maga while you're incapacitated.") return to_chat(owner, "Your next attack will be a Lung Punch.") owner.visible_message("[owner] assumes the Lung Punch stance!") - var/mob/living/carbon/human/H = owner H.mind.martial_art.combos.Cut() H.mind.martial_art.combos.Add(/datum/martial_combo/krav_maga/lung_punch) H.mind.martial_art.reset_combos() diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 05752f0ac57..59c27c21b1c 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -39,6 +39,8 @@ var/combo_timer /// If the user is preparing a martial arts stance. var/in_stance = FALSE + /// The priority of which martial art is picked from all the ones someone knows, the higher the number, the higher the priority. + var/weight = 0 /datum/martial_art/New() . = ..() @@ -59,7 +61,7 @@ /datum/martial_art/proc/can_use(mob/living/carbon/human/H) return !HAS_TRAIT(H, TRAIT_PACIFISM) -/datum/martial_art/proc/act(step, mob/living/carbon/human/user, mob/living/carbon/human/target) +/datum/martial_art/proc/act(step, mob/living/carbon/human/user, mob/living/carbon/human/target, could_start_new_combo = TRUE) if(!can_use(user)) return MARTIAL_ARTS_CANNOT_USE /* @@ -73,19 +75,21 @@ combo_timer = addtimer(CALLBACK(src, PROC_REF(reset_combos)), COMBO_ALIVE_TIME, TIMER_UNIQUE | TIMER_STOPPABLE) streak += intent_to_streak(step) var/mob/living/carbon/human/owner = locateUID(owner_UID) - owner?.hud_used.combo_display.update_icon(ALL, streak) - return check_combos(step, user, target) + if(istype(owner) && !QDELETED(owner)) + owner.hud_used.combo_display.update_icon(ALL, streak) + return check_combos(step, user, target, could_start_new_combo) return FALSE /datum/martial_art/proc/reset_combos() current_combos.Cut() streak = "" var/mob/living/carbon/human/owner = locateUID(owner_UID) - owner?.hud_used.combo_display.update_icon(ALL, streak) + if(istype(owner) && !QDELETED(owner)) + owner.hud_used.combo_display.update_icon(ALL, streak) for(var/combo_type in combos) current_combos.Add(new combo_type()) -/datum/martial_art/proc/check_combos(step, mob/living/carbon/human/user, mob/living/carbon/human/target) +/datum/martial_art/proc/check_combos(step, mob/living/carbon/human/user, mob/living/carbon/human/target, could_start_new_combo = TRUE) . = FALSE for(var/thing in current_combos) var/datum/martial_combo/MC = thing @@ -111,6 +115,8 @@ return TRUE if(!LAZYLEN(current_combos)) reset_combos() + if(HAS_COMBOS && could_start_new_combo) + act(step, user, target, could_start_new_combo = FALSE) /datum/martial_art/proc/basic_hit(mob/living/carbon/human/A, mob/living/carbon/human/D) @@ -175,38 +181,40 @@ /datum/martial_art/proc/teach(mob/living/carbon/human/H, make_temporary = FALSE) if(!H.mind) return FALSE - if(istype(H.mind.martial_art, src.type)) - return FALSE + for(var/datum/martial_art/MA in H.mind.known_martial_arts) + if(istype(MA, src)) + return FALSE if(has_explaination_verb) H.verbs |= /mob/living/carbon/human/proc/martial_arts_help - if(make_temporary) - temporary = TRUE if(has_dirslash) H.verbs |= /mob/living/carbon/human/proc/dirslash_enabling H.dirslash_enabled = TRUE - if(temporary) - if(H.mind.martial_art) - base = H.mind.martial_art.base - else - base = src + temporary = make_temporary + H.mind.known_martial_arts.Add(src) + H.mind.martial_art = get_highest_weight(H) owner_UID = H.UID() - H.mind.martial_art = src return TRUE -/datum/martial_art/proc/remove(var/mob/living/carbon/human/H) +/datum/martial_art/proc/remove(mob/living/carbon/human/H) + var/datum/martial_art/MA = src if(!H.mind) return FALSE - if(H.mind.martial_art != src) - return FALSE - H.mind.martial_art = null // Remove reference + deltimer(combo_timer) + H.mind.known_martial_arts.Remove(MA) + H.mind.martial_art = get_highest_weight(H) H.verbs -= /mob/living/carbon/human/proc/martial_arts_help H.verbs -= /mob/living/carbon/human/proc/dirslash_enabling H.dirslash_enabled = initial(H.dirslash_enabled) - if(base) - base.teach(H) - base = null return TRUE +/// Returns the martial art with the highest weight from all the ones someone knows. +/datum/martial_art/proc/get_highest_weight(mob/living/carbon/human/H) + var/datum/martial_art/highest_weight = null + for(var/datum/martial_art/MA in H.mind.known_martial_arts) + if(!highest_weight || MA.weight > highest_weight.weight) + highest_weight = MA + return highest_weight + /mob/living/carbon/human/proc/martial_arts_help() set name = "Show Info" set desc = "Gives information about the martial arts you know." @@ -275,7 +283,7 @@ return if(slot == slot_gloves) var/mob/living/carbon/human/H = user - style.teach(H,1) + style.teach(H, TRUE) /obj/item/clothing/gloves/boxing/dropped(mob/user, silent = FALSE) . = ..() @@ -304,7 +312,7 @@ if(HAS_TRAIT(user, TRAIT_PACIFISM)) to_chat(user, "In spite of the grandiosity of the belt, you don't feel like getting into any fights.") return - style.teach(H,1) + style.teach(H, TRUE) to_chat(user, "You have an urge to flex your muscles and get into a fight. You have the knowledge of a thousand wrestlers before you. You can remember more by using the show info verb in the martial arts tab.") /obj/item/storage/belt/champion/wrestling/dropped(mob/user, silent = FALSE) @@ -322,7 +330,22 @@ desc = "An aged and frayed scrap of paper written in shifting runes. There are hand-drawn illustrations of pugilism." icon = 'icons/obj/wizard.dmi' icon_state ="scroll2" - var/used = 0 + var/used = FALSE + + +/obj/item/plasma_fist_scroll/update_icon_state() + icon_state = used ? "blankscroll" : initial(icon_state) + + +/obj/item/plasma_fist_scroll/update_name(updates = ALL) + . = ..() + name = used ? "empty scroll" : initial(name) + + +/obj/item/plasma_fist_scroll/update_desc(updates = ALL) + . = ..() + desc = used ? "It's completely blank." : initial(desc) + /obj/item/plasma_fist_scroll/attack_self(mob/user as mob) if(!ishuman(user)) @@ -333,10 +356,9 @@ var/datum/martial_art/plasma_fist/F = new/datum/martial_art/plasma_fist(null) F.teach(H) to_chat(H, "You have learned the ancient martial art of Plasma Fist.") - used = 1 - desc = "It's completely blank." - name = "empty scroll" - icon_state = "blankscroll" + used = TRUE + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + /obj/item/sleeping_carp_scroll name = "mysterious scroll" @@ -404,7 +426,7 @@ item_state = "syringe_0" /obj/item/CQC_manual/chef/attack_self(mob/living/carbon/human/user) - if(!istype(user) || !user) + if(!istype(user)) return if(user.mind && user.mind.assigned_role == "Chef") to_chat(user, "You completely memorise the basics of CQC.") @@ -476,9 +498,10 @@ icon_state = "bostaff0" block_chance = 50 -/obj/item/twohanded/bostaff/update_icon() - icon_state = "bostaff[wielded]" - return + +/obj/item/twohanded/bostaff/update_icon_state() + icon_state = "bostaff[HAS_TRAIT(src, TRAIT_WIELDED)]" + /obj/item/twohanded/bostaff/attack(mob/target, mob/living/user) add_fingerprint(user) @@ -504,7 +527,7 @@ return switch(user.a_intent) if(INTENT_DISARM) - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) return ..() if(!ishuman(target)) return ..() @@ -535,9 +558,9 @@ return ..() /obj/item/twohanded/bostaff/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(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) return ..() - return 0 + return FALSE /obj/screen/combo icon_state = "" @@ -546,24 +569,33 @@ layer = ABOVE_HUD_LAYER var/streak + /obj/screen/combo/proc/clear_streak() cut_overlays() streak = "" icon_state = "" + /obj/screen/combo/update_icon(updates, _streak) streak = _streak - icon_state = "" - if(!streak) - clear_streak() - return - icon_state = "combo" + return ..() + + +/obj/screen/combo/update_overlays() + . = list() for(var/i in 1 to length(streak)) var/intent_text = copytext(streak, i, i + 1) var/image/intent_icon = image(icon, src, "combo_[intent_text]") intent_icon.pixel_x = 16 * (i - 1) - 8 * length(streak) - overlays += intent_icon - return ..() + . += intent_icon + + +/obj/screen/combo/update_icon_state() + icon_state = "" + if(!streak) + return + icon_state = "combo" + #undef HAS_COMBOS #undef COMBO_ALIVE_TIME diff --git a/code/modules/martial_arts/mimejutsu.dm b/code/modules/martial_arts/mimejutsu.dm index 941ce7ff6e6..edc19826470 100644 --- a/code/modules/martial_arts/mimejutsu.dm +++ b/code/modules/martial_arts/mimejutsu.dm @@ -1,5 +1,6 @@ /datum/martial_art/mimejutsu name = "Mimejutsu" + weight = 6 block_chance = 50 has_explaination_verb = TRUE combos = list(/datum/martial_combo/mimejutsu/mimechucks, /datum/martial_combo/mimejutsu/silent_palm, /datum/martial_combo/mimejutsu/silencer, /datum/martial_combo/mimejutsu/execution) diff --git a/code/modules/martial_arts/mrchang.dm b/code/modules/martial_arts/mrchang.dm index b7053152bbe..1a97aa3e0bf 100644 --- a/code/modules/martial_arts/mrchang.dm +++ b/code/modules/martial_arts/mrchang.dm @@ -1,6 +1,7 @@ //Техника агрессивного маркетинга мистера Ченга /datum/martial_art/mr_chang name = "Mr. Chang's Aggressive Marketing" + weight = 6 combos = list(/datum/martial_combo/mr_chang/steal_card) has_explaination_verb = TRUE var/stun_on_cooldown = FALSE diff --git a/code/modules/martial_arts/plasma_fist.dm b/code/modules/martial_arts/plasma_fist.dm index a216a5d730f..a8acd3e3f4b 100644 --- a/code/modules/martial_arts/plasma_fist.dm +++ b/code/modules/martial_arts/plasma_fist.dm @@ -1,5 +1,6 @@ /datum/martial_art/plasma_fist name = "Plasma Fist" + weight = 6 combos = list(/datum/martial_combo/plasma_fist/tornado_sweep, /datum/martial_combo/plasma_fist/throwback, /datum/martial_combo/plasma_fist/plasma_fist) has_explaination_verb = TRUE diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index 183fbdd0258..45c285be665 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -1,6 +1,7 @@ //Used by the gang of the same name. Uses combos. Basic attacks bypass armor and never miss /datum/martial_art/the_sleeping_carp name = "Спящий Карп" + weight = 9 deflection_chance = 100 reroute_deflection = TRUE no_guns = TRUE diff --git a/code/modules/martial_arts/synthojitsu.dm b/code/modules/martial_arts/synthojitsu.dm index dc3f6fabd5b..ca81d5a326f 100644 --- a/code/modules/martial_arts/synthojitsu.dm +++ b/code/modules/martial_arts/synthojitsu.dm @@ -1,5 +1,6 @@ /datum/martial_art/synthojitsu name = "Synthojitsu" + weight = 4 block_chance = 0 has_explaination_verb = TRUE combos = list(/datum/martial_combo/synthojitsu/lock, /datum/martial_combo/synthojitsu/overload, /datum/martial_combo/synthojitsu/reanimate) @@ -42,7 +43,20 @@ icon_state ="viable" var/is_used = FALSE -/obj/item/ipc_combat_upgrade/attack_self(mob/user as mob) + +/obj/item/ipc_combat_upgrade/update_icon_state() + icon_state = "[is_used ? "un" : ""]viable" + + +/obj/item/ipc_combat_upgrade/update_desc(updates = ALL) + . = ..() + if(!is_used) + desc = initial(desc) + return + desc = "Advanced data storage designed to be compatible with positronic systems.This one include melee algorithms along with overwritten microbattery safety protocols.It's hardlocked" + + +/obj/item/ipc_combat_upgrade/attack_self(mob/user) if(!ismachineperson(user) || is_used == TRUE) return to_chat(user, "Installation sequence initialized. It will take some time...") @@ -54,9 +68,8 @@ H.Weaken(10 SECONDS) to_chat(H, "Melee algorithms installed. Safety disabled.") is_used = TRUE - desc = "Advanced data storage designed to be compatible with positronic systems.This one include melee algorithms along with overwritten microbattery safety protocols.It's hardlocked" - name = "IPC combat upgrade" - icon_state = "unviable" + update_appearance(UPDATE_ICON_STATE|UPDATE_DESC) + /datum/martial_art/synthojitsu/explaination_header(user) to_chat(user, "You reapload some of the basics of synthojitsu.") diff --git a/code/modules/martial_arts/throwing_knives.dm b/code/modules/martial_arts/throwing_knives.dm index 7213f7a9b2b..b7e0d9ef5af 100644 --- a/code/modules/martial_arts/throwing_knives.dm +++ b/code/modules/martial_arts/throwing_knives.dm @@ -1,5 +1,6 @@ /datum/martial_art/throwing name = "Knife techniques" + weight = 6 combos = list(/datum/martial_combo/throwing/remove_embended) block_chance = 50 //if holding knife in hand has_explaination_verb = TRUE diff --git a/code/modules/martial_arts/wrestling.dm b/code/modules/martial_arts/wrestling.dm index 3eb26bca97d..9647feb07f8 100644 --- a/code/modules/martial_arts/wrestling.dm +++ b/code/modules/martial_arts/wrestling.dm @@ -1,5 +1,6 @@ /datum/martial_art/wrestling name = "Wrestling" + weight = 3 has_explaination_verb = TRUE has_dirslash = FALSE diff --git a/code/modules/mini_games/thunderdome/gamemodes/gamemode.dm b/code/modules/mini_games/thunderdome/gamemodes/gamemode.dm index 3a0e9469852..c0469590cd4 100644 --- a/code/modules/mini_games/thunderdome/gamemodes/gamemode.dm +++ b/code/modules/mini_games/thunderdome/gamemodes/gamemode.dm @@ -39,8 +39,6 @@ /obj/item/CQC_manual = 1, /obj/item/sleeping_carp_scroll = 1, /obj/item/clothing/gloves/fingerless/rapid = 1, - /obj/item/storage/box/thunderdome/mr_chang_technique = 1, - /obj/item/storage/box/thunderdome/mr_chang_technique/spicy = 1, /obj/item/storage/box/thunderdome/spears = 1, /obj/item/storage/box/thunderdome/maga = 1, /obj/item/storage/box/thunderdome/singulatiry = 1, @@ -72,7 +70,7 @@ /obj/item/gun/projectile/shotgun/boltaction = 1, /obj/item/gun/projectile/shotgun/automatic/combat = 2, /obj/item/gun/projectile/automatic/pistol/APS = 1, - /obj/item/gun/projectile/automatic/pistol/sp8ar = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8ar = 1, /obj/item/gun/projectile/automatic/pistol/m1911 = 1, /obj/item/gun/projectile/revolver/golden = 1, /obj/item/gun/projectile/revolver/nagant = 1, @@ -132,7 +130,7 @@ /obj/item/gun/projectile/shotgun/boltaction = 1, /obj/item/gun/projectile/shotgun/automatic/combat = 2, /obj/item/gun/projectile/automatic/pistol/APS = 1, - /obj/item/gun/projectile/automatic/pistol/sp8ar = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8ar = 1, /obj/item/gun/projectile/automatic/pistol/m1911 = 1, /obj/item/gun/projectile/revolver/golden = 1, /obj/item/gun/projectile/revolver/nagant = 1, @@ -142,4 +140,25 @@ /obj/item/storage/box/thunderdome/crossbow/energy = 1, /obj/item/storage/box/thunderdome/laser_eyes = 1, /obj/item/implanter/adrenalin = 1, + /obj/item/melee/rapier = 1, + /obj/item/melee/energy/axe = 1, + /obj/item/melee/energy/sword/saber/red = 1, + /obj/item/melee/energy/cleaving_saw = 1, + /obj/item/twohanded/mjollnir = 1, + /obj/item/twohanded/chainsaw = 1, + /obj/item/twohanded/dualsaber = 1, + /obj/item/twohanded/fireaxe = 1, + /obj/item/melee/icepick = 1, + /obj/item/melee/candy_sword = 1, + /obj/item/melee/energy/sword/pirate = 1, + /obj/item/storage/toolbox/surgery = 1, + /obj/item/storage/toolbox/mechanical = 1, + /obj/item/storage/toolbox/syndicate = 1, + /obj/item/storage/box/syndie_kit/mantisblade = 1, + /obj/item/CQC_manual = 1, + /obj/item/sleeping_carp_scroll = 1, + /obj/item/clothing/gloves/fingerless/rapid = 1, + /obj/item/storage/box/thunderdome/spears = 1, + /obj/item/storage/box/thunderdome/maga = 1, + /obj/item/storage/box/thunderdome/singulatiry = 1, ) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 5e6561bd36d..d0c4aed9906 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -180,7 +180,7 @@ if(istype(W, /obj/item/card/emag)) boom(user) return 1 - if(istype(W, /obj/item/multitool)) + if(W.tool_behaviour == TOOL_MULTITOOL) add_fingerprint(user) to_chat(user, "DECA-CODE LOCK REPORT:") if(attempts == 1) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 59738cd2fa3..2d35238543f 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -75,15 +75,18 @@ allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/kinetic_crusher, /obj/item/hierophant_club, /obj/item/twohanded/fireaxe/boneaxe) jetpack = /obj/item/tank/jetpack/suit -/obj/item/clothing/suit/space/hostile_environment/New() + +/obj/item/clothing/suit/space/hostile_environment/Initialize(mapload) + . = ..() AddComponent(/datum/component/spraycan_paintable) START_PROCESSING(SSobj, src) - ..() + /obj/item/clothing/suit/space/hostile_environment/Destroy() STOP_PROCESSING(SSobj, src) return ..() + /obj/item/clothing/suit/space/hostile_environment/process() var/mob/living/carbon/C = loc if(istype(C) && prob(2)) //cursed by bubblegum @@ -103,17 +106,17 @@ armor = list("melee" = 70, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | LAVA_PROOF | ACID_PROOF -/obj/item/clothing/head/helmet/space/hostile_environment/New() - ..() + +/obj/item/clothing/head/helmet/space/hostile_environment/Initialize(mapload) + . = ..() AddComponent(/datum/component/spraycan_paintable) - update_icon() - -/obj/item/clothing/head/helmet/space/hostile_environment/update_icon() - ..() - cut_overlays() - var/mutable_appearance/glass_overlay = mutable_appearance(icon, "hostile_env_glass") - glass_overlay.appearance_flags = RESET_COLOR - add_overlay(glass_overlay) + update_icon(UPDATE_OVERLAYS) + + +/obj/item/clothing/head/helmet/space/hostile_environment/update_overlays() + . = ..() + . += mutable_appearance(icon, "hostile_env_glass", appearance_flags = RESET_COLOR) + /obj/item/clothing/head/helmet/space/hardsuit/champion name = "champion's helmet" diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index ca7de1c5a13..3677a45ea47 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -62,7 +62,7 @@ to_chat(user, "There are no trophies on [src].") /obj/item/twohanded/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user) - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) to_chat(user, "[src] is too heavy to use with one hand. You fumble and drop everything.") user.drop_r_hand() user.drop_l_hand() @@ -90,7 +90,7 @@ /obj/item/twohanded/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams) . = ..() - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) return if(user.has_status_effect(STATUS_EFFECT_DASH) && user.a_intent == INTENT_HELP) if(user.throw_at(target, range = 3, speed = 3, spin = FALSE, diagonals_first = TRUE)) @@ -164,21 +164,27 @@ else set_light(0) -/obj/item/twohanded/kinetic_crusher/update_icon() - ..() - cut_overlays() + +/obj/item/twohanded/kinetic_crusher/update_icon_state() + if(upgraded) + item_state = "magmite_crusher[HAS_TRAIT(src, TRAIT_WIELDED)]" + else + item_state = "crusher[HAS_TRAIT(src, TRAIT_WIELDED)]" + + +/obj/item/twohanded/kinetic_crusher/update_overlays() + . = ..() if(!charged) - add_overlay("[icon_state]_uncharged") + . += "[icon_state]_uncharged" if(light_on) - add_overlay("[icon_state]_lit") - spawn(1) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - if(!upgraded) - item_state = "crusher[wielded]" - else - item_state = "magmite_crusher[wielded]" + . += "[icon_state]_lit" + addtimer(CALLBACK(src, PROC_REF(buttons_update)), 0.1 SECONDS) + + +/obj/item/twohanded/kinetic_crusher/proc/buttons_update() + for(var/datum/action/action as anything in actions) + action.UpdateButtonIcon() + //destablizing force /obj/item/projectile/destabilizer @@ -402,7 +408,8 @@ if(.) H.force += bonus_value * 0.2 H.force_unwielded += bonus_value * 0.2 - H.force_wielded += bonus_value * 0.2 + // don't update force since KCs have 0 force by default + H.AddComponent(/datum/component/two_handed, force_wielded = H.force_wielded, force_unwielded = H.force) H.detonation_damage += bonus_value * 0.8 /obj/item/crusher_trophy/demon_claws/remove_from(obj/item/twohanded/kinetic_crusher/H, mob/living/user) @@ -410,7 +417,7 @@ if(.) H.force -= bonus_value * 0.2 H.force_unwielded -= bonus_value * 0.2 - H.force_wielded -= bonus_value * 0.2 + H.AddComponent(/datum/component/two_handed, force_wielded = H.force_wielded, force_unwielded = H.force) H.detonation_damage -= bonus_value * 0.8 /obj/item/crusher_trophy/demon_claws/on_melee_hit(mob/living/target, mob/living/user) diff --git a/code/modules/mining/equipment/lazarus_injector.dm b/code/modules/mining/equipment/lazarus_injector.dm index cd9aeb3677f..66cea2273d0 100644 --- a/code/modules/mining/equipment/lazarus_injector.dm +++ b/code/modules/mining/equipment/lazarus_injector.dm @@ -10,10 +10,15 @@ w_class = WEIGHT_CLASS_SMALL throw_speed = 3 throw_range = 5 - var/loaded = 1 + var/loaded = TRUE var/malfunctioning = 0 var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it + +/obj/item/lazarus_injector/update_icon_state() + icon_state = "lazarus_[loaded ? "hypo" : "empty"]" + + /obj/item/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag) if(!loaded) return @@ -37,10 +42,10 @@ add_game_logs("[user] has revived hostile mob [target] with a malfunctioning lazarus injector", user) else H.attack_same = 0 - loaded = 0 + loaded = FALSE user.visible_message("[user] injects [M] with [src], reviving it.") playsound(src,'sound/effects/refill.ogg',50,1) - icon_state = "lazarus_empty" + update_icon(UPDATE_ICON_STATE) return else to_chat(user, "[src] is only effective on the dead.") @@ -116,9 +121,14 @@ captured.forceMove(get_turf(src)) captured = null + +/obj/item/mobcapsule/update_icon_state() + icon_state = "mobcap[colorindex]" + + /obj/item/mobcapsule/attack_self(mob/user) colorindex += 1 if(colorindex >= 6) colorindex = 0 - icon_state = "mobcap[colorindex]" - update_icon() + update_icon(UPDATE_ICON_STATE) + diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index 761d8560314..43619296302 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -34,14 +34,14 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( /obj/item/stack/marker_beacon/Initialize(mapload) . = ..() - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/item/stack/marker_beacon/examine(mob/user) . = ..() . += "Use in-hand to place a [singular_name]." . += "Alt-click to select a color. Current color is [picked_color]." -/obj/item/stack/marker_beacon/update_icon() +/obj/item/stack/marker_beacon/update_icon_state() icon_state = "[initial(icon_state)][lowertext(picked_color)]" /obj/item/stack/marker_beacon/attack_self(mob/user) @@ -65,7 +65,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( return if(input_color) picked_color = input_color - update_icon() + update_icon(UPDATE_ICON_STATE) /obj/structure/marker_beacon name = "marker beacon" @@ -84,25 +84,31 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( /obj/structure/marker_beacon/Initialize(mapload, set_color) . = ..() picked_color = set_color - update_icon() + update_state() /obj/structure/marker_beacon/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) var/obj/item/stack/marker_beacon/M = new(loc) M.picked_color = picked_color - M.update_icon() + M.update_icon(UPDATE_ICON_STATE) qdel(src) /obj/structure/marker_beacon/examine(mob/user) . = ..() . += "Alt-click to select a color. Current color is [picked_color]." -/obj/structure/marker_beacon/update_icon() + +/obj/structure/marker_beacon/update_icon_state() while(!picked_color || !GLOB.marker_beacon_colors[picked_color]) picked_color = pick(GLOB.marker_beacon_colors) icon_state = "[initial(icon_state)][lowertext(picked_color)]-on" + + +/obj/structure/marker_beacon/proc/update_state() + update_icon(UPDATE_ICON_STATE) set_light(light_range, light_power, GLOB.marker_beacon_colors[picked_color]) + /obj/structure/marker_beacon/attack_hand(mob/living/user) . = ..() if(.) @@ -114,7 +120,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( if(do_after(user, remove_speed, target = src)) var/obj/item/stack/marker_beacon/M = new(drop_location()) M.picked_color = picked_color - M.update_icon() + M.update_icon(UPDATE_ICON_STATE) transfer_fingerprints_to(M) user.put_in_hands(M, ignore_anim = FALSE) playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) @@ -140,4 +146,4 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( return if(input_color) picked_color = input_color - update_icon() + update_state() diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index fc49ee0993f..cf3f2508f58 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -43,6 +43,7 @@ desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results. This one has an extended range. \nIt has a speaker that can be toggled with alt+click" name = "advanced automatic mining scanner" icon_state = "adv_mining0" + base_icon_state = "adv_mining" item_state = "analyzer" w_class = WEIGHT_CLASS_SMALL flags = CONDUCT @@ -67,6 +68,7 @@ /obj/item/t_scanner/adv_mining_scanner/lesser name = "automatic mining scanner" icon_state = "mining0" + base_icon_state = "mining" desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results. \nIt has a speaker that can be toggled with alt+click" range = 4 cooldown = 50 diff --git a/code/modules/mining/equipment/mining_charges.dm b/code/modules/mining/equipment/mining_charges.dm index 6a3bddc3667..4895441d3db 100644 --- a/code/modules/mining/equipment/mining_charges.dm +++ b/code/modules/mining/equipment/mining_charges.dm @@ -5,7 +5,7 @@ icon = 'icons/obj/mining.dmi' icon_state = "mining-charge-2" item_state = "charge_indust" - det_time = 5 + det_time = 5 SECONDS notify_admins = FALSE // no need to make adminlogs on lavaland, while they are "safe" to use var/timer_off = FALSE var/installed = FALSE @@ -192,13 +192,13 @@ . += "[bicon(charge)] [charge]. Current status: [charge.installed ? "ready to detonate" : "ready to deploy"]." -/obj/item/detonator/update_icon() - . = ..() - if(bombs.len) +/obj/item/detonator/update_icon_state() + if(length(bombs)) icon_state = "Detonator-1" else icon_state = initial(icon_state) + /obj/item/detonator/attack_self(mob/user) playsound(src, 'sound/items/detonator.ogg', 40) if(bombs.len) @@ -213,5 +213,5 @@ charge.detonate() else to_chat(user, span_warning("There is no charges linked to a detonator!")) - update_icon() + update_icon(UPDATE_ICON_STATE) . = ..() diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index a2f37176169..48b30d10617 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -120,14 +120,22 @@ . = ..() update_icon() -/obj/item/organ/internal/regenerative_core/legion/update_icon() + +/obj/item/organ/internal/regenerative_core/legion/update_icon_state() icon_state = inert ? "legion_soul_inert" : "legion_soul" - cut_overlays() + + +/obj/item/organ/internal/regenerative_core/legion/update_overlays() + . = ..() if(!inert && !preserved) - add_overlay("legion_soul_crackle") - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + . += "legion_soul_crackle" + addtimer(CALLBACK(src, PROC_REF(buttons_update)), 0.1 SECONDS) + + +/obj/item/organ/internal/regenerative_core/legion/proc/buttons_update() + for(var/datum/action/action as anything in actions) + action.UpdateButtonIcon() + /obj/item/organ/internal/regenerative_core/legion/go_inert() ..() diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index b1fb1e4a627..d8068e82f76 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -202,7 +202,7 @@ pixel_y = -32 /obj/item/gps/computer/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) playsound(loc, W.usesound, 50, 1) user.visible_message("[user] disassembles the gps.", \ "You start to disassemble the gps...", "You hear clanking and banging noises.") @@ -295,7 +295,7 @@ qdel(src) /obj/structure/fans/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) playsound(loc, W.usesound, 50, 1) user.visible_message("[user] disassembles the fan.", \ "You start to disassemble the fan...", "You hear clanking and banging noises.") @@ -338,7 +338,7 @@ density = 0 /obj/structure/tubes/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) playsound(loc, W.usesound, 50, 1) user.visible_message("[user] disassembles [src].", \ "You start to disassemble [src]...", "You hear clanking and banging noises.") @@ -365,7 +365,7 @@ /obj/item/gun/magic/staff/spellblade, /obj/item/gun/magic/wand/death, /obj/item/gun/magic/wand/fireball, - /obj/item/stack/telecrystal/hundread, + /obj/item/stack/telecrystal/hundred, /obj/item/banhammer) /obj/item/fakeartefact/New() diff --git a/code/modules/mining/equipment/upgrades.dm b/code/modules/mining/equipment/upgrades.dm index 715b95301bb..e45ecaf8b21 100644 --- a/code/modules/mining/equipment/upgrades.dm +++ b/code/modules/mining/equipment/upgrades.dm @@ -18,24 +18,39 @@ . = ..() addtimer(CALLBACK(src, PROC_REF(go_inert)), 50 SECONDS) //you know... + +/obj/item/magmite_parts/update_icon_state() + icon_state = "upgrade_parts[inert ? "_inert" : ""]" + + +/obj/item/magmite_parts/update_name(updates = ALL) + . = ..() + name = initial(name) + if(inert) + name = "inert [name]" + + +/obj/item/magmite_parts/update_desc(updates = ALL) + . = ..() + desc = inert ? "It appears to have lost its magma-like glow." : initial(desc) + + /obj/item/magmite_parts/proc/go_inert() if(inert) return visible_message(span_warning("The [src] loses it's glow!")) inert = TRUE - name = "inert plasma magmite upgrade parts" - icon_state = "upgrade_parts_inert" - desc += "It appears to have lost its magma-like glow." + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) + /obj/item/magmite_parts/proc/restore() if(!inert) return inert = FALSE - name = initial(name) - icon_state = initial(icon_state) - desc = initial(desc) + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME|UPDATE_DESC) addtimer(CALLBACK(src, PROC_REF(go_inert)), 50 SECONDS) + /obj/item/magmite_parts/afterattack(atom/target, mob/user, proximity_flag, click_parameters) if(!proximity_flag) return diff --git a/code/modules/mining/equipment/weather_radio.dm b/code/modules/mining/equipment/weather_radio.dm index 1c7937541f8..389f9954ebb 100644 --- a/code/modules/mining/equipment/weather_radio.dm +++ b/code/modules/mining/equipment/weather_radio.dm @@ -28,7 +28,7 @@ START_PROCESSING(SSprocessing, src) set_frequency(SUP_FREQ) update_light_color() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/radio/weather_monitor/Destroy() . = ..() @@ -41,18 +41,18 @@ if(previous_level == warning_level && previous_danger == is_weather_dangerous) return // No change atom_say(get_warning_message()) - update_icon() + update_icon(UPDATE_OVERLAYS) update_light_color() -/obj/item/radio/weather_monitor/update_icon() - overlays.Cut() +/obj/item/radio/weather_monitor/update_overlays() + . = ..() switch(warning_level) if(WEATHER_ALERT_CLEAR) - overlays += state_normal + . += state_normal if(WEATHER_ALERT_INCOMING) - overlays += state_warning + . += state_warning if(WEATHER_ALERT_IMMINENT_OR_ACTIVE) - overlays += (is_weather_dangerous) ? state_danger : state_warning + . += is_weather_dangerous ? state_danger : state_warning /obj/item/radio/weather_monitor/proc/update_light_color() switch(warning_level) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index f880c90c394..3f2e15fa28b 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -38,15 +38,15 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) beacon = A to_chat(user, "You link the extraction pack to the beacon system.") -/obj/item/extraction_pack/MouseDrop(atom/over) +/obj/item/extraction_pack/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) if(!..()) return FALSE - if(!(loc == usr && loc.Adjacent(over))) + if(!(loc == usr && loc.Adjacent(over_object))) return FALSE - if(usr.stat || !ishuman(usr) || usr.incapacitated()) + if(!ishuman(usr) || usr.incapacitated()) return FALSE - over.add_fingerprint(usr) - afterattack(over, usr, TRUE) + over_object.add_fingerprint(usr) + afterattack(over_object, usr, TRUE, params) return TRUE /obj/item/extraction_pack/afterattack(atom/movable/A, mob/living/carbon/human/user, flag, params) diff --git a/code/modules/mining/lavaland/loot/hierophant_loot.dm b/code/modules/mining/lavaland/loot/hierophant_loot.dm index 1cd2ac26826..29958f11501 100644 --- a/code/modules/mining/lavaland/loot/hierophant_loot.dm +++ b/code/modules/mining/lavaland/loot/hierophant_loot.dm @@ -109,19 +109,18 @@ chaser_speed = max(chaser_speed + health_percent, 0.5) //one tenth of a second faster for each missing 10% of health blast_range -= round(health_percent * 10) //one additional range for each missing 10% of health -/obj/item/hierophant_club/update_icon() + +/obj/item/hierophant_club/update_icon_state() icon_state = "hierophant_club[timer <= world.time ? "_ready":""][(beacon && !QDELETED(beacon)) ? "":"_beacon"]" item_state = icon_state - if(ismob(loc)) - var/mob/M = loc - M.update_inv_l_hand() - M.update_inv_r_hand() - M.update_inv_back() + update_equipped_item() + /obj/item/hierophant_club/proc/prepare_icon_update() - update_icon() + update_icon(UPDATE_ICON_STATE) sleep(timer - world.time) - update_icon() + update_icon(UPDATE_ICON_STATE) + /obj/item/hierophant_club/ui_action_click(mob/user, actiontype) if(actiontype == /datum/action/item_action/toggle_unfriendly_fire) //toggle friendly fire... @@ -174,7 +173,8 @@ user.visible_message("[user] starts to glow faintly...") timer = world.time + 50 INVOKE_ASYNC(src, PROC_REF(prepare_icon_update)) - beacon.icon_state = "hierophant_tele_on" + beacon.teleporting = TRUE + beacon.update_icon(UPDATE_ICON_STATE) var/obj/effect/temp_visual/hierophant/telegraph/edge/TE1 = new /obj/effect/temp_visual/hierophant/telegraph/edge(user.loc) var/obj/effect/temp_visual/hierophant/telegraph/edge/TE2 = new /obj/effect/temp_visual/hierophant/telegraph/edge(beacon.loc) if(do_after(user, 40, target = user) && user && beacon) @@ -186,7 +186,8 @@ user.update_action_buttons_icon() timer = world.time INVOKE_ASYNC(src, PROC_REF(prepare_icon_update)) - beacon.icon_state = "hierophant_tele_off" + beacon.teleporting = FALSE + beacon.update_icon(UPDATE_ICON_STATE) return new /obj/effect/temp_visual/hierophant/telegraph(T, user) new /obj/effect/temp_visual/hierophant/telegraph(source, user) @@ -199,7 +200,8 @@ timer = world.time INVOKE_ASYNC(src, PROC_REF(prepare_icon_update)) if(beacon) - beacon.icon_state = "hierophant_tele_off" + beacon.teleporting = FALSE + beacon.update_icon(UPDATE_ICON_STATE) return if(is_blocked_turf(T, TRUE)) teleporting = FALSE @@ -207,7 +209,8 @@ user.update_action_buttons_icon() timer = world.time INVOKE_ASYNC(src, PROC_REF(prepare_icon_update)) - beacon.icon_state = "hierophant_tele_off" + beacon.teleporting = FALSE + beacon.update_icon(UPDATE_ICON_STATE) return add_attack_logs(user, beacon, "Teleported self from ([AREACOORD(source)]) to ([AREACOORD(beacon)])") new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, user) @@ -222,14 +225,16 @@ INVOKE_ASYNC(src, PROC_REF(teleport_mob), source, L, T, user) //regardless, take all mobs near us along sleep(6) //at this point the blasts detonate if(beacon) - beacon.icon_state = "hierophant_tele_off" + beacon.teleporting = FALSE + beacon.update_icon(UPDATE_ICON_STATE) else qdel(TE1) qdel(TE2) timer = world.time INVOKE_ASYNC(src, PROC_REF(prepare_icon_update)) if(beacon) - beacon.icon_state = "hierophant_tele_off" + beacon.teleporting = FALSE + beacon.update_icon(UPDATE_ICON_STATE) teleporting = FALSE if(user) user.update_action_buttons_icon() @@ -295,4 +300,260 @@ var/obj/effect/temp_visual/hierophant/blast/B = new(t, user, friendly_fire_check) B.damage = 15 //keeps monster damage boost due to lower damage +/obj/item/clothing/accessory/necklace/hierophant_talisman + name = "Dormnant talisman of warding" + desc = "Hierophant's talisman of warding. It will save you." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "hierophant_talisman_nonactive" + item_state = "hierophant_talisman_nonactive" + item_color = "hierophant_talisman_nonactive" + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 100, "acid" = 100) + slot_flags = SLOT_TIE + allow_duplicates = FALSE + var/possessed = FALSE + var/mob/living/simple_animal/shade/talisman/slave // Talisman + var/obj/effect/proc_holder/spell/hierophant_talisman_heal/spell_heal + var/obj/effect/proc_holder/spell/hierophant_talisman_teleport/spell_teleport + var/obj/effect/proc_holder/spell/hierophant_talisman_message/spell_message + +/obj/item/clothing/accessory/necklace/hierophant_talisman/attack_self(mob/living/user) + if(possessed) + if(!slave) + to_chat(user, span_hierophant("Still searching unique soul for you..")) + return + if(slave.master != user.ckey) + to_chat(slave, span_hierophant("Now you are serving to [user.real_name]. You must ward him.")) + to_chat(user, span_hierophant("Now this talisman is yours... It will ward you...")) + log_game("[user.real_name] has become master of [slave.ckey] hierophant's talisman.") + slave.master = user.ckey + else + to_chat(user, span_hierophant("This talisman is already yours... WHAT ELSE YOU NEED!?")) + return + + + to_chat(user, span_hierophant("You attempt to awake my appertience...")) + + possessed = TRUE + + var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the spirit of [user.real_name]'s talisman of warding?", ROLE_PAI, FALSE, 15 SECONDS, source = src) + var/mob/dead/observer/theghost = null + + if(length(candidates)) + theghost = pick(candidates) + slave = new(src) + slave.ckey = theghost.ckey + slave.master = user.ckey + name = "Talisman of warding" + slave.real_name = name + slave.name = name + var/input = stripped_input(slave, "What are you named?", null, "", MAX_NAME_LEN) + if(QDELETED(src)) + return + if(input) + name = input + slave.real_name = input + slave.name = input + log_game("[slave.ckey] has become spirit of [user.real_name]'s talisman.") + to_chat(slave, span_hierophant("Now you are serving to [user.real_name]. You must ward him.")) + update_icon(UPDATE_ICON_STATE) + else + log_game("No one has decided to be [user.real_name]'s talisman.") + to_chat(user, span_hierophant("This talisman is dormnant... Try again or later...")) + possessed = FALSE + +/obj/item/clothing/accessory/necklace/hierophant_talisman/update_icon_state() + icon_state = "hierpohant_talisman_active" + item_state = "hierpohant_talisman_active" + item_color = "hierophant_talisman_active" + +/obj/item/clothing/accessory/necklace/hierophant_talisman/Initialize(mapload) + .=..() + spell_heal = new + spell_teleport = new + spell_message = new + +/obj/item/clothing/accessory/necklace/hierophant_talisman/Destroy() + for(var/mob/living/simple_animal/shade/talisman/S in contents) + to_chat(S, span_hierophant("You were destroyed! So... I will create another one in future.")) + playsound(get_turf(src),'sound/magic/repulse.ogg', 200, 1) + S.ghostize() + qdel(S) + QDEL_NULL(spell_heal) + QDEL_NULL(spell_teleport) + QDEL_NULL(spell_message) + return ..() + +/obj/effect/proc_holder/spell/hierophant_talisman_heal + name = "Beacon of help" + desc = "Healing your master." + base_cooldown = 20 SECONDS + clothes_req = FALSE + human_req = FALSE + phase_allowed = TRUE + should_recharge_after_cast = FALSE + stat_allowed = UNCONSCIOUS + action_icon_state = "hierophant_talisman_heal" + action_background_icon_state = "bg_hierophant_talisman" + panel = "Hierophant Talisman" + +/obj/effect/proc_holder/spell/hierophant_talisman_heal/create_new_targeting() + var/datum/spell_targeting/targeted/T = new() + T.target_priority = SPELL_TARGET_CLOSEST + T.max_targets = 1 + T.range = 1 + T.use_turf_of_user = TRUE + return T + +/obj/effect/proc_holder/spell/hierophant_talisman_heal/valid_target(mob/living/carbon/human/target, mob/living/simple_animal/shade/talisman/user) + if (target.ckey == user.master) + return TRUE + return FALSE + +/obj/effect/proc_holder/spell/hierophant_talisman_heal/cast(list/targets, mob/living/simple_animal/shade/talisman/user = usr) + var/mob/living/carbon/human/target = targets[1] + target.adjustBruteLoss(-15) + target.adjustFireLoss(-15) + target.adjustToxLoss(-15) + if(target.health / target.maxHealth <= 0.25) + cooldown_handler.start_recharge(10 SECONDS) + to_chat(user, span_hierophant("This creature is dying... Pathetic but... You must protect this creature...")) + else + cooldown_handler.start_recharge(20 SECONDS) + to_chat(user, span_hierophant("You are warding... This creature... Very well my apprentice.")) + to_chat(target, span_hierophant("My talisman is warding you... Pathetic...")) + +/obj/effect/proc_holder/spell/hierophant_talisman_teleport + name = "Hierophant's lesser teleportation" + desc = "Blink your master to location." + base_cooldown = 30 SECONDS + clothes_req = FALSE + human_req = FALSE + phase_allowed = TRUE + should_recharge_after_cast = FALSE + stat_allowed = UNCONSCIOUS + centcom_cancast = FALSE + action_icon_state = "hierophant_talisman_teleport" + action_background_icon_state = "bg_hierophant_talisman" + panel = "Hierophant Talisman" + +/obj/effect/proc_holder/spell/hierophant_talisman_teleport/create_new_targeting() + var/datum/spell_targeting/click/T = new() + T.allowed_type = /turf/simulated + T.range = 3 + T.use_turf_of_user = TRUE + return T + +/obj/effect/proc_holder/spell/hierophant_talisman_teleport/cast(list/targets, mob/living/simple_animal/shade/talisman/user) + var/turf/target_turf = get_turf(targets[1]) + for(var/mob/living/carbon/human/H in GLOB.human_list) + if(H.ckey == user.master) + var/turf/start_turf = get_turf(H) + H.forceMove(target_turf) + new /obj/effect/temp_visual/hierophant/telegraph(target_turf, src) + new /obj/effect/temp_visual/hierophant/telegraph(start_turf, src) + playsound(start_turf,'sound/machines/airlock_open.ogg', 200, 1) + if(H.health / H.maxHealth <= 0.25) + cooldown_handler.start_recharge(15 SECONDS) + to_chat(user, span_hierophant("Blink! Blink! Blink! You shall never surrender.")) + user.say("Instant teleportation, my fellow friend!") + else + cooldown_handler.start_recharge(30 SECONDS) + to_chat(user, span_hierophant("Dance, my pretties!")) + user.say("Blink, my fellow friend!") + addtimer(CALLBACK(src, PROC_REF(talisman_teleport_2), target_turf, start_turf), 2) + break + +/obj/effect/proc_holder/spell/hierophant_talisman_teleport/proc/talisman_teleport_2(turf/T, turf/S) + new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src) + new /obj/effect/temp_visual/hierophant/telegraph/teleport(S, src) + animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out + visible_message(span_hierophant("[src] fades out!")) + set_density(FALSE) + addtimer(CALLBACK(src, PROC_REF(talisman_teleport_3), T), 2) + +/obj/effect/proc_holder/spell/hierophant_talisman_teleport/proc/talisman_teleport_3(turf/T) + animate(src, alpha = 255, time = 2, easing = EASE_IN) //fade IN + set_density(TRUE) + visible_message(span_hierophant("[src] fades in!")) + +/obj/effect/proc_holder/spell/hierophant_talisman_message + name = "Telepathtic Message" + desc = "Send a telepathic message to those humans." + base_cooldown = 5 SECONDS + clothes_req = FALSE + human_req = FALSE + phase_allowed = TRUE + should_recharge_after_cast = TRUE + stat_allowed = UNCONSCIOUS + action_icon_state = "hierophant_talisman_message" + action_background_icon_state = "bg_hierophant_talisman" + panel = "Hierophant Talisman" + +/obj/effect/proc_holder/spell/hierophant_talisman_message/create_new_targeting() + var/datum/spell_targeting/click/T = new() + T.selection_type = SPELL_SELECTION_RANGE + T.use_turf_of_user = TRUE + return T + +/obj/effect/proc_holder/spell/hierophant_talisman_message/cast(list/targets, mob/living/simple_animal/shade/talisman/user) + var/mob/living/carbon/human/choice = targets[1] + var/msg = stripped_input(usr, "What do you wish to tell [choice]?", null, "") + if(!(msg)) + return + add_say_logs(usr, msg, choice, "SLAUGHTER") + to_chat(usr, span_hierophant("You translating directly to mind [choice]: [msg]")) + to_chat(choice, "[span_deadsay(span_hierophant("A strange, magical and at the same time alien broadcast conveys to you... "))][span_hierophant("[msg]")]") + for(var/mob/dead/observer/G in GLOB.player_list) + G.show_message(span_hierophant("Hierophant's message from [usr] ([ghost_follow_link(usr, ghost=G)]) to [choice] ([ghost_follow_link(choice, ghost=G)]): [msg]")) + +/obj/item/clothing/accessory/necklace/hierophant_talisman/on_attached(obj/item/clothing/under/S, mob/user) + . = ..() + if(!ishuman(user) || !slave) + return + if(slave.master == user.ckey) + slave.mob_spell_list += spell_heal + slave.mob_spell_list += spell_teleport + slave.mob_spell_list += spell_message + spell_heal.action.Grant(slave) + spell_teleport.action.Grant(slave) + spell_message.action.Grant(slave) + +/obj/item/clothing/accessory/necklace/hierophant_talisman/on_removed(mob/user) + . = ..() + if(!ishuman(user) || !slave) + return + slave.mob_spell_list -= spell_heal + slave.mob_spell_list -= spell_teleport + slave.mob_spell_list -= spell_message + spell_heal.action.Remove(slave) + spell_teleport.action.Remove(slave) + spell_message.action.Remove(slave) + +/obj/item/clothing/accessory/necklace/hierophant_talisman/attached_unequip() + if(!ishuman(usr)) + return + if(!slave) + return ..() + slave.mob_spell_list -= spell_heal + slave.mob_spell_list -= spell_teleport + slave.mob_spell_list -= spell_message + spell_heal.action.Remove(slave) + spell_teleport.action.Remove(slave) + spell_message.action.Remove(slave) + return ..() + +/obj/item/clothing/accessory/necklace/hierophant_talisman/attached_equip() + if(!ishuman(usr)) + return + if(!slave) + return ..() + if(slave.master == usr.ckey) + slave.mob_spell_list += spell_heal + slave.mob_spell_list += spell_teleport + slave.mob_spell_list += spell_message + spell_heal.action.Grant(slave) + spell_teleport.action.Grant(slave) + spell_message.action.Grant(slave) + return ..() + #undef HIEROPHANT_CLUB_CARDINAL_DAMAGE diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index b8cf1d16289..1d1413d8bc7 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -21,62 +21,50 @@ name = "paradox bag" desc = "Somehow, it's in two places at once." -/obj/item/shared_storage/red/New() - ..() +/obj/item/shared_storage/red/Initialize(mapload) + . = ..() if(!bag) - var/obj/item/storage/backpack/shared/S = new(src) + var/obj/item/storage/backpack/shared/shared_storage = new(src) var/obj/item/shared_storage/blue = new(loc) + bag = shared_storage + blue.bag = shared_storage - bag = S - blue.bag = S /obj/item/shared_storage/attackby(obj/item/W, mob/user, params) if(bag) bag.loc = user bag.attackby(W, user, params) + add_fingerprint(user) + + +/obj/item/shared_storage/proc/open_bag(mob/user) + if(bag) + bag.loc = user + bag.attack_hand(user) + add_fingerprint(user) + /obj/item/shared_storage/attack_self(mob/living/carbon/user) - if(!iscarbon(user)) - return - if(src == user.l_hand || src == user.r_hand) - if(bag) - bag.loc = user - bag.attack_hand(user) - else - ..() + if(!bag || !iscarbon(user) || !user.is_in_hands(src)) + return ..() -/obj/item/shared_storage/attack_hand(mob/living/carbon/user) - if(!iscarbon(user)) - return - if(loc == user && user.back && user.back == src) - if(bag) - bag.loc = user - bag.attack_hand(user) - else - ..() + open_bag(user) + + +/obj/item/shared_storage/AltClick(mob/user) + if(!bag || !iscarbon(user) || !Adjacent(user)) + return ..() -/obj/item/shared_storage/MouseDrop(atom/over_object) - if(iscarbon(usr)) - var/mob/M = usr + open_bag(user) - if(!over_object) - return - if(istype(M.loc, /obj/mecha)) - return - if(!M.restrained() && !M.stat) - playsound(loc, "rustle", 50, 1, -5) +/obj/item/shared_storage/attack_hand(mob/living/carbon/user) + if(!iscarbon(user) || !bag || loc != user || !user.back || user.back != src) + return ..() - if(istype(over_object, /obj/screen/inventory/hand)) - if(!M.drop_item_ground(src)) - return - M.put_in_active_hand(src) - else if(bag) - bag.loc = usr - bag.attack_hand(usr) + open_bag(user) - add_fingerprint(M) //Book of Babel @@ -104,7 +92,7 @@ desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says: 'erqo'hyy tvi'rf lbh jv'atf'." list_reagents = list("flightpotion" = 5) -/obj/item/reagent_containers/glass/bottle/potion/update_icon() +/obj/item/reagent_containers/glass/bottle/potion/update_icon_state() if(reagents.total_volume) icon_state = "potionflask" else @@ -243,18 +231,26 @@ var/sight_flags = SEE_MOBS var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + +/obj/item/wisp_lantern/update_icon_state() + if(!wisp) + icon_state = "lantern" + return + icon_state = "lantern[wisp.loc == src ? "" : "-blue"]" + + /obj/item/wisp_lantern/attack_self(mob/user) if(!wisp) to_chat(user, "The wisp has gone missing!") - icon_state = "lantern" + update_icon(UPDATE_ICON_STATE) return if(wisp.loc == src) RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, PROC_REF(update_user_sight)) to_chat(user, "You release the wisp. It begins to bob around your head.") - icon_state = "lantern" - spawn() wisp.orbit(user, 20) // spawn prevents endless loop in .orbit from blocking code execution here + update_icon(UPDATE_ICON_STATE) + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, orbit), user, 20) set_light(0) user.update_sight() @@ -272,7 +268,7 @@ user.update_sight() to_chat(user, "Your vision returns to normal.") - icon_state = "lantern-blue" + update_icon(UPDATE_ICON_STATE) SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Returned") // returned /obj/item/wisp_lantern/Initialize(mapload) diff --git a/code/modules/mining/lavaland/world_anvil.dm b/code/modules/mining/lavaland/world_anvil.dm index 0912589648f..f4359696e61 100644 --- a/code/modules/mining/lavaland/world_anvil.dm +++ b/code/modules/mining/lavaland/world_anvil.dm @@ -29,13 +29,18 @@ GLOB.anvils -= src . = ..() -/obj/structure/world_anvil/update_icon() +/obj/structure/world_anvil/update_icon_state() icon_state = forge_charges > 0 ? "anvil_a" : "anvil" + + +/obj/structure/world_anvil/proc/update_state() + update_icon(UPDATE_ICON_STATE) if(forge_charges > 0) set_light(4,1,LIGHT_COLOR_ORANGE) else set_light(0) + /obj/structure/world_anvil/examine(mob/user) . = ..() . += "It currently has [forge_charges] forge[forge_charges != 1 ? "s" : ""] remaining." @@ -46,14 +51,14 @@ forge_charges = forge_charges + placed_ore.quality to_chat(user,"You place down the gibtonite on the World Anvil, and watch as the gibtonite melts into it. The World Anvil is now heated enough for [forge_charges] forge[forge_charges > 1 ? "s" : ""].") qdel(placed_ore) - update_icon() + update_state() return if(istype(I, /obj/item/gem/amber)) var/obj/item/gem/amber/gem = I forge_charges += 3 to_chat(user,"You place down the draconic amber on the World Anvil, and watch as amber melts into it. The World Anvil is now heated enough for [forge_charges] forge[forge_charges > 1 ? "s" : ""].") qdel(gem) - update_icon() + update_state() return if(forge_charges <= 0) to_chat(user,"The World Anvil is not hot enough to be usable!") @@ -83,5 +88,5 @@ forge_charges-- if(forge_charges <= 0) visible_message("The World Anvil cools down.") - update_icon() + update_state() diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 74acb4926e6..6ea89c3a630 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -229,7 +229,7 @@ add_fingerprint(user) return if(panel_open) - if(istype(I, /obj/item/crowbar)) + if(I.tool_behaviour == TOOL_CROWBAR) remove_id() //Prevents deconstructing the ORM from deleting whatever ID was inside it. default_deconstruction_crowbar(user, I) return TRUE diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index ca8016d5e59..266e00e97c4 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -16,25 +16,31 @@ var/refined_type = null //What this ore defaults to being refined into var/list/stack_overlays -/obj/item/stack/ore/update_icon() + +/obj/item/stack/ore/update_overlays() + . = ..() + var/difference = min(ORESTACK_OVERLAYS_MAX, amount) - (LAZYLEN(stack_overlays)+1) if(difference == 0) + . += stack_overlays return - else if(difference < 0 && LAZYLEN(stack_overlays)) //amount < stack_overlays, remove excess. - cut_overlays() - if (LAZYLEN(stack_overlays)-difference <= 0) - stack_overlays = null; + + if(difference < 0 && LAZYLEN(stack_overlays)) //amount < stack_overlays, remove excess. + if(LAZYLEN(stack_overlays)-difference <= 0) + stack_overlays = null else stack_overlays.len += difference + else if(difference > 0) //amount > stack_overlays, add some. - cut_overlays() for(var/i in 1 to difference) var/mutable_appearance/newore = mutable_appearance(icon, icon_state) newore.pixel_x = rand(-8,8) newore.pixel_y = rand(-8,8) LAZYADD(stack_overlays, newore) + if(stack_overlays) - add_overlay(stack_overlays) + . += stack_overlays + /obj/item/stack/ore/Initialize(mapload, new_amount , merge = TRUE) . = ..() @@ -269,7 +275,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ return if(wires && !primed) - if(istype(I, /obj/item/wirecutters) || istype(I, /obj/item/multitool) || istype(I, /obj/item/assembly/signaler)) + if(I.tool_behaviour == TOOL_WIRECUTTER || I.tool_behaviour == TOOL_MULTITOOL || istype(I, /obj/item/assembly/signaler)) wires.Interact(user) return @@ -277,7 +283,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ GibtoniteReaction(user) return if(primed) - if(istype(I, /obj/item/mining_scanner) || istype(I, /obj/item/t_scanner/adv_mining_scanner) || istype(I, /obj/item/multitool) || istype(I, /obj/item/mecha_parts/mecha_equipment/mining_scanner)) + if(istype(I, /obj/item/mining_scanner) || istype(I, /obj/item/t_scanner/adv_mining_scanner) || I.tool_behaviour == TOOL_MULTITOOL || istype(I, /obj/item/mecha_parts/mecha_equipment/mining_scanner)) primed = 0 user.visible_message("The chain reaction was stopped! ...The ore's quality looks diminished.", "You stopped the chain reaction. ...The ore's quality looks diminished.") icon_state = "Gibtonite ore" diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 056d86386c0..f33fc6814e0 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -22,7 +22,7 @@ S.remove_from_storage(O, src) //This will move the item to this item's contents CHECK_TICK to_chat(user, "You empty the satchel into the box.") - else if(istype(W, /obj/item/crowbar)) + else if(W.tool_behaviour == TOOL_CROWBAR) playsound(src, W.usesound, 50, 1) var/obj/item/crowbar/C = W if(do_after(user, 50 * C.toolspeed * gettoolspeedmod(user), target = src)) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index aa3a71e62d3..3e71a7c912a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -95,11 +95,13 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) //starts ghosts off with all HUDs. show_me_the_hud(THOUGHTS_HUD) toggle_all_huds_on(body) + RegisterSignal(src, COMSIG_MOB_HUD_CREATED, PROC_REF(set_ghost_darkness_level)) //something something don't call this until we have a HUD ..() /mob/dead/observer/Destroy() toggle_all_huds_off() + UnregisterSignal(src, COMSIG_MOB_HUD_CREATED) if(ghostimage) GLOB.ghost_images -= ghostimage QDEL_NULL(ghostimage) @@ -114,6 +116,14 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) if(!invisibility) . += "It seems extremely obvious." +/mob/dead/observer/proc/set_ghost_darkness_level() + if(!client) + return + UnregisterSignal(src, COMSIG_MOB_HUD_CREATED) + lighting_alpha = client.prefs.ghost_darkness_level //Remembers ghost lighting pref + update_sight() + + // This seems stupid, but it's the easiest way to avoid absolutely ridiculous shit from happening // Copying an appearance directly from a mob includes it's verb list, it's invisibility, it's alpha, and it's density // You might recognize these things as "fucking ridiculous to put in an appearance" @@ -605,19 +615,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp update_sight() to_chat(usr, "You [(ghostvision?"now":"no longer")] have ghost vision.") -/mob/dead/observer/verb/toggle_darkness() - set name = "Toggle Darkness" +/mob/dead/observer/verb/pick_darkness() + set name = "Pick Darkness" + set desc = "Choose how much darkness you want to see." set category = "Ghost" - switch(lighting_alpha) - if (LIGHTING_PLANE_ALPHA_VISIBLE) - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE - if (LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - if (LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE) - lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE - else - lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE - + var/list/ghost_darkness_levels = list("Strong Darkness" = LIGHTING_PLANE_ALPHA_VISIBLE, + "Darkness" = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE, + "Light Darkness" = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE, + "No Darkness" = LIGHTING_PLANE_ALPHA_INVISIBLE) + var/desired_dark = tgui_input_list(usr, "Choose how much darkness you want to see", "Pick darkness", ghost_darkness_levels) + if(isnull(desired_dark)) + return + if(!client) + return + client.prefs.ghost_darkness_level = ghost_darkness_levels[desired_dark] + client.prefs.save_preferences(src) + lighting_alpha = client.prefs.ghost_darkness_level update_sight() /mob/dead/observer/update_sight() diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 5de82961ce8..06614e40139 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -39,11 +39,13 @@ var/list/data = list() var/list/alive = list() + var/list/highlights = list() var/list/antagonists = list() var/list/dead = list() var/list/ghosts = list() var/list/misc = list() var/list/npcs = list() + var/length_of_ghosts = length(get_observers()) var/list/pois = getpois(mobs_only = FALSE, skip_mindless = FALSE) for(var/name in pois) @@ -62,6 +64,12 @@ continue serialized["ref"] = "\ref[M]" + var/orbiters = 0 + if(ismob(M)) + orbiters = M.ghost_orbiting + + if(orbiters > 0) + serialized["orbiters"] = orbiters if(istype(M)) if(isnewplayer(M)) // People in the lobby screen; only have their ckey as a name. @@ -73,6 +81,8 @@ else if(M.stat == DEAD) dead += list(serialized) else + if(orbiters >= 0.2 * length_of_ghosts) // They're important if 20% of observers are watching them + highlights += list(serialized) alive += list(serialized) var/datum/mind/mind = M.mind @@ -130,10 +140,13 @@ antagonists += list(antag_serialized) else + if(length(orbiters) >= 0.2 * length_of_ghosts) // If a bunch of people are orbiting an object, like the nuke disk. + highlights += list(serialized) misc += list(serialized) data["alive"] = alive data["antagonists"] = antagonists + data["highlights"] = highlights data["dead"] = dead data["ghosts"] = ghosts data["misc"] = misc diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 055dbed573c..5d0e54e2500 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -37,8 +37,7 @@ if(ishuman(user)) //eating holder if(target == user) for(var/mob/M in src.contents) - if(devoured(M, user)) - return TRUE + return devoured(M, user) . = ..() /obj/item/holder/proc/show_message(var/message, var/m_type) @@ -77,6 +76,22 @@ /mob/living var/holder_type = null +/mob/living/simple_animal/MouseDrop(atom/over_object) + var/mob/living/carbon/human/human_to_ask = over_object //changed to human to avoid stupid issues like xenos holding animals. + if(!istype(human_to_ask) || !Adjacent(human_to_ask) || !holder_type) + return ..() + if(usr == src) + switch(alert(human_to_ask, "[src] wants you to pick [p_them()] up. Do it?",,"Yes","No")) + if("Yes") + if(Adjacent(human_to_ask)) + get_scooped(human_to_ask) + else + to_chat(src, "You need to stay in reaching distance to be picked up.") + if("No") + to_chat(src, "[human_to_ask] decided not to pick you up.") + else + return ..() + /mob/living/proc/get_scooped(var/mob/living/carbon/grabber) if(!holder_type) return diff --git a/code/modules/mob/holder_pet_carrier.dm b/code/modules/mob/holder_pet_carrier.dm index d0b337b7c1e..25a2bc9199d 100644 --- a/code/modules/mob/holder_pet_carrier.dm +++ b/code/modules/mob/holder_pet_carrier.dm @@ -1,6 +1,6 @@ /obj/item/pet_carrier name = "маленькая переноска" - desc = "Переноска для маленьких животных. " + desc = "Переноска для маленьких животных." icon_state = "pet_carrier" item_state = "pet_carrier" max_integrity = 100 @@ -15,9 +15,10 @@ var/contains_pet_color_open = "#d8d8d8ff" var/contains_pet_color_close = "#949494ff" + /obj/item/pet_carrier/normal name = "переноска" - desc = "Переноска для небольших животных. " + desc = "Переноска для небольших животных." icon_state = "pet_carrier_normal" item_state = "pet_carrier_normal" max_integrity = 200 @@ -29,16 +30,19 @@ . = ..() if(!color_skin) color_skin = pick(possible_skins) - update_icon() + update_icon(UPDATE_OVERLAYS) + /obj/item/pet_carrier/Destroy() free_content() . = ..() + /obj/item/pet_carrier/attack_self(mob/user) ..() change_state() + /obj/item/pet_carrier/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/holder)) var/obj/item/holder/H = I @@ -49,73 +53,89 @@ return FALSE . = ..() -/obj/item/pet_carrier/emp_act(var/intensity) + +/obj/item/pet_carrier/emp_act(intensity) for(var/mob/living/M in contents) M.emp_act(intensity) -/obj/item/pet_carrier/ex_act(var/intensity) + +/obj/item/pet_carrier/ex_act(intensity) for(var/mob/living/M in contents) M.ex_act(intensity) + /obj/item/pet_carrier/AltClick(mob/user) if(ishuman(user) && Adjacent(user) && !user.incapacitated(FALSE, TRUE, TRUE)) - try_free_content(user = user) + try_free_content(null, user) -/obj/item/pet_carrier/proc/put_in_carrier(var/mob/living/target, var/mob/living/user) + +/obj/item/pet_carrier/proc/put_in_carrier(mob/living/target, mob/living/user) if(!opened) - to_chat(user, "Ваша переноска закрыта!") + to_chat(user, span_warning("Ваша переноска закрыта!")) return FALSE if(contains_pet) - to_chat(user, "Ваша переноска заполнена!") + to_chat(user, span_warning("Ваша переноска заполнена!")) return FALSE if(target.mob_size > mob_size) - to_chat(user, "Ваша переноска слишком мала!") + to_chat(user, span_warning("Ваша переноска слишком мала!")) return FALSE if(istype(target, /mob/living/simple_animal/revenant)) return FALSE - //if(target.mob_size < mob_size) - // to_chat(user, "Ваша переноска слишком большая!") - // return FALSE target.forceMove(src) - name += " ([target.name])" - if(target.desc) - desc += "\n\nВнутри [target.name]\n" - desc += target.desc contains_pet = TRUE + update_appearance(UPDATE_OVERLAYS|UPDATE_NAME|UPDATE_DESC) - to_chat(user, "Вы поместили [target.name] в [src.name].") - to_chat(target, "[user.name] поместил[genderize_ru(user.gender,"","а","о","и")] вас в [src.name].") - update_icon() + to_chat(user, span_notice("Вы поместили [target.name] в [name].")) + to_chat(target, span_notice("[user.name] поместил[genderize_ru(user.gender,"","а","о","и")] вас в [name].")) return TRUE + /obj/item/pet_carrier/proc/try_free_content(atom/new_location, mob/user) + add_fingerprint(user) if(!opened) if(user) - to_chat(user, "Ваша переноска закрыта! Содержимое невозможно выгрузить!") + to_chat(user, span_warning("Ваша переноска закрыта! Содержимое невозможно выгрузить!")) return FALSE free_content(new_location) + /obj/item/pet_carrier/proc/free_content(atom/new_location) - if(istype(loc,/turf) || length(contents)) - for(var/mob/living/L in contents) - var/atom/movable/mob_container - mob_container = L - mob_container.forceMove(new_location ? new_location : get_turf(src)) + if(isturf(loc) || length(contents)) + var/atom/drop_loc = new_location ? new_location : get_turf(src) + for(var/mob/living/animal in contents) + animal.forceMove(drop_loc) contains_pet = FALSE - name = initial(name) - desc = initial(desc) - update_icon() - L.resting = FALSE + update_appearance(UPDATE_OVERLAYS|UPDATE_NAME|UPDATE_DESC) + animal.resting = FALSE return TRUE return FALSE + /obj/item/pet_carrier/proc/change_state() opened = !opened - update_icon() + update_icon(UPDATE_OVERLAYS) + + +/obj/item/pet_carrier/update_name(updates = ALL) + . = ..() + name = initial(name) + var/mob/living/animal = locate() in src + if(animal) + name += " ([animal.name])" -/obj/item/pet_carrier/update_icon() - overlays.Cut() + +/obj/item/pet_carrier/update_desc(updates = ALL) + . = ..() + desc = initial(desc) + var/mob/living/animal = locate() in src + if(animal) + desc += "\n\nВнутри [animal.name]\n" + desc += animal.desc + + +/obj/item/pet_carrier/update_overlays() + . = ..() if(contains_pet) var/mob/living/M for(var/mob/living/temp_M in contents) @@ -124,59 +144,59 @@ var/image/I = image(M.icon, icon_state = M.icon_state) I.color = opened ? contains_pet_color_open : contains_pet_color_close I.pixel_y = M.mob_size <= MOB_SIZE_TINY ? 6 : 3 - overlays += I + . += I if(!opened) - var/image/I = image(icon, icon_state = "[icon_state]_door") - overlays += I + . += image(icon, icon_state = "[icon_state]_door") if(color_skin) - var/image/I = image(icon, icon_state = "[icon_state]_[color_skin]") - overlays += I + . += image(icon, icon_state = "[icon_state]_[color_skin]") -/obj/item/pet_carrier/emp_act(var/intensity) + +/obj/item/pet_carrier/emp_act(intensity) for(var/mob/living/M in contents) M.emp_act(intensity) -/obj/item/pet_carrier/ex_act(var/intensity) + +/obj/item/pet_carrier/ex_act(intensity) for(var/mob/living/M in contents) M.ex_act(intensity) -/obj/item/pet_carrier/container_resist(var/mob/living/L) - var/breakout_time = 60 //1 minute - var/breakout_time_open = 5 //seconds for escape - var/dcsec = 10 //seconds * 10deciseconds - to_chat(L, "Вы начали вылезать из переноски (это займет [breakout_time_open] секунд, не двигайтесь)") +/obj/item/pet_carrier/container_resist(mob/living/L) + var/breakout_time = 60 SECONDS + var/breakout_time_open = 5 SECONDS + + to_chat(L, span_warning("Вы начали вылезать из переноски (это займет [breakout_time_open/10] секунд, не двигайтесь).")) var/atom/target_atom = src - if(ishuman(src.loc)) - target_atom = src.loc + if(ishuman(loc)) + target_atom = loc if(opened && L.loc == src) spawn(0) - if(do_after(L,(breakout_time_open*dcsec), target = target_atom)) + if(do_after(L, (breakout_time_open), target = target_atom)) if(!src || !L || L.stat != CONSCIOUS || L.loc != src || !opened) - to_chat(L, "Побег прерван!") + to_chat(L, span_warning("Побег прерван!")) return free_content() - visible_message("[L.name] вылез из переноски.") + visible_message(span_warning("[L.name] вылез из переноски.")) return - to_chat(L, "Вы начали ломиться в закрытую дверцу переноски и пытаетесь её выбить или открыть. (это займет [breakout_time] секунд, не двигайтесь)") + to_chat(L, span_warning("Вы начали ломиться в закрытую дверцу переноски и пытаетесь её выбить или открыть (это займет [breakout_time/10] секунд, не двигайтесь).")) for(var/mob/O in viewers(usr.loc)) - O.show_message("[src.name] начинает трястись!", 1) + O.show_message(span_danger("[name] начинает трястись!"), 1) spawn(0) - if(do_after(L,(breakout_time*dcsec), target = target_atom)) + if(do_after(L, (breakout_time), target = target_atom)) if(!src || !L || L.stat != CONSCIOUS || L.loc != src || opened) //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened - to_chat(L, "Побег прерван!") + to_chat(L, span_warning("Побег прерван!")) return - var/mob/M = src.loc + var/mob/M = loc if(istype(M)) - to_chat(M, "[src.name] вырывается из вашей переноски!") + to_chat(M, "[name] вырывается из вашей переноски!") to_chat(L, "Вы вырываетесь из переноски [M.name]!") else to_chat(L, "Вы выбираетесь из переноски.") @@ -186,6 +206,7 @@ change_state() return + /obj/item/pet_carrier/verb/open_close() set name = "Открыть/закрыть переноску" set desc = "Меняет состояние дверцы переноски, блокируя или разблокируя возможность достать содержимое." @@ -196,6 +217,7 @@ change_state() + /obj/item/pet_carrier/verb/unload_content() set name = "Опустошить переноску" set desc = "Вытаскивает животное из переноски." @@ -204,51 +226,40 @@ if(usr.stat || !ishuman(usr) || !usr.canmove || usr.restrained()) return - try_free_content(user = usr) + try_free_content(null, usr) -/obj/item/pet_carrier/MouseDrop(obj/over_object) - if(ishuman(usr)) - 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(over_object == M && Adjacent(M)) // this must come before the screen objects only block - try_free_content(M, M) - return +/obj/item/pet_carrier/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + if(!ishuman(usr)) + return FALSE + + var/mob/living/carbon/human/user = usr + + // Stops inventory actions in a mech, while ventcrawling and while being incapacitated + if(ismecha(user.loc) || is_ventcrawling(user) || user.incapacitated(FALSE, TRUE, TRUE)) + return FALSE + + if(over_object == user && user.Adjacent(src)) // this must come before the screen objects only block + try_free_content(user = user) + return FALSE + + if(opened && (istype(over_object, /obj/structure/table) || istype(over_object, /turf/simulated/floor) \ + && length(contents) && loc == user && !user.incapacitated() && user.Adjacent(over_object))) + + if(alert(user, "Вытащить питомца из [name] на [over_object.name]?", "Подтверждение", "Да", "Нет") != "Да") + return FALSE + + if(!opened || !user || !over_object || user.incapacitated() || loc != user || !user.Adjacent(over_object)) + return FALSE + + user.face_atom(over_object) + user.visible_message( + span_notice("[user] вытащил питомца из [name] на [over_object.name]."), + span_notice("Вы вытащили питомца из [name] на [over_object.name]."), + ) + try_free_content(get_turf(over_object), user) + return FALSE + + return ..() - if((istype(over_object, /obj/structure/table) || istype(over_object, /turf/simulated/floor)) \ - && length(contents) && loc == usr && !usr.stat && !usr.restrained() && usr.canmove && over_object.Adjacent(usr)) - 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("Да" != alert(usr,"Вытащить питомца из [src.name] на [T.name]?","Подтверждение","Да","Нет")) - 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 - - usr.face_atom(over_object) - usr.visible_message("[usr] вытащил питомца из [src.name] на [over_object.name].", - "Вы вытащили питомца из [src.name] на [over_object.name].") - - try_free_content(T, usr) - return TRUE - - 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.drop_item_ground(src)) - return - M.put_in_r_hand(src, ignore_anim = FALSE) - if("l_hand") - if(!M.drop_item_ground(src)) - return - M.put_in_l_hand(src, ignore_anim = FALSE) - add_fingerprint(usr) - return diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 5e6a36acf48..e468fff446e 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -6,9 +6,8 @@ w_class = WEIGHT_CLASS_NORMAL origin_tech = "biotech=3" origin_tech = "biotech=2;programming=3;engineering=2" - //Revised. Brainmob is now contained directly within object of transfer. MMI in this case. - var/alien = 0 + var/alien = FALSE var/clock = 0 var/syndiemmi = 0 //Whether or not this is a Syndicate MMI var/syndicate = 0 //Used to replace standart modules with the syndicate modules in module pick proc @@ -29,7 +28,28 @@ /// Time at which the ghost belonging to the mind in the mmi can be pinged again to be borged var/next_possible_ghost_ping -/obj/item/mmi/attackby(var/obj/item/O as obj, var/mob/user as mob, params) + +/obj/item/mmi/update_icon_state() + if(held_brain) + icon = held_brain.mmi_icon + icon_state = held_brain.mmi_icon_state + else + icon = initial(icon) + icon_state = initial(icon_state) + + +/obj/item/mmi/update_name(updates = ALL) + . = ..() + if(brainmob) + if(alien) + name = "Man-Machine Interface: Alien - [brainmob.real_name]" + else + name = "Man-Machine Interface: [brainmob.real_name]" + else + name = initial(name) + + +/obj/item/mmi/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/organ/internal/brain/crystal)) to_chat(user, " This brain is too malformed to be able to use with the [src].") return @@ -57,19 +77,9 @@ GLOB.dead_mob_list -= brainmob//Update dem lists GLOB.alive_mob_list += brainmob brainmob.update_sight() - held_brain = B - if(istype(O,/obj/item/organ/internal/brain/xeno)) // kept the type check, as it still does other weird stuff - name = "Man-Machine Interface: Alien - [brainmob.real_name]" - icon = 'icons/mob/alien.dmi' - become_occupied("AlienMMI") - alien = 1 - else - name = "Man-Machine Interface: [brainmob.real_name]" - icon = B.mmi_icon - become_occupied("[B.mmi_icon_state]") - alien = 0 - + alien = istype(O, /obj/item/organ/internal/brain/xeno) + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) if(radio_action) radio_action.UpdateButtonIcon() SSblackbox.record_feedback("amount", "mmis_filled", 1) @@ -121,17 +131,15 @@ "You uninstall the radio from [src].") -/obj/item/mmi/attack_self(mob/user as mob) +/obj/item/mmi/attack_self(mob/user) if(!brainmob) to_chat(user, "You upend the MMI, but there's nothing in it.") else to_chat(user, "You unlock and upend the MMI, spilling the brain onto the floor.") dropbrain(get_turf(user)) - icon = 'icons/obj/assemblies.dmi' - icon_state = "mmi_empty" - name = "Man-Machine Interface" -/obj/item/mmi/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->robot people. + +/obj/item/mmi/proc/transfer_identity(mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->robot people. brainmob = new(src) brainmob.name = H.real_name brainmob.real_name = H.real_name @@ -147,10 +155,9 @@ held_brain = new brain_path(src) // Slime people will keep their slimy brains this way held_brain.dna = brainmob.dna.Clone() held_brain.name = "\the [brainmob.name]'s [initial(held_brain.name)]" - - name = "Man-Machine Interface: [brainmob.real_name]" - become_occupied("mmi_full") brainmob.update_sight() + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) + //I made this proc as a way to have a brainmob be transferred to any created brain, and to solve the //problem i was having with alien/nonalien brain drops. @@ -171,11 +178,8 @@ brainmob = null//Set mmi brainmob var to null held_brain.forceMove(dropspot) held_brain = null + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) -/obj/item/mmi/proc/become_occupied(var/new_icon) - icon_state = new_icon - if(radio) - radio_action.ApplyIcon() /obj/item/mmi/examine(mob/user) . = ..() @@ -200,7 +204,7 @@ procname = "ui_interact" var/obj/item/mmi = null -/datum/action/generic/configure_mmi_radio/New(var/Target, var/obj/item/mmi/M) +/datum/action/generic/configure_mmi_radio/New(Target, obj/item/mmi/M) . = ..() mmi = M diff --git a/code/modules/mob/living/carbon/brain/robotic_brain.dm b/code/modules/mob/living/carbon/brain/robotic_brain.dm index 2513a6882e5..53a21f1886d 100644 --- a/code/modules/mob/living/carbon/brain/robotic_brain.dm +++ b/code/modules/mob/living/carbon/brain/robotic_brain.dm @@ -48,6 +48,22 @@ imprinted_master = null return ..() + +/obj/item/mmi/robotic_brain/update_icon_state() + if(brainmob?.key) + icon_state = occupied_icon + return + icon_state = searching ? searching_icon : blank_icon + + +/obj/item/mmi/robotic_brain/update_name(updates = ALL) + . = ..() + if(brainmob) + name = "[src] ([brainmob.name])" + else + name = initial(name) + + /obj/item/mmi/robotic_brain/attack_self(mob/user) if(isgolem(user)) to_chat(user, "Your golem fingers are too large to press the switch on [src].") @@ -59,24 +75,28 @@ if(brainmob && !brainmob.key && !searching) //Start the process of searching for a new user. to_chat(user, "You carefully locate the manual activation switch and start [src]'s boot process.") - icon_state = searching_icon - ghost_volunteers.Cut() searching = TRUE + update_icon(UPDATE_ICON_STATE) + ghost_volunteers.Cut() request_player() - spawn(600) - if(ghost_volunteers.len) - var/mob/dead/observer/O - while(!istype(O) && ghost_volunteers.len) - O = pick_n_take(ghost_volunteers) - if(istype(O) && check_observer(O)) - transfer_personality(O) - reset_search() + addtimer(CALLBACK(src, PROC_REF(check_volunteers)), 60 SECONDS) else silenced = !silenced to_chat(user, "You toggle the speaker [silenced ? "off" : "on"].") if(brainmob && brainmob.key) to_chat(brainmob, "Your internal speaker has been toggled [silenced ? "off" : "on"].") + +/obj/item/mmi/robotic_brain/proc/check_volunteers() + if(length(ghost_volunteers)) + var/mob/dead/observer/observer + while(!istype(observer) && length(ghost_volunteers)) + observer = pick_n_take(ghost_volunteers) + if(istype(observer) && check_observer(observer)) + transfer_personality(observer) + reset_search() + + /obj/item/mmi/robotic_brain/proc/request_player() for(var/mob/dead/observer/O in GLOB.player_list) if(check_observer(O)) @@ -110,7 +130,6 @@ log_runtime(EXCEPTION("[src] at [loc] attempted to drop brain without a contained brain."), src) /obj/item/mmi/robotic_brain/transfer_identity(mob/living/carbon/H) - name = "[src] ([H])" if(isnull(brainmob.dna)) brainmob.dna = H.dna.Clone() brainmob.name = brainmob.dna.real_name @@ -122,9 +141,9 @@ if(H.mind) H.mind.transfer_to(brainmob) to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a [ejected_flavor_text].") - become_occupied(occupied_icon) - if(radio) - radio_action.ApplyIcon() + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) + if(radio_action) + radio_action.UpdateButtonIcon() /obj/item/mmi/robotic_brain/attempt_become_organ(obj/item/organ/external/parent, mob/living/carbon/human/target) @@ -137,26 +156,24 @@ searching = FALSE brainmob.revive() /// in case of death brainmob.key = candidate.key - name = "[src] ([brainmob.name])" - to_chat(brainmob, "You are a [src], brought into existence on [station_name()].") to_chat(brainmob, "As a non-sentient synthetic intelligence, you answer to [imprinted_master], unless otherwise placed inside of a lawed synthetic structure or mech.") to_chat(brainmob, "Remember, the purpose of your existence is to serve [imprinted_master]'s every word, unless lawed or placed into a mech in the future.") brainmob.mind.assigned_role = "Positronic Brain" - visible_message("[src] chimes quietly.") - become_occupied(occupied_icon) + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) + if(radio_action) + radio_action.UpdateButtonIcon() /obj/item/mmi/robotic_brain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer. if(brainmob && brainmob.key) return - searching = FALSE - icon_state = blank_icon - + update_icon(UPDATE_ICON_STATE) visible_message("[src] buzzes quietly as the light fades out. Perhaps you could try again?") + /obj/item/mmi/robotic_brain/Topic(href, href_list) if("signup" in href_list) var/mob/dead/observer/O = locate(href_list["signup"]) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 48432a075e1..42fff9cdb8d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -399,11 +399,6 @@ mind.disrupt_spells(0) - -/mob/living/carbon/proc/tintcheck() - return 0 - - /mob/living/carbon/proc/create_dna() if(!dna) dna = new() @@ -807,8 +802,13 @@ so that different stomachs can handle things in different ways VB*/ clear_fullscreen("tint", 0) -/mob/living/carbon/proc/get_total_tint() +/// Checks eye covering items for visually impairing tinting, such as welding masks. 0 & 1 = no impairment, 2 = welding mask overlay, 3 = casual blindness. +/mob/living/proc/get_total_tint() . = 0 + + +/mob/living/carbon/get_total_tint() + . = ..() if(istype(head, /obj/item/clothing/head)) var/obj/item/clothing/head/HT = head . += HT.tint diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 3f561ea3cec..a8269370b7d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -33,12 +33,8 @@ msg += "[bicon(icon(icon, dir=SOUTH))] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated msg += "[name]" - var/displayed_species = dna.species.name + var/displayed_species = get_visible_species() var/examine_color = dna.species.flesh_color - for(var/obj/item/clothing/C in src) //Disguise checks - if(C == src.head || C == src.wear_suit || C == src.wear_mask || C == src.w_uniform || C == src.belt || C == src.back) - if(C.species_disguise) - displayed_species = C.species_disguise if(skipjumpsuit && skipface || (NO_EXAMINE in dna.species.species_traits)) //either obscured or on the nospecies list msg += "!\n" //omit the species when examining else if(displayed_species == "Slime People") //snowflakey because Slime People are defined as a plural @@ -428,40 +424,45 @@ . = list(msg) SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .) + +/mob/living/carbon/human/get_examine_time() + return 1 SECONDS + + //Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records. -/proc/hasHUD(mob/M, hudtype) +/proc/hasHUD(mob/M, hud_exam) if(istype(M, /mob/living/carbon/human)) - var/have_hudtypes = list() + var/have_hud_exam = 0 var/mob/living/carbon/human/H = M if(istype(H.glasses, /obj/item/clothing/glasses/hud)) var/obj/item/clothing/glasses/hud/hudglasses = H.glasses if(hudglasses?.examine_extensions) - have_hudtypes += hudglasses.examine_extensions + have_hud_exam |= hudglasses.examine_extensions if(istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman)) var/obj/item/clothing/head/helmet/space/plasmaman/helmet = H.head if(helmet?.examine_extensions) - have_hudtypes += helmet.examine_extensions + have_hud_exam |= helmet.examine_extensions var/obj/item/organ/internal/cyberimp/eyes/hud/CIH = H.get_int_organ(/obj/item/organ/internal/cyberimp/eyes/hud) if(CIH?.examine_extensions) - have_hudtypes += CIH.examine_extensions + have_hud_exam |= CIH.examine_extensions - return (hudtype in have_hudtypes) + return (have_hud_exam & hud_exam) else if(isrobot(M) || isAI(M)) //Stand-in/Stopgap to prevent pAIs from freely altering records, pending a more advanced Records system - return (hudtype in list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE, EXAMINE_HUD_MEDICAL)) + return hud_exam & EXAMINE_HUD_SECURITY_READ || hud_exam & EXAMINE_HUD_SECURITY_WRITE || hud_exam & EXAMINE_HUD_MEDICAL else if(ispAI(M)) var/mob/living/silicon/pai/P = M if(P.adv_secHUD) - return (hudtype in list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE)) + return hud_exam & EXAMINE_HUD_SECURITY_READ || hud_exam & EXAMINE_HUD_SECURITY_WRITE else if(isobserver(M)) var/mob/dead/observer/O = M if(DATA_HUD_SECURITY_ADVANCED in O.data_hud_seen) - return (hudtype in list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SKILLS)) + return hud_exam & EXAMINE_HUD_SECURITY_READ || hud_exam & EXAMINE_HUD_SKILLS return FALSE diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8a99c7a2941..1f81bdc89f6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -987,24 +987,6 @@ return HEARING_PROTECTION_MINOR -///tintcheck() -///Checks eye covering items for visually impairing tinting, such as welding masks -///Checked in life.dm. 0 & 1 = no impairment, 2 = welding mask overlay, 3 = You can see jack, but you can't see shit. -/mob/living/carbon/human/tintcheck() - var/tinted = 0 - if(istype(src.head, /obj/item/clothing/head)) - var/obj/item/clothing/head/HT = src.head - tinted += HT.tint - if(istype(src.glasses, /obj/item/clothing/glasses)) - var/obj/item/clothing/glasses/GT = src.glasses - tinted += GT.tint - if(istype(src.wear_mask, /obj/item/clothing/mask)) - var/obj/item/clothing/mask/MT = src.wear_mask - tinted += MT.tint - - return tinted - - /mob/living/carbon/human/abiotic(var/full_body = 0) if(full_body && ((src.l_hand && !(src.l_hand.flags & ABSTRACT)) || (src.r_hand && !(src.r_hand.flags & ABSTRACT)) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.l_ear || src.r_ear || src.gloves))) return 1 @@ -1094,13 +1076,21 @@ return 0 return 1 -/mob/living/carbon/human/proc/get_visible_gender() +/mob/living/carbon/human/get_visible_gender() var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDENAME)) || (head && (head.flags_inv & HIDENAME)) if((slot_w_uniform in obscured) && skipface) return PLURAL return gender +/mob/living/carbon/human/get_visible_species() + var/displayed_species = dna.species.name + for(var/obj/item/clothing/C in src) //Disguise checks + if(C == head || C == wear_suit || C == wear_mask || C == w_uniform || C == belt || C == back) + if(C.species_disguise) + displayed_species = C.species_disguise + return displayed_species + /mob/living/carbon/human/proc/increase_germ_level(n) if(gloves) gloves.germ_level += n @@ -1726,10 +1716,10 @@ Eyes need to have significantly high darksight to shine unless the mob has the X if(!H.check_has_mouth()) to_chat(src, "They don't have a mouth, you cannot perform CPR!") return - if((head && (head.flags_cover & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && !wear_mask.mask_adjusted)) + if((head && (head.flags_cover & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH) && !wear_mask.up)) to_chat(src, "Remove your mask first!") return - if((H.head && (H.head.flags_cover & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags_cover & MASKCOVERSMOUTH) && !H.wear_mask.mask_adjusted)) + if((H.head && (H.head.flags_cover & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags_cover & MASKCOVERSMOUTH) && !H.wear_mask.up)) to_chat(src, "Remove [H.p_their()] mask first!") return if(H.receiving_cpr) // To prevent spam stacking @@ -2124,3 +2114,14 @@ Eyes need to have significantly high darksight to shine unless the mob has the X set category = "IC" update_flavor_text() + +/mob/living/carbon/human/harvest(mob/living/user) + if(QDELETED(src)) + return + + if(issmall(src)) + while(meatleft > 0) + new dna.species.meat_type(loc) + meatleft-- + visible_message(span_notice("[user] butchers [src].")) + gib() diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index e99832f3abf..cd6c3f2fbfc 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -419,12 +419,7 @@ emp_act return FALSE if((istype(I, /obj/item/kitchen/knife/butcher/meatcleaver) || istype(I, /obj/item/twohanded/chainsaw)) && stat == DEAD && user.a_intent == INTENT_HARM) - var/obj/item/reagent_containers/food/snacks/meat/human/newmeat = new /obj/item/reagent_containers/food/snacks/meat/human(get_turf(loc)) - newmeat.name = real_name + newmeat.name - newmeat.subjectname = real_name - newmeat.subjectjob = job - newmeat.reagents.add_reagent("nutriment", (nutrition / 15) / 3) - reagents.trans_to(newmeat, round((reagents.total_volume) / 3, 1)) + new dna.species.meat_type(get_turf(loc), src) add_mob_blood(src) --meatleft to_chat(user, span_warning("You hack off a chunk of meat from [name].")) @@ -529,7 +524,6 @@ emp_act forcesay(GLOB.hit_appends) //forcesay checks stat already dna.species.spec_attacked_by(I, user, affecting, user.a_intent, src) - return TRUE /** * This proc handles being hit by a thrown atom. diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 9d1f6e03cb2..206769217a6 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -2,6 +2,7 @@ hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPMINDSHIELD_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,GLAND_HUD,THOUGHT_HUD) pressure_resistance = 25 + blocks_emissive = EMISSIVE_BLOCK_UNIQUE //Marking colour and style var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000. var/list/m_styles = DEFAULT_MARKING_STYLES //All markings set to None. diff --git a/code/modules/mob/living/carbon/human/interactions.dm b/code/modules/mob/living/carbon/human/interactions.dm index 6e71e0bcabe..2fcc2c3752c 100644 --- a/code/modules/mob/living/carbon/human/interactions.dm +++ b/code/modules/mob/living/carbon/human/interactions.dm @@ -2,10 +2,11 @@ *******Interactions code by HONKERTRON feat TestUnit******** ***********************************/ -/mob/living/carbon/human/MouseDrop(mob/M as mob) - ..() +/mob/living/carbon/human/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + . = ..() if(src == usr) - interact(M) + interact(over_object) + /mob/proc/make_interaction() return diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index d840e0560d4..23e3648a583 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -56,7 +56,7 @@ if(istype(mask) && mask.tint || initial(mask.tint)) update_tint() - if(mask.flags & BLOCKHAIR || mask.flags & BLOCKHEADHAIR) + if((mask.flags & (BLOCKHAIR|BLOCKHEADHAIR|BLOCKFACIALHAIR)) || (initial(mask.flags) & (BLOCKHAIR|BLOCKHEADHAIR|BLOCKFACIALHAIR))) update_hair() //rebuild hair update_fhair() update_head_accessory() @@ -65,9 +65,9 @@ internal = null update_action_buttons_icon() - if(mask.flags_inv & HIDEGLASSES) + if((mask.flags_inv & HIDEGLASSES) || (initial(mask.flags_inv) & HIDEGLASSES)) update_inv_glasses() - if(mask.flags_inv & HIDEHEADSETS) + if((mask.flags_inv & HIDEHEADSETS) || (initial(mask.flags_inv) & HIDEHEADSETS)) update_inv_ears() sec_hud_set_ID() @@ -82,7 +82,7 @@ if(!check_item) return - if(forced || (check_item.flags & BLOCKHAIR) || (check_item.flags & BLOCKHEADHAIR)) + if(forced || (check_item.flags & (BLOCKHAIR|BLOCKHEADHAIR|BLOCKFACIALHAIR)) || (initial(check_item.flags) & (BLOCKHAIR|BLOCKHEADHAIR|BLOCKFACIALHAIR))) update_hair() //rebuild hair update_fhair() update_head_accessory() @@ -96,11 +96,11 @@ if(forced || hat.vision_flags || hat.see_in_dark || !isnull(hat.lighting_alpha)) update_sight() - if(forced || (check_item.flags_inv & HIDEHEADSETS)) + if(forced || (check_item.flags_inv & HIDEHEADSETS) || (initial(check_item.flags_inv) & HIDEHEADSETS)) update_inv_ears() - if(forced || (check_item.flags_inv & HIDEMASK)) + if(forced || (check_item.flags_inv & HIDEMASK) || (initial(check_item.flags_inv) & HIDEMASK)) update_inv_wear_mask() - if(forced || (check_item.flags_inv & HIDEGLASSES)) + if(forced || (check_item.flags_inv & HIDEGLASSES) || (initial(check_item.flags_inv) & HIDEGLASSES)) update_inv_glasses() sec_hud_set_ID() @@ -111,11 +111,11 @@ * Handles stuff to update when a mob equips/unequips a suit. */ /mob/living/carbon/human/wear_suit_update(obj/item/clothing/suit) - if(suit.flags_inv & HIDEJUMPSUIT) + if((suit.flags_inv & HIDEJUMPSUIT) || (initial(suit.flags_inv) & HIDEJUMPSUIT)) update_inv_w_uniform() - if(suit.flags_inv & HIDESHOES) + if((suit.flags_inv & HIDESHOES) || (initial(suit.flags_inv) & HIDESHOES)) update_inv_shoes() - if(suit.flags_inv & HIDEGLOVES) + if((suit.flags_inv & HIDEGLOVES) || (initial(suit.flags_inv) & HIDEGLOVES)) update_inv_gloves() update_inv_wear_suit() @@ -412,7 +412,7 @@ if(slot_wear_mask) return head && (head.flags_inv & HIDEMASK) if(slot_glasses) - return head && (head.flags_inv & HIDEGLASSES) + return head && (head.flags_inv & HIDEGLASSES) || wear_mask && (wear_mask.flags_inv & HIDEGLASSES) if(slot_l_ear, slot_r_ear) return head && (head.flags_inv & HIDEHEADSETS) else diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ec3125614c7..b2f3ab81c4b 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -99,16 +99,12 @@ /mob/living/carbon/human/handle_disabilities() //Vision //god knows why this is here - var/obj/item/organ/vision - if(dna.species.vision_organ) - vision = get_int_organ(dna.species.vision_organ) - - if(!dna.species.vision_organ) // Presumably if a species has no vision organs, they see via some other means. + var/obj/item/organ/vision = dna?.species?.get_vision_organ(src) + if(vision == NO_VISION_ORGAN) SetEyeBlind(0) SetEyeBlurry(0) - - else if(!vision || vision.is_traumatized()) // Vision organs cut out or broken? Permablind. - EyeBlind(4 SECONDS) + else if(!vision || vision.is_traumatized()) // Vision organs cut out or broken? Permablind. + SetEyeBlind(4 SECONDS) if(getBrainLoss() >= 60 && stat != DEAD) if(prob(3)) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index cdc69b1e6e7..ca48bd80510 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -190,8 +190,7 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) - /// If set, this organ is required for vision. Defaults to "eyes" if the species has them. - var/vision_organ + var/meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid var/list/has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), @@ -223,10 +222,6 @@ var/list/autohiss_exempt = null /datum/species/New() - //If the species has eyes, they are the default vision organ - if(!vision_organ && has_organ[INTERNAL_ORGAN_EYES]) - vision_organ = /obj/item/organ/internal/eyes - unarmed = new unarmed_type() /datum/species/proc/get_random_name(gender) @@ -366,8 +361,7 @@ H.faction += i //Using +=/-= for this in case you also gain the faction from a different source. /datum/species/proc/on_species_loss(mob/living/carbon/human/H) - if(H.butcher_results) //clear it out so we don't butcher a actual human. - H.butcher_results = null + H.meatleft = initial(H.meatleft) H.ventcrawler = initial(H.ventcrawler) if(inherent_factions) @@ -1159,7 +1153,20 @@ It'll return null if the organ doesn't correspond, so include null checks when u /datum/species/proc/can_hear(mob/living/carbon/human/user) var/obj/item/organ/internal/ears/ears = user.get_organ_slot(INTERNAL_ORGAN_EARS) - return ears && !(DEAF in user.mutations) && !HAS_TRAIT(user, TRAIT_DEAF) + return ears && !HAS_TRAIT(user, TRAIT_DEAF) + + +/datum/species/proc/has_vision(mob/living/carbon/human/user, information_only = FALSE) + if(information_only && user.stat == DEAD) + return TRUE + if(user.AmountBlinded() || (BLINDNESS in user.mutations) || user.stat) + return FALSE + var/obj/item/organ/vision = get_vision_organ(user) + return vision && (vision == NO_VISION_ORGAN || !vision.is_traumatized()) + + +/datum/species/proc/get_vision_organ(mob/living/carbon/human/user) + return user.get_organ_slot(INTERNAL_ORGAN_EYES) /datum/species/proc/spec_Process_Spacemove(mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/abductor.dm b/code/modules/mob/living/carbon/human/species/abductor.dm index 5155d8f4f99..c76dfbebea1 100644 --- a/code/modules/mob/living/carbon/human/species/abductor.dm +++ b/code/modules/mob/living/carbon/human/species/abductor.dm @@ -16,6 +16,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/grey + species_traits = list(NO_BLOOD, NO_BREATHE, VIRUSIMMUNE, NOGUNS, NO_HUNGER, NO_EXAMINE) dies_at_threshold = TRUE diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm index 643b9724526..2611b5f8a6e 100644 --- a/code/modules/mob/living/carbon/human/species/diona.dm +++ b/code/modules/mob/living/carbon/human/species/diona.dm @@ -46,6 +46,8 @@ INTERNAL_ORGAN_HEART = /obj/item/organ/internal/heart/diona, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/diona + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest/diona), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin/diona), diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm index f2dee15f777..4646a5c7a46 100644 --- a/code/modules/mob/living/carbon/human/species/drask.dm +++ b/code/modules/mob/living/carbon/human/species/drask.dm @@ -69,6 +69,8 @@ INTERNAL_ORGAN_BRAIN = /obj/item/organ/internal/brain/drask, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/drask + disliked_food = SUGAR | GROSS liked_food = DAIRY diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index 133308e84d1..10fb1bb2cec 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -162,6 +162,11 @@ H.name = H.real_name to_chat(H, info_text) + +/datum/species/golem/get_vision_organ(mob/living/carbon/human/user) + return NO_VISION_ORGAN + + //Random Golem /datum/species/golem/random diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index 0dd88292f69..e37bd321c08 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -18,6 +18,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/grey + total_health = 90 oxy_mod = 1.2 //greys are fragile stamina_mod = 1.2 diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index eb93d1ec2e4..784a49f2145 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -17,5 +17,7 @@ interests, rampant cyber and bio-augmentation and secretive factions make life on most human \ worlds tumultous at best." + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/human + reagent_tag = PROCESS_ORG //Has standard darksight of 2. diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm index 15b637dc698..942eafc42cf 100644 --- a/code/modules/mob/living/carbon/human/species/kidan.dm +++ b/code/modules/mob/living/carbon/human/species/kidan.dm @@ -1,3 +1,6 @@ +#define PHEROMONES_LIFESPAN 15 MINUTES +#define PHEROMONES_MAX 3 + /datum/species/kidan name = "Kidan" name_plural = "Kidan" @@ -34,6 +37,8 @@ INTERNAL_ORGAN_LANTERN = /obj/item/organ/internal/lantern, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/kidan + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest/kidan), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin/kidan), @@ -110,6 +115,13 @@ H.verbs -= /mob/living/carbon/human/verb/emote_frown H.verbs -= /mob/living/carbon/human/verb/emote_sniff H.verbs -= /mob/living/carbon/human/verb/emote_glare + // HUD for detecting pheromones + var/datum/atom_hud/kidan_hud = GLOB.huds[DATA_HUD_KIDAN_PHEROMONES] + kidan_hud.add_hud_to(H) + + // Action for creating pheromones + var/datum/action/innate/produce_pheromones/produce_pheromones = new() + produce_pheromones.Grant(H) /datum/species/kidan/on_species_loss(mob/living/carbon/human/H) ..() @@ -130,3 +142,150 @@ H.verbs |= /mob/living/carbon/human/verb/emote_sniff H.verbs |= /mob/living/carbon/human/verb/emote_glare + // Removing the HUD for detecting pheromones + var/datum/atom_hud/kidan_hud = GLOB.huds[DATA_HUD_KIDAN_PHEROMONES] + kidan_hud.remove_hud_from(H) + + // Removing the action for creating pheromones + for(var/datum/action/innate/produce_pheromones/action in H.actions) + action.Remove(H) + + +/// Pheromones spawnable by kida, only perceivable by other kida +/obj/effect/kidan_pheromones + name = "kidan pheromones" + desc = "Special pheromones secreted by a kidan." + gender = PLURAL + hud_possible = list(KIDAN_PHEROMONES_HUD) + + // This is to make it visible for observers and mappers at the same time + invisibility = INVISIBILITY_OBSERVER + icon_state = "kidan_pheromones" + alpha = 220 + + var/lifespan = PHEROMONES_LIFESPAN + + /// The message added by its creator, visible upon examine + var/encoded_message + +/obj/effect/kidan_pheromones/Initialize(mapload) + . = ..() + + // Add itself to the kidan hud + prepare_huds() + for(var/datum/atom_hud/kidan_pheromones/kidan_hud in GLOB.huds) + kidan_hud.add_to_hud(src) + var/image/holder = hud_list[KIDAN_PHEROMONES_HUD] + holder.icon = icon + holder.icon_state = icon_state + holder.alpha = 220 + + // Delete itself after some time if it is not permanent variant + if(lifespan) + QDEL_IN(src, lifespan) + +/obj/effect/kidan_pheromones/examine(mob/user) + . = ..() + if(encoded_message) + . += "It has the following message: \"[encoded_message]\"" + // Failsafe for mappers/adminspawns if they forgot to add a message + else + . += "Its meaning is incomprehensible." + +// For mappers/adminspawns, this one does not self-delete +/obj/effect/kidan_pheromones/permanent + lifespan = null + +// Innate action for creating pheromones and destroying current ones, owned by all kida +/datum/action/innate/produce_pheromones + name = "Produce Pheromones" + check_flags = AB_CHECK_CONSCIOUS + icon_icon = 'icons/effects/effects.dmi' + button_icon_state = "kidan_pheromones_static" + + /// How long our message can be (characters) + var/maximum_message_length = 30 + + /// How many active pheromones we can have + var/active_pheromones_maximum = PHEROMONES_MAX + + /// Which currently existing pheromones belong to us + var/list/active_pheromones_current + +/datum/action/innate/produce_pheromones/Activate() + var/mob/living/carbon/human/H = owner + + // Do we want to make or destroy them? + switch(alert(H, "Would you like to produce or destroy nearby pheromones?", "Produce Pheromones", "Produce", "Destroy", "Cancel")) + // We look for nearby pheromones, if they belong to us, we can destroy them + if("Destroy") + var/obj/effect/kidan_pheromones/pheromones_to_destroy = locate(/obj/effect/kidan_pheromones) in range(1, H) + // No pheromones nearby + if(!pheromones_to_destroy) + to_chat(H, "You cannot find any pheromones nearby.") + return + // These are not ours, do not touch them + if(!(pheromones_to_destroy in active_pheromones_current)) + to_chat(H, "These pheromones were created by someone else, you are unable to dissipate them.") + return + // These are ours and we now destroy them + if(do_after(H, 3 SECONDS, FALSE, pheromones_to_destroy)) + // Log the action + H.create_log(MISC_LOG, "destroyed pheromones that had the message of \"[pheromones_to_destroy.encoded_message]\"") + + // Destroy it; the pheromones remove themselves from our list via signals + to_chat(H, "You dissipate your old pheromones.") + qdel(pheromones_to_destroy) + + // We decide to produce new ones + if("Produce") + // Can we create more pheromones? + if(length(active_pheromones_current) >= active_pheromones_maximum) + to_chat(H, "You already have [length(active_pheromones_current)] sets of pheromones active and are unable to produce any more.") + return + + // Encode the message + var/message_to_encode = input(H, "What message do you wish to encode? (max. [maximum_message_length] characters) Leave it empty to cancel.", "Produce Pheromones") + if(!message_to_encode) + to_chat(H, "You decide against producing pheromones.") + return + if(length(message_to_encode) > maximum_message_length) + to_chat(H, "Your message was too long, the pheromones instantly dissipate.") + return + // Strip the message now so it does not mess with the length + message_to_encode = strip_html(message_to_encode) + + // One batch of pheromones per tile + if(locate(/obj/effect/kidan_pheromones) in get_turf(H)) + to_chat(H, "There are pheromones here already!") + return + + // Create the pheromones + if(do_after(H, 3 SECONDS, FALSE, H)) + to_chat(H, "You produce new pheromones with the message of \"[message_to_encode]\".") + var/obj/effect/kidan_pheromones/pheromones_to_create = new get_turf(H) + pheromones_to_create.encoded_message = message_to_encode + LAZYADD(active_pheromones_current, pheromones_to_create) + + // Add a signal to the new pheromones so it clears its own references when it gets destroyed + RegisterSignal(pheromones_to_create, COMSIG_PARENT_QDELETING, PROC_REF(remove_pheromones_from_list)) + + // Log the action + H.create_log(MISC_LOG, "produced pheromones with the message of \"[message_to_encode]\"") + if("Cancel") + return + +// This handles proper GCing whether we destroyed the pheromones or something else did +/datum/action/innate/produce_pheromones/proc/remove_pheromones_from_list(obj/effect/kidan_pheromones/pheromones) + SIGNAL_HANDLER + + UnregisterSignal(pheromones, COMSIG_PARENT_QDELETING) + LAZYREMOVE(active_pheromones_current, pheromones) + +// Clear references if the holder gets destroyed +/datum/action/innate/produce_pheromones/Destroy() + active_pheromones_current = null + ..() + +#undef PHEROMONES_LIFESPAN +#undef PHEROMONES_MAX diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm index 43a5f6df776..76450d06c93 100644 --- a/code/modules/mob/living/carbon/human/species/machine.dm +++ b/code/modules/mob/living/carbon/human/species/machine.dm @@ -54,7 +54,7 @@ INTERNAL_ORGAN_R_ARM_DEVICE = /obj/item/organ/internal/cyberimp/arm/power_cord, ) - vision_organ = /obj/item/organ/internal/eyes/optical_sensor + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/machine has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest/ipc), diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm index e9a2e4e2a40..3e0d87ae678 100644 --- a/code/modules/mob/living/carbon/human/species/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/monkey.dm @@ -40,6 +40,8 @@ brute_mod = 1.5 burn_mod = 1.5 + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/monkey + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), @@ -70,7 +72,7 @@ ..() H.real_name = "[lowertext(name)] ([rand(100,999)])" H.name = H.real_name - H.butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/monkey = 5) + H.meatleft = 5 /datum/species/monkey/handle_dna(mob/living/carbon/human/H, remove) ..() @@ -91,6 +93,7 @@ flesh_color = "#AFA59E" base_color = "#000000" tail = "farwatail" + skinned_type = /obj/item/stack/sheet/animalhide/farwa reagent_tag = PROCESS_ORG has_organ = list( @@ -104,6 +107,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/farwa + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), @@ -133,6 +138,7 @@ flesh_color = "#966464" base_color = "#000000" tail = "wolpintail" + skinned_type = /obj/item/stack/sheet/animalhide/wolpin reagent_tag = PROCESS_ORG has_organ = list( @@ -146,6 +152,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/wolpin + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), @@ -173,6 +181,7 @@ blood_species = "Skrell" flesh_color = "#8CD7A3" blood_color = "#1D2CBF" + skinned_type = /obj/item/stack/sheet/animalhide/neara reagent_tag = PROCESS_ORG tail = null @@ -187,6 +196,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/neara + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), @@ -223,6 +234,7 @@ blood_species = "Unathi" flesh_color = "#34AF10" base_color = "#000000" + skinned_type = /obj/item/stack/sheet/animalhide/stok reagent_tag = PROCESS_ORG bodyflags = HAS_TAIL @@ -238,6 +250,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/stok + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), diff --git a/code/modules/mob/living/carbon/human/species/moth.dm b/code/modules/mob/living/carbon/human/species/moth.dm index 02856a2679b..c4febf4511b 100644 --- a/code/modules/mob/living/carbon/human/species/moth.dm +++ b/code/modules/mob/living/carbon/human/species/moth.dm @@ -48,6 +48,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/nian + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), diff --git a/code/modules/mob/living/carbon/human/species/nucleation.dm b/code/modules/mob/living/carbon/human/species/nucleation.dm index 93a9c156876..d8e2fd45f43 100644 --- a/code/modules/mob/living/carbon/human/species/nucleation.dm +++ b/code/modules/mob/living/carbon/human/species/nucleation.dm @@ -28,7 +28,9 @@ INTERNAL_ORGAN_STRANGE_CRYSTAL = /obj/item/organ/internal/nucleation/strange_crystal, INTERNAL_ORGAN_RESONANT_CRYSTAL = /obj/item/organ/internal/nucleation/resonant_crystal, ) - vision_organ = /obj/item/organ/internal/eyes/luminescent_crystal + + + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/nucleation /datum/species/nucleation/on_species_gain(mob/living/carbon/human/H) ..() diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 86c45e7a33c..14049fbfba6 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -43,6 +43,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/plasmaman + speciesbox = /obj/item/storage/box/survival_plasmaman flesh_color = "#8b3fba" diff --git a/code/modules/mob/living/carbon/human/species/skeleton.dm b/code/modules/mob/living/carbon/human/species/skeleton.dm index 8c48b003f88..78afab06e39 100644 --- a/code/modules/mob/living/carbon/human/species/skeleton.dm +++ b/code/modules/mob/living/carbon/human/species/skeleton.dm @@ -72,3 +72,8 @@ return TRUE return ..() + + +/datum/species/skeleton/get_vision_organ(mob/living/carbon/human/user) + return NO_VISION_ORGAN + diff --git a/code/modules/mob/living/carbon/human/species/skrell.dm b/code/modules/mob/living/carbon/human/species/skrell.dm index ed6f6562901..73e8bf812ce 100644 --- a/code/modules/mob/living/carbon/human/species/skrell.dm +++ b/code/modules/mob/living/carbon/human/species/skrell.dm @@ -51,6 +51,8 @@ INTERNAL_ORGAN_HEADPOCKET = /obj/item/organ/internal/headpocket, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/skrell + suicide_messages = list( "пытается откусить себе язык!", "выдавливает большими пальцами свои глазницы!", diff --git a/code/modules/mob/living/carbon/human/species/slime.dm b/code/modules/mob/living/carbon/human/species/slime.dm index 39220045d7b..38662dfe077 100644 --- a/code/modules/mob/living/carbon/human/species/slime.dm +++ b/code/modules/mob/living/carbon/human/species/slime.dm @@ -45,6 +45,8 @@ INTERNAL_ORGAN_LUNGS = /obj/item/organ/internal/lungs/slime, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/skrell + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest/unbreakable), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable), @@ -143,7 +145,11 @@ /datum/species/slime/can_hear(mob/living/carbon/human/user) - return !(DEAF in user.mutations) && !HAS_TRAIT(user, TRAIT_DEAF) + return !HAS_TRAIT(user, TRAIT_DEAF) + + +/datum/species/slime/get_vision_organ(mob/living/carbon/human/user) + return NO_VISION_ORGAN /datum/action/innate/slimecolor diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm index b8ad91b1dbb..6dc7561b9e7 100644 --- a/code/modules/mob/living/carbon/human/species/tajaran.dm +++ b/code/modules/mob/living/carbon/human/species/tajaran.dm @@ -46,6 +46,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/tajaran + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index a83e48de6b2..788a8c4a107 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -60,6 +60,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/unathi + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm index 0584cb6395e..75f48ccf266 100644 --- a/code/modules/mob/living/carbon/human/species/vox.dm +++ b/code/modules/mob/living/carbon/human/species/vox.dm @@ -67,6 +67,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/vox + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), diff --git a/code/modules/mob/living/carbon/human/species/vulpkanin.dm b/code/modules/mob/living/carbon/human/species/vulpkanin.dm index 582825ef1a5..23acc7ada8f 100644 --- a/code/modules/mob/living/carbon/human/species/vulpkanin.dm +++ b/code/modules/mob/living/carbon/human/species/vulpkanin.dm @@ -39,6 +39,8 @@ INTERNAL_ORGAN_EARS = /obj/item/organ/internal/ears, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/vulpkanin + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin), diff --git a/code/modules/mob/living/carbon/human/species/wryn.dm b/code/modules/mob/living/carbon/human/species/wryn.dm index 6499c5192d3..a5d144f9c5b 100644 --- a/code/modules/mob/living/carbon/human/species/wryn.dm +++ b/code/modules/mob/living/carbon/human/species/wryn.dm @@ -37,6 +37,8 @@ INTERNAL_ORGAN_WAX_GLANDS = /obj/item/organ/internal/wryn/glands, ) + meat_type = /obj/item/reagent_containers/food/snacks/meat/humanoid/wryn + has_limbs = list( BODY_ZONE_CHEST = list("path" = /obj/item/organ/external/chest/wryn), BODY_ZONE_PRECISE_GROIN = list("path" = /obj/item/organ/external/groin/wryn), diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 527690de353..96be79797fe 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -433,7 +433,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) return //masks and helmets can obscure our facial hair, unless we're a synthetic - if((head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR))) + if((head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKFACIALHAIR))) return //base icons @@ -704,6 +704,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) remove_overlay(GLASSES_LAYER) remove_overlay(GLASSES_OVER_LAYER) remove_overlay(OVER_MASK_LAYER) + remove_overlay(OVER_HEAD_LAYER) if(client && hud_used) var/obj/screen/inventory/inv = hud_used.inv_slots[slot_glasses] @@ -727,7 +728,11 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) var/datum/sprite_accessory/hair/hair_style = GLOB.hair_styles_full_list[head_organ.h_style] var/obj/item/clothing/glasses/G = glasses - if(istype(G) && G.over_mask) //If the user's used the 'wear over mask' verb on the glasses. + if(head && !(head.flags_inv & MASKCOVERSEYES || head.flags_cover & HEADCOVERSEYES) && G.over_hat && istype(G)) + new_glasses.layer = -OVER_HEAD_LAYER + overlays_standing[OVER_HEAD_LAYER] = new_glasses + apply_overlay(OVER_HEAD_LAYER) + else if(istype(G) && G.over_mask) //If the user's used the 'wear over mask' verb on the glasses. new_glasses.layer = -OVER_MASK_LAYER overlays_standing[OVER_MASK_LAYER] = new_glasses apply_overlay(OVER_MASK_LAYER) diff --git a/code/modules/mob/living/carbon/human/update_stat.dm b/code/modules/mob/living/carbon/human/update_stat.dm index 1a88a0fa867..afb708a6496 100644 --- a/code/modules/mob/living/carbon/human/update_stat.dm +++ b/code/modules/mob/living/carbon/human/update_stat.dm @@ -23,5 +23,11 @@ return ..() // Fallback if we don't have a species or DNA +/mob/living/carbon/human/has_vision(information_only = FALSE) + if(dna?.species) + return dna.species.has_vision(src, information_only) + return ..() + + /mob/living/carbon/human/check_death_method() return dna.species.dies_at_threshold diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 6fd4348a94b..e39b81920b8 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -97,6 +97,8 @@ if(breath) loc.assume_air(breath) air_update_turf() + if(ishuman(src) && !internal && environment.temperature < 278 && environment.return_pressure() > 20) + new /obj/effect/frosty_breath(loc, src) //Third link in a breath chain, calls handle_breath_temperature() /mob/living/carbon/proc/check_breath(datum/gas_mixture/breath) @@ -259,7 +261,9 @@ continue if(times_fired % 3 == 1) M.adjustBruteLoss(5) - adjust_nutrition(10) + //Vampires don't get nutrition from devouring mobs + if(!isvampire(src)) + adjust_nutrition(10) //this updates all special effects: only stamina for now /mob/living/carbon/handle_status_effects() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c9c156b2cac..537d6b6f1ad 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -328,16 +328,17 @@ return TRUE target.visible_message( - span_danger("[declent_ru(NOMINATIVE)] указыва[pluralize_ru(src.gender,"ет","ют")] [hand_item.declent_ru(INSTRUMENTAL)] на [pointed_object]!"), - span_userdanger("[declent_ru(NOMINATIVE)] указыва[pluralize_ru(src.gender,"ет","ют")] [hand_item.declent_ru(INSTRUMENTAL)] на [pluralize_ru(target.gender,"тебя","вас")]!"), + span_danger("[declent_ru(NOMINATIVE)] направля[pluralize_ru(src.gender,"ет","ют")] [hand_item.declent_ru(INSTRUMENTAL)] на [pointed_object]!"), + span_userdanger("[declent_ru(NOMINATIVE)] направля[pluralize_ru(src.gender,"ет","ют")] [hand_item.declent_ru(INSTRUMENTAL)] на [pluralize_ru(target.gender,"тебя","вас")]!"), ) - SEND_SOUND(target, sound('sound/weapons/targeton.ogg')) + SEND_SOUND(target, 'sound/weapons/targeton.ogg') + SEND_SOUND(src, 'sound/weapons/targeton.ogg') add_emote_logs(src, "point [hand_item] HARM to [key_name(target)] [COORD(target)]") return TRUE if(istype(hand_item, /obj/item/toy/russian_revolver/trick_revolver) && target != hand_item) var/obj/item/toy/russian_revolver/trick_revolver/trick = hand_item - visible_message(span_danger("[declent_ru(NOMINATIVE)] указыва[pluralize_ru(src.gender,"ет","ют")] [trick.declent_ru(INSTRUMENTAL)] на... и [trick.declent_ru(NOMINATIVE)] срабатывает у [genderize_ru(gender, "него","неё","него","них")] в руке!")) + visible_message(span_danger("[declent_ru(NOMINATIVE)] направля[pluralize_ru(src.gender,"ет","ют")] [trick.declent_ru(INSTRUMENTAL)] на... и [trick.declent_ru(NOMINATIVE)] срабатывает у [genderize_ru(gender, "него","неё","него","них")] в руках!")) trick.shoot_gun(src) add_emote_logs(src, "point to [key_name(target)] [COORD(target)]") return TRUE @@ -375,7 +376,7 @@ return 1 /mob/living/welder_act(mob/user, obj/item/I) - if(!I.tool_use_check(null, 0)) //Don't need the message, just if it succeeded + if(!I.tool_use_check(user, 0, silent = TRUE)) //Don't need the message, just if it succeeded return if(IgniteMob()) message_admins("[key_name_admin(user)] set [key_name_admin(src)] on fire with [I]") @@ -1119,7 +1120,7 @@ return 0 /mob/living/proc/attempt_harvest(obj/item/I, mob/user) - if(user.a_intent == INTENT_HARM && stat == DEAD && butcher_results) //can we butcher it? + if(user.a_intent == INTENT_HARM && stat == DEAD && (butcher_results || issmall(src))) //can we butcher it? var/sharpness = is_sharp(I) if(sharpness) to_chat(user, "You begin to butcher [src]...") @@ -1241,7 +1242,7 @@ /mob/living/extinguish_light(force = FALSE) for(var/atom/A in src) if(A.light_range > 0) - A.extinguish_light() + A.extinguish_light(force) /mob/living/vv_edit_var(var_name, var_value) switch(var_name) @@ -1379,3 +1380,48 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven if(target_move) remove_ventcrawl() add_ventcrawl(loc, target_move) + + +/mob/living/proc/get_visible_species() // Used only in /mob/living/carbon/human and /mob/living/simple_animal/hostile/morph + return "Unknown" + + +/mob/living/run_examinate(atom/target) + var/datum/status_effect/staring/user_staring_effect = has_status_effect(STATUS_EFFECT_STARING) + face_atom(target) + + if(user_staring_effect || hindered_inspection(target)) + return + + var/examine_time = target.get_examine_time() + if(examine_time && target != src) + var/visible_gender = target.get_visible_gender() + var/visible_species = "Unknown" + + if(isliving(target)) + var/mob/living/target_living = target + visible_species = target_living.get_visible_species() + + if(ishuman(target)) // Yep. Only humans affected by catched looks. + var/datum/status_effect/staring/target_staring_effect = target_living.has_status_effect(STATUS_EFFECT_STARING) + if(target_staring_effect) + target_staring_effect.catch_look(src) + + user_staring_effect = apply_status_effect(STATUS_EFFECT_STARING, examine_time, target, visible_gender, visible_species) + if(do_mob(src, src, examine_time, TRUE, list(CALLBACK(src, PROC_REF(hindered_inspection), target)), TRUE)) + ..() + else + ..() + + +/mob/living/proc/hindered_inspection(atom/target) + if(QDELETED(src) || QDELETED(target)) + return TRUE + if(!(target in view(client.maxview(), client.eye))) + for(var/obj/screen/storage/box in client.screen) + if(!box.is_item_accessible(target, src)) + return TRUE + if(!has_vision(information_only = TRUE)) + to_chat(src, span_notice("Здесь что-то есть, но вы не видите — что именно.")) + return TRUE + return FALSE diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 70e0b8222fc..2e83cacdcf7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( var/can_dominate_mechs = 0 var/shunted = 0 //1 if the AI is currently shunted. Used to differentiate between shunted and ghosted/braindead - var/control_disabled = 0 // Set to 1 to stop AI from interacting via Click() -- TLE + var/control_disabled = FALSE // Set to TRUE to stop AI from interacting via Click() -- TLE var/malfhacking = 0 // More or less a copy of the above var, so that malf AIs can hack and still get new cyborgs -- NeoFite var/malf_cooldown = 0 //Cooldown var for malf modules, stores a worldtime + cooldown @@ -85,7 +85,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( var/datum/trackable/track = new() var/last_paper_seen = null - var/can_shunt = 1 + var/can_shunt = TRUE var/last_announcement = "" var/datum/announcement/priority/announcement var/mob/living/simple_animal/bot/Bot @@ -148,10 +148,9 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( proc_holder_list = new() - if(B?.clock || isclocker(B?.brainmob)) - laws = new /datum/ai_laws/ratvar - overlays += "clockwork_frame" - if(L) + if(B?.clock) + ratvar_act() + else if(L) if(istype(L, /datum/ai_laws)) laws = L else @@ -339,7 +338,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( use_power = ACTIVE_POWER_USE power_channel = EQUIP var/mob/living/silicon/ai/powered_ai = null - invisibility = 100 + invisibility = INVISIBILITY_ABSTRACT /obj/machinery/ai_powersupply/New(mob/living/silicon/ai/ai=null) powered_ai = ai @@ -1239,7 +1238,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( /mob/living/silicon/ai/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) if(anchored) user.visible_message("\The [user] starts to unbolt \the [src] from the plating...") if(!do_after(user, 40 * W.toolspeed * gettoolspeedmod(user), target = src)) @@ -1307,8 +1306,8 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( on_the_card = TRUE aiRestorePowerRoutine = 0//So the AI initially has power. update_blind_effects() - control_disabled = 1//Can't control things remotely if you're stuck in a card! - aiRadio.disabledAi = 1 //No talking on the built-in radio for you either! + control_disabled = TRUE//Can't control things remotely if you're stuck in a card! + aiRadio.disabledAi = TRUE //No talking on the built-in radio for you either! forceMove(card) //Throw AI into the card. to_chat(src, "You have been downloaded to a mobile storage device. Remote device connection severed.") to_chat(user, "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory.") diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 7e4eecf31cd..44947315756 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -214,7 +214,7 @@ return 0 ..() -/mob/living/silicon/pai/MouseDrop(atom/over_object) +/mob/living/silicon/pai/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) return /mob/living/silicon/pai/emp_act(severity) @@ -608,21 +608,21 @@ return H -/mob/living/silicon/pai/MouseDrop(atom/over_object) - var/mob/living/carbon/human/H = over_object //changed to human to avoid stupid issues like xenos holding pAIs. - if(!istype(H) || !Adjacent(H)) return ..() +/mob/living/silicon/pai/MouseDrop(mob/living/carbon/human/user, src_location, over_location, src_control, over_control, params) + if(!ishuman(user) || !Adjacent(user)) + return ..() if(usr == src) - switch(alert(H, "[src] wants you to pick [p_them()] up. Do it?",,"Yes","No")) + switch(alert(user, "[src] wants you to pick [p_them()] up. Do it?",,"Yes","No")) if("Yes") - if(Adjacent(H)) - get_scooped(H) + if(Adjacent(user)) + get_scooped(user) else - to_chat(src, "You need to stay in reaching distance to be picked up.") + to_chat(src, span_warning("You need to stay in reaching distance to be picked up.")) if("No") - to_chat(src, "[H] decided not to pick you up.") + to_chat(src, span_warning("[user] decided not to pick you up.")) else - if(Adjacent(H)) - get_scooped(H) + if(Adjacent(user)) + get_scooped(user) else return ..() diff --git a/code/modules/mob/living/silicon/pai/software/pai_toggles.dm b/code/modules/mob/living/silicon/pai/software/pai_toggles.dm index bf95c21d34d..a83fd1df484 100644 --- a/code/modules/mob/living/silicon/pai/software/pai_toggles.dm +++ b/code/modules/mob/living/silicon/pai/software/pai_toggles.dm @@ -7,10 +7,12 @@ toggle_software = TRUE /datum/pai_software/sec_hud/toggle(mob/living/silicon/pai/user) - user.secHUD = !user.secHUD user.remove_med_sec_hud() + user.secHUD = !user.secHUD if(user.secHUD) user.add_sec_hud() + user.medHUD = FALSE + user.adv_secHUD = FALSE /datum/pai_software/sec_hud/is_active(mob/living/silicon/pai/user) return user.secHUD @@ -24,10 +26,12 @@ toggle_software = TRUE /datum/pai_software/med_hud/toggle(mob/living/silicon/pai/user) - user.medHUD = !user.medHUD user.remove_med_sec_hud() + user.medHUD = !user.medHUD if(user.medHUD) user.add_med_hud() + user.secHUD = FALSE + user.adv_secHUD = FALSE /datum/pai_software/med_hud/is_active(mob/living/silicon/pai/user) return user.medHUD @@ -133,10 +137,12 @@ only_syndi = TRUE /datum/pai_software/adv_sec_hud/toggle(mob/living/silicon/pai/user) - user.adv_secHUD = !user.adv_secHUD user.remove_med_sec_hud() + user.adv_secHUD = !user.adv_secHUD if(user.adv_secHUD) user.add_sec_hud() + user.medHUD = FALSE + user.secHUD = FALSE /datum/pai_software/adv_sec_hud/is_active(mob/living/silicon/pai/user) return user.adv_secHUD diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index e9f6984c588..72c78236e10 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -156,7 +156,7 @@ to_chat(user, "The maintenance drone chassis not compatible with \the [W].") return - else if(istype(W, /obj/item/crowbar)) + else if(W.tool_behaviour == TOOL_CROWBAR) to_chat(user, "The machine is hermetically sealed. You can't open the case.") return @@ -345,18 +345,6 @@ to_chat(src, "Don't invade their worksites, don't steal their resources, don't tell them about the changeling in the toilets.") to_chat(src, "Make sure crew members do not notice you..") -/* - sprite["Default"] = "repairbot" - sprite["Mk2 Mousedrone"] = "mk2" - sprite["Mk3 Monkeydrone"] = "mk3" - var/icontype - icontype = input(player,"Pick an icon") in sprite - icon_state = sprite[icontype] - updateicon() - - choose_icon(6,sprite) -*/ - /mob/living/silicon/robot/drone/Bump(atom/movable/AM, yes) if(is_type_in_list(AM, allowed_bumpable_objects)) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 07f27af883d..781ea202a76 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1663,7 +1663,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( /mob/living/silicon/robot/extinguish_light(force = FALSE) ..() - update_headlamp(1, 150) + update_headlamp(turn_off = TRUE, cooldown = 15 SECONDS) /mob/living/silicon/robot/rejuvenate() ..() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 14fadcff07b..5502d93a434 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -396,6 +396,7 @@ modules += new /obj/item/lightreplacer/cyborg(src) modules += new /obj/item/holosign_creator/janitor(src) modules += new /obj/item/extinguisher/mini(src) + modules += new /obj/item/reagent_containers/spray/pestspray(src) //kill all kidans! modules += new /obj/item/crowbar/cyborg(src) modules += new /obj/item/gps/cyborg(src) emag = new /obj/item/reagent_containers/spray(src) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 5b40a820fa9..18efda2bdd7 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -41,10 +41,16 @@ var/datum/job/janitor/J = new/datum/job/janitor access_card.access += J.get_access() prev_access = access_card.access - update_icon() + update_icon(UPDATE_OVERLAYS) + + +/mob/living/simple_animal/bot/cleanbot/update_icon_state() + return + + +/mob/living/simple_animal/bot/cleanbot/update_overlays() + . = ..() -/mob/living/simple_animal/bot/cleanbot/update_icon() - overlays.Cut() var/overlay_state switch(mode) if(BOT_CLEANING) @@ -52,15 +58,10 @@ if(BOT_IDLE) overlay_state = "[on]" - var/mutable_appearance/state_appearance = mutable_appearance(icon, "[icon_state][overlay_state]") - state_appearance.appearance_flags |= RESET_COLOR - overlays += state_appearance + . += mutable_appearance(icon, "[icon_state][overlay_state]", appearance_flags = RESET_COLOR) if(mask_color) - var/mutable_appearance/casing_mask = mutable_appearance(icon, "cleanbot_mask") - casing_mask.appearance_flags |= RESET_COLOR - casing_mask.color = mask_color - overlays += casing_mask + . += mutable_appearance(icon, "cleanbot_mask", appearance_flags = RESET_COLOR, color = mask_color) /mob/living/simple_animal/bot/cleanbot/bot_reset() diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 392b965c497..179bcc64f43 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -14,7 +14,7 @@ var/created_name = "Cleanbot" var/robot_arm = /obj/item/robot_parts/l_arm -/obj/item/bucket_sensor/attackby(obj/item/W, mob/user as mob, params) +/obj/item/bucket_sensor/attackby(obj/item/W, mob/user, params) ..() if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm)) if(!user.drop_transfer_item_to_loc(W, src)) @@ -45,6 +45,52 @@ var/build_step = 0 var/created_name = "\improper ED-209 Security Robot" //To preserve the name if it's a unique securitron I guess var/lasercolor = "" + var/new_name = "" + + +/obj/item/ed209_assembly/update_name(updates = ALL) + . = ..() + switch(build_step) + if(1,2) + name = "legs/frame assembly" + if(3) + name = "vest/legs/frame assembly" + if(4) + name = "shielded frame assembly" + if(5) + name = "covered and shielded frame assembly" + if(6) + name = "covered, shielded and sensored frame assembly" + if(7) + name = "wired ED-209 assembly" + if(8) + name = new_name + if(9) + name = "armed [name]" + + +/obj/item/ed209_assembly/update_icon_state() + switch(build_step) + if(1) + item_state = "ed209_leg" + icon_state = "ed209_leg" + if(2) + item_state = "ed209_legs" + icon_state = "ed209_legs" + if(3,4) + item_state = "[lasercolor]ed209_shell" + icon_state = "[lasercolor]ed209_shell" + if(5) + item_state = "[lasercolor]ed209_hat" + icon_state = "[lasercolor]ed209_hat" + if(6,7) + item_state = "[lasercolor]ed209_prox" + icon_state = "[lasercolor]ed209_prox" + if(8,9) + item_state = "[lasercolor]ed209_taser" + icon_state = "[lasercolor]ed209_taser" + + /obj/item/ed209_assembly/attackby(obj/item/W, mob/user, params) ..() @@ -64,13 +110,7 @@ qdel(W) build_step++ to_chat(user, "You add the robot leg to [src].") - name = "legs/frame assembly" - if(build_step == 1) - item_state = "ed209_leg" - icon_state = "ed209_leg" - else - item_state = "ed209_legs" - icon_state = "ed209_legs" + update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) if(2) var/newcolor = "" @@ -85,14 +125,12 @@ qdel(W) build_step++ to_chat(user, "You add the armor to [src].") - name = "vest/legs/frame assembly" - item_state = "[lasercolor]ed209_shell" - icon_state = "[lasercolor]ed209_shell" + update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) if(3) if(W.tool_behaviour == TOOL_WELDER && W.use_tool(src, user, volume = W.tool_volume)) build_step++ - name = "shielded frame assembly" + update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) to_chat(user, "You weld the vest to [src].") if(4) switch(lasercolor) @@ -113,9 +151,7 @@ qdel(W) build_step++ to_chat(user, "You add the helmet to [src].") - name = "covered and shielded frame assembly" - item_state = "[lasercolor]ed209_hat" - icon_state = "[lasercolor]ed209_hat" + update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) if(5) if(isprox(W)) @@ -124,9 +160,7 @@ qdel(W) build_step++ to_chat(user, "You add the prox sensor to [src].") - name = "covered, shielded and sensored frame assembly" - item_state = "[lasercolor]ed209_prox" - icon_state = "[lasercolor]ed209_prox" + update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) if(6) if(istype(W, /obj/item/stack/cable_coil)) @@ -141,43 +175,32 @@ build_step = 7 playsound(loc, W.usesound, 50, 1) to_chat(user, "You wire the ED-209 assembly.") - name = "wired ED-209 assembly" + update_appearance(UPDATE_NAME) if(7) - var/newname = "" + new_name = "" switch(lasercolor) if("b") if(!istype(W, /obj/item/gun/energy/laser/tag/blue)) return - newname = "bluetag ED-209 assembly" + new_name = "bluetag ED-209 assembly" if("r") if(!istype(W, /obj/item/gun/energy/laser/tag/red)) return - newname = "redtag ED-209 assembly" + new_name = "redtag ED-209 assembly" if("") if(!istype(W, /obj/item/gun/energy/gun/advtaser)) return - newname = "taser ED-209 assembly" + new_name = "taser ED-209 assembly" else return if(!user.drop_transfer_item_to_loc(W, src)) return - name = newname build_step++ to_chat(user, "You add [W] to [src].") - item_state = "[lasercolor]ed209_taser" - icon_state = "[lasercolor]ed209_taser" + update_appearance(UPDATE_NAME|UPDATE_ICON_STATE) qdel(W) - if(8) - if(istype(W, /obj/item/screwdriver)) - playsound(loc, W.usesound, 100, 1) - to_chat(user, "You start attaching the gun to the frame...") - if(do_after(user, 40 * W.toolspeed * gettoolspeedmod(user), target = src)) - build_step++ - name = "armed [name]" - to_chat(user, "Taser gun attached.") - if(9) if(istype(W, /obj/item/stock_parts/cell)) if(!user.drop_transfer_item_to_loc(W, src)) @@ -190,6 +213,19 @@ user.temporarily_remove_item_from_inventory(src, force = TRUE) qdel(src) + +/obj/item/ed209_assembly/screwdriver_act(mob/living/user, obj/item/I) + if(build_step != 8) + return + I.play_tool_sound(src) + to_chat(user, "You start attaching the gun to the frame...") + if(do_after(user, 4 SECONDS * I.toolspeed, target = src)) + build_step++ + update_appearance(UPDATE_NAME) + to_chat(user, "You attach the gun to the frame.") + return TRUE + + //Floorbot assemblies /obj/item/toolbox_tiles desc = "It's a toolbox with tiles sticking out the top" @@ -242,7 +278,7 @@ B.toolbox_color = "s" if(/obj/item/storage/toolbox/fakesyndi) B.toolbox_color = "s" - B.icon_state = "[B.toolbox_color]toolbox_tiles" + B.update_icon(UPDATE_ICON_STATE) user.put_in_hands(B, ignore_anim = FALSE) to_chat(user, "You add the tiles into the empty toolbox. They protrude from the top.") user.temporarily_remove_item_from_inventory(src, force = TRUE) @@ -251,6 +287,11 @@ to_chat(user, "You need 10 floor tiles to start building a floorbot.") return + +/obj/item/toolbox_tiles/update_icon_state() + icon_state = "[toolbox_color]toolbox_tiles" + + /obj/item/toolbox_tiles/attackby(obj/item/W, mob/user, params) ..() if(isprox(W)) @@ -260,7 +301,7 @@ var/obj/item/toolbox_tiles/sensor/B = new /obj/item/toolbox_tiles/sensor(drop_location()) B.created_name = created_name B.toolbox_color = src.toolbox_color - B.icon_state = "[B.toolbox_color]toolbox_tiles_sensor" + B.update_icon(UPDATE_ICON_STATE) user.put_in_hands(B, ignore_anim = FALSE) to_chat(user, "You add the sensor to the toolbox and tiles.") user.temporarily_remove_item_from_inventory(src, force = TRUE) @@ -272,6 +313,11 @@ created_name = t add_game_logs("[key_name(user)] has renamed a robot to [t]", user) + +/obj/item/toolbox_tiles/sensor/update_icon_state() + icon_state = "[toolbox_color]toolbox_tiles_sensor" + + /obj/item/toolbox_tiles/sensor/attackby(obj/item/W, mob/user, params) ..() if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm)) @@ -340,14 +386,21 @@ ..() if(new_skin) skin = new_skin - update_icon() + update_icon(UPDATE_OVERLAYS) + -/obj/item/firstaid_arm_assembly/update_icon() - overlays.Cut() +/obj/item/firstaid_arm_assembly/update_overlays() + . = ..() if(skin) - overlays += image('icons/obj/aibots.dmi', "kit_skin_[skin]") + . += image('icons/obj/aibots.dmi', "kit_skin_[skin]") if(build_step > 0) - overlays += image('icons/obj/aibots.dmi', "na_scanner") + . += image('icons/obj/aibots.dmi', "na_scanner") + + +/obj/item/firstaid_arm_assembly/update_name(updates = ALL) + . = ..() + if(build_step == 1) + name = "First aid/robot arm/health analyzer assembly" /obj/item/firstaid_arm_assembly/attackby(obj/item/I, mob/user, params) @@ -366,8 +419,7 @@ qdel(I) build_step++ to_chat(user, "You add the health sensor to [src].") - name = "First aid/robot arm/health analyzer assembly" - update_icon() + update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) if(1) if(isprox(I)) @@ -403,32 +455,77 @@ var/build_step = 0 var/robot_arm = /obj/item/robot_parts/l_arm + +/obj/item/secbot_assembly/update_name(updates = ALL) + . = ..() + switch(build_step) + if(2) + name = "helmet/signaler/prox sensor assembly" + if(3) + name = "helmet/signaler/prox sensor/robot arm assembly" + + +/obj/item/secbot_assembly/update_overlays() + . = ..() + switch(build_step) + if(1) + . += "hs_hole" + if(2) + . += "hs_eye" + if(3) + . += "hs_arm" + + +/obj/item/secbot_assembly/screwdriver_act(mob/living/user, obj/item/I) + if(build_step != 0 && build_step != 2 && build_step != 3) + return + + switch(build_step) + if(0) + new /obj/item/assembly/signaler(get_turf(src)) + new /obj/item/clothing/head/helmet(get_turf(src)) + to_chat(user, "You disconnect the signaler from the helmet.") + qdel(src) + if(2) + new /obj/item/assembly/prox_sensor(get_turf(src)) + to_chat(user, "You detach the proximity sensor from [src].") + build_step-- + if(3) + new /obj/item/robot_parts/l_arm(get_turf(src)) + to_chat(user, "You remove the robot arm from [src].") + build_step-- + + I.play_tool_sound(src) + update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) + return TRUE + + /obj/item/clothing/head/helmet/attackby(obj/item/assembly/signaler/S, mob/user, params) ..() if(!issignaler(S)) ..() return - if(!S.secured) - qdel(S) - var/obj/item/secbot_assembly/A = new /obj/item/secbot_assembly(drop_location()) - user.put_in_hands(A, ignore_anim = FALSE) - to_chat(user, "You add the signaler to the helmet.") - user.temporarily_remove_item_from_inventory(src, force = TRUE) - qdel(src) - else + if(S.secured) + to_chat(user, "[S] is secured.") return + qdel(S) + var/obj/item/secbot_assembly/A = new /obj/item/secbot_assembly(drop_location()) + user.put_in_hands(A, ignore_anim = FALSE) + to_chat(user, "You add the signaler to the helmet.") + user.temporarily_remove_item_from_inventory(src, force = TRUE) + qdel(src) + + /obj/item/secbot_assembly/attackby(obj/item/I, mob/user, params) ..() if(I.tool_behaviour == TOOL_WELDER && I.use_tool(src, user, volume = I.tool_volume)) if(!build_step) build_step++ - overlays += "hs_hole" to_chat(user, "You weld a hole in [src]!") else if(build_step == 1) build_step-- - overlays -= "hs_hole" to_chat(user, "You weld the hole in [src] shut!") else if(isprox(I) && (build_step == 1)) @@ -436,8 +533,6 @@ return build_step++ to_chat(user, "You add the prox sensor to [src]!") - overlays += "hs_eye" - name = "helmet/signaler/prox sensor assembly" qdel(I) else if(((istype(I, /obj/item/robot_parts/l_arm)) || (istype(I, /obj/item/robot_parts/r_arm))) && (build_step == 2)) @@ -445,8 +540,6 @@ return build_step++ to_chat(user, "You add the robot arm to [src]!") - name = "helmet/signaler/prox sensor/robot arm assembly" - overlays += "hs_arm" robot_arm = I.type qdel(I) @@ -467,7 +560,7 @@ created_name = t add_game_logs("[key_name(user)] has renamed a robot to [t]", user) - else if(istype(I, /obj/item/screwdriver)) + else if(I.tool_behaviour == TOOL_SCREWDRIVER) if(!build_step) new /obj/item/assembly/signaler(get_turf(src)) new /obj/item/clothing/head/helmet(get_turf(src)) @@ -486,15 +579,18 @@ to_chat(user, "You remove the robot arm from [src].") build_step-- -//General Griefsky - - else if((istype(I, /obj/item/wrench)) && (build_step == 3)) + else if((I.tool_behaviour == TOOL_WRENCH) && (build_step == 3)) var/obj/item/griefsky_assembly/A = new /obj/item/griefsky_assembly(drop_location()) user.put_in_hands(A, ignore_anim = FALSE) to_chat(user, "You adjust the arm slots for extra weapons!.") user.temporarily_remove_item_from_inventory(src, force = TRUE) qdel(src) + update_appearance(UPDATE_NAME|UPDATE_OVERLAYS) + + +//General Griefsky + /obj/item/griefsky_assembly name = "\improper Griefsky assembly" desc = "Some sort of bizarre assembly." @@ -506,7 +602,7 @@ /obj/item/griefsky_assembly/attackby(obj/item/I, mob/user, params) ..() - if((istype(I, /obj/item/melee/energy/sword)) && (!toy_step == 0 )) + if((istype(I, /obj/item/melee/energy/sword)) && (toy_step != 0 )) to_chat(user, "You can't add an energy sword to [src]!.") else if((istype(I, /obj/item/melee/energy/sword)) && (build_step < 3 )) @@ -524,7 +620,7 @@ qdel(I) qdel(src) - else if((istype(I, /obj/item/toy/sword)) && (!build_step == 0 )) + else if((istype(I, /obj/item/toy/sword)) && (build_step != 0 )) to_chat(user, "You can't add a toy sword to [src]!.") else if((istype(I, /obj/item/toy/sword)) && (toy_step < 3 )) @@ -542,7 +638,7 @@ qdel(I) qdel(src) - else if(istype(I, /obj/item/screwdriver)) + else if(I.tool_behaviour == TOOL_SCREWDRIVER) if((build_step == 1) || (build_step == 2) || (build_step == 3) || (build_step == 4)) new /obj/item/melee/energy/sword(get_turf(src)) to_chat(user, "You detach the energy sword from [src].") @@ -552,6 +648,23 @@ to_chat(user, "You detach the toy sword from [src].") toy_step-- + +/obj/item/griefsky_assembly/screwdriver_act(mob/living/user, obj/item/I) + if(!build_step && !toy_step) + return + + if(build_step) + new /obj/item/melee/energy/sword(get_turf(src)) + to_chat(user, "You detach the energy sword from [src].") + build_step-- + else if(toy_step) + new /obj/item/toy/sword(get_turf(src)) + to_chat(user, "You detach the toy sword from [src].") + toy_step-- + I.play_tool_sound(src) + return TRUE + + //Honkbot Assembly /obj/item/storage/box/clown/attackby(obj/item/W, mob/user, params) if(!istype(W, /obj/item/robot_parts/l_arm) && !istype(W, /obj/item/robot_parts/r_arm)) @@ -589,7 +702,6 @@ return build_step++ to_chat(user, "You add the proximity sensor to [src].") - icon_state = "honkbot_proxy" qdel(W) else if(build_step == 1) if(istype(W, /obj/item/bikehorn)) @@ -597,7 +709,6 @@ return build_step++ to_chat(user, "You add the bikehorn to [src]! Honk!") - desc = "A clown box with a robot arm and a bikehorn permanently grafted to it. It needs a trombone to be finished" qdel(W) else if(build_step == 2) if(istype(W, /obj/item/instrument/trombone)) @@ -608,3 +719,17 @@ var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(get_turf(src)) A.robot_arm = robot_arm qdel(src) + + update_appearance(UPDATE_DESC|UPDATE_ICON_STATE) + + +/obj/item/honkbot_arm_assembly/update_icon_state() + if(build_step == 1) + icon_state = "honkbot_proxy" + + +/obj/item/honkbot_arm_assembly/update_desc(updates = ALL) + . = ..() + if(build_step == 2) + desc = "A clown box with a robot arm and a bikehorn permanently grafted to it. It needs a trombone to be finished" + diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 4f286b054c4..8f9e83d5007 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -427,7 +427,7 @@ update_icon() -/mob/living/simple_animal/bot/floorbot/update_icon() +/mob/living/simple_animal/bot/floorbot/update_icon_state() if(mode == BOT_REPAIRING) icon_state = "[toolbox_color]floorbot-c" return diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index ebee011df78..63435a01a0b 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -116,10 +116,7 @@ drops_parts = FALSE -/mob/living/simple_animal/bot/medbot/update_icon() - overlays.Cut() - if(skin) - overlays += "medskin_[skin]" +/mob/living/simple_animal/bot/medbot/update_icon_state() if(!on) icon_state = "medibot0" return @@ -132,6 +129,12 @@ icon_state = "medibot1" +/mob/living/simple_animal/bot/medbot/update_overlays() + . = ..() + if(skin) + . += "medskin_[skin]" + + /mob/living/simple_animal/bot/medbot/New(loc, new_skin) ..() var/datum/job/doctor/J = new /datum/job/doctor @@ -467,7 +470,7 @@ ..() -/mob/living/simple_animal/bot/medbot/examinate(atom/A as mob|obj|turf in view(client.maxview())) +/mob/living/simple_animal/bot/medbot/examinate(atom/A as mob|obj|turf in view(client.maxview(), client.eye)) ..() if(has_vision(information_only = TRUE)) chemscan(src, A) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 510197dc34e..661c06d0bec 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -117,14 +117,14 @@ visible_message("[user] inserts a cell into [src].", span_notice("You insert the new cell into [src].")) update_controls() - else if(istype(I, /obj/item/crowbar) && open && cell) + else if(I.tool_behaviour == TOOL_CROWBAR && open && cell) cell.add_fingerprint(usr) cell.forceMove(loc) cell = null visible_message("[user] crowbars out the power cell from [src].", span_notice("You pry the powercell out of [src].")) update_controls() - else if(istype(I, /obj/item/wrench)) + else if(I.tool_behaviour == TOOL_WRENCH) if(health < maxHealth) adjustBruteLoss(-25) updatehealth() @@ -132,7 +132,7 @@ span_notice("You repair [src]!")) else to_chat(user, span_notice("[src] does not need a repair!")) - else if((istype(I, /obj/item/multitool) || istype(I, /obj/item/wirecutters)) && open) + else if((I.tool_behaviour == TOOL_MULTITOOL || I.tool_behaviour == TOOL_WIRECUTTER) && open) return attack_hand(user) else if(load && ismob(load)) // chance to knock off rider if(prob(1 + I.force * 2)) @@ -168,17 +168,22 @@ playsound(loc, 'sound/effects/sparks1.ogg', 100, FALSE) -/mob/living/simple_animal/bot/mulebot/update_icon() +/mob/living/simple_animal/bot/mulebot/update_icon_state() if(open) icon_state="mulebot-hatch" else icon_state = "mulebot[wires.is_cut(WIRE_MOB_AVOIDANCE)]" - overlays.Cut() + + +/mob/living/simple_animal/bot/mulebot/update_overlays() + . = ..() if(load && !ismob(load))//buckling handles the mob offsets - load.pixel_y = initial(load.pixel_y) + 9 + var/image/load_overlay = image(icon = load.icon, icon_state = load.icon_state) + load_overlay.pixel_y = initial(load.pixel_y) + 9 if(load.layer < layer) - load.layer = layer + 0.1 - overlays += load + load_overlay.layer = layer + 0.1 + load_overlay.overlays = load.overlays + . += load_overlay /mob/living/simple_animal/bot/mulebot/ex_act(severity) @@ -371,7 +376,7 @@ // mousedrop a crate to load the bot // can load anything if hacked -/mob/living/simple_animal/bot/mulebot/MouseDrop_T(atom/movable/AM, mob/user) +/mob/living/simple_animal/bot/mulebot/MouseDrop_T(atom/movable/AM, mob/user, params) if(!istype(AM) || user.incapacitated() || user.lying || !in_range(user, src)) return FALSE @@ -451,8 +456,6 @@ mode = BOT_IDLE - overlays.Cut() - unbuckle_all_mobs() if(load) @@ -467,6 +470,8 @@ step(load, dirn) load = null + update_icon(UPDATE_OVERLAYS) + // in case non-load items end up in contents, dump every else too // this seems to happen sometimes due to race conditions // with items dropping as mobs are loaded diff --git a/code/modules/mob/living/simple_animal/bot/syndicate.dm b/code/modules/mob/living/simple_animal/bot/syndicate.dm index 3f81984e7d5..2b94268db81 100644 --- a/code/modules/mob/living/simple_animal/bot/syndicate.dm +++ b/code/modules/mob/living/simple_animal/bot/syndicate.dm @@ -39,7 +39,7 @@ prev_access = access_card.access -/mob/living/simple_animal/bot/ed209/syndicate/update_icon() +/mob/living/simple_animal/bot/ed209/syndicate/update_icon_state() icon_state = initial(icon_state) diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index b7e6d671c3e..a30f8ec63bb 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -83,8 +83,6 @@ user.drop_transfer_item_to_loc(B, src) mmi = B transfer_personality(B) - - update_icon() return 1 else if(O.GetID()) @@ -140,15 +138,25 @@ melee_damage_upper = 15 attack_sound = 'sound/machines/defib_zap.ogg' + /mob/living/simple_animal/spiderbot/proc/transfer_personality(obj/item/mmi/M) mind = M.brainmob.mind mind.key = M.brainmob.key ckey = M.brainmob.ckey - name = "Spider-bot ([M.brainmob.name])" + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) if(emagged) to_chat(src, "You have been emagged; you are now completely loyal to [emagged_master] and [emagged_master.p_their()] every order!") -/mob/living/simple_animal/spiderbot/update_icon() + +/mob/living/simple_animal/spiderbot/update_name(updates = ALL) + . = ..() + if(mmi) + name = "Spider-bot ([mmi.brainmob.name])" + else + name = "Spider-bot" + + +/mob/living/simple_animal/spiderbot/update_icon_state() if(mmi) if(istype(mmi, /obj/item/mmi)) icon_state = "spiderbot-chassis-mmi" @@ -161,6 +169,7 @@ icon_state = "spiderbot-chassis" icon_living = "spiderbot-chassis" + /mob/living/simple_animal/spiderbot/proc/eject_brain() if(mmi) var/turf/T = get_turf(src) @@ -168,5 +177,4 @@ if(mind) mind.transfer_to(mmi.brainmob) mmi = null - name = "Spider-bot" - update_icon() + update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 70af8c35472..9ec779ac62a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -57,6 +57,7 @@ Difficulty: Medium death_sound = "bodyfall" footstep_type = FOOTSTEP_MOB_HEAVY enraged_loot = /obj/item/disk/fauna_research/blood_drunk_miner + enraged_unique_loot = /obj/item/clothing/suit/hooded/explorer/blood attack_action_types = list(/datum/action/innate/megafauna_attack/dash, /datum/action/innate/megafauna_attack/kinetic_accelerator, /datum/action/innate/megafauna_attack/transform_weapon) @@ -65,7 +66,87 @@ Difficulty: Medium icon_state = null gpstag = "Mysterious Signal" desc = "The sweet blood, oh, it sings to me." - invisibility = 100 + invisibility = INVISIBILITY_ABSTRACT + +/* New costume */ + +/obj/item/clothing/suit/hooded/explorer/blood + name = "empowered explorer suit" + desc = "An armoured hood for exploring harsh environments. The sweet blood, oh, it sings to you." + armor = list("melee" = 55, "bullet" = 35, "laser" = 25, "energy" = 25, "bomb" = 75, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + hoodtype = /obj/item/clothing/head/hooded/explorer/blood + var/obj/effect/proc_holder/spell/blood_suit/blood_spell + +/obj/item/clothing/head/hooded/explorer/blood + name = "empowered explorer hood" + desc = "An armoured hood for exploring harsh environments. The sweet blood, oh, it sings to you." + armor = list("melee" = 55, "bullet" = 35, "laser" = 25, "energy" = 25, "bomb" = 75, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + +/obj/item/clothing/suit/hooded/explorer/blood/Initialize(mapload) + .=..() + blood_spell = new + +/obj/item/clothing/suit/hooded/explorer/blood/Destroy() + QDEL_NULL(blood_spell) + return ..() + +/obj/effect/proc_holder/spell/blood_suit + name = "Bloodlust" + desc = "The sweet blood. My swetty blood I love you!" + base_cooldown = 20 SECONDS + clothes_req = FALSE + human_req = FALSE + phase_allowed = TRUE + should_recharge_after_cast = TRUE + stat_allowed = UNCONSCIOUS + sound = 'sound/misc/enter_blood.ogg' + action_icon_state = "bloodcrawl" + panel = "Blood Drunk" + +/obj/effect/proc_holder/spell/blood_suit/create_new_targeting() + return new /datum/spell_targeting/self + +/obj/effect/proc_holder/spell/blood_suit/cast(list/targets, mob/living/user = usr) + if(is_mining_level(user.z) || istype(get_area(user), /area/ruin/space/bubblegum_arena)) + if(user.lying) + to_chat(user, span_colossus("Fight right now my bloody warrior!")) + else + to_chat(user, span_colossus("The blood sings to me. How pretty!")) + user.say("Oh sweet blood. I hear you singing!") + user.SetWeakened(0) + user.SetStunned(0) + user.SetParalysis(0) + user.SetSleeping(0) + user.SetConfused(0) + user.SetImmobilized(0) + user.adjustStaminaLoss(-100) + user.lying = FALSE + user.resting = FALSE + user.update_canmove() + else + to_chat(user, span_colossus("COME BACK TO ME, BLOODY WARRIOR.")) + user.say("I don't hear a blood's sing!") + user.Stun(5 SECONDS) + user.Confused(20 SECONDS) + user.Slowed(20 SECONDS) + user.Dizzy(20 SECONDS) + +/obj/item/clothing/suit/hooded/explorer/blood/equipped(mob/living/carbon/human/user, slot, initial) + . = ..() + if(!ishuman(user)) + return + if(slot == slot_wear_suit) + user.mob_spell_list += blood_spell + blood_spell.action.Grant(user) + +/obj/item/clothing/suit/hooded/explorer/blood/dropped(mob/living/carbon/human/user) + . = ..() + + if(!ishuman(user)) + return + if(user.get_item_by_slot(slot_wear_suit) == src) + user.mob_spell_list -= blood_spell + blood_spell.action.Remove(user) /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 2b631ef3898..6ed97039ab0 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -82,7 +82,7 @@ Difficulty: Hard icon_state = null gpstag = "Mysterious Signal" desc = "You're not quite sure how a signal can be bloody." - invisibility = 100 + invisibility = INVISIBILITY_ABSTRACT /mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize(mapload) . = ..() @@ -488,7 +488,7 @@ Difficulty: Hard /obj/effect/decal/cleanable/blood/gibs/bubblegum/can_bloodcrawl_in() return TRUE -/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon) +/mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) if(!charging) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 3cd88392f41..938bb1f0c98 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -355,7 +355,7 @@ Difficulty: Very Hard icon_state = null gpstag = "Mysterious Signal" desc = "Get in the fucking robot." - invisibility = 100 + invisibility = INVISIBILITY_ABSTRACT #undef RANDOM_SHOTS #undef BLAST diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index c5a1f972e33..dd1dec43930 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -100,7 +100,7 @@ Difficulty: Medium icon_state = null gpstag = "Mysterious Signal" desc = "Here there be dragons." - invisibility = 100 + invisibility = INVISIBILITY_ABSTRACT /mob/living/simple_animal/hostile/megafauna/dragon/OpenFire() if(swooping) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 5aa5034258e..2bdd4d2e3c7 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -64,6 +64,7 @@ Difficulty: Hard del_on_death = TRUE death_sound = 'sound/magic/repulse.ogg' enraged_loot = /obj/item/disk/fauna_research/hierophant + enraged_unique_loot = /obj/item/clothing/accessory/necklace/hierophant_talisman attack_action_types = list(/datum/action/innate/megafauna_attack/blink, /datum/action/innate/megafauna_attack/chaser_swarm, /datum/action/innate/megafauna_attack/cross_blasts, @@ -765,6 +766,12 @@ Difficulty: Hard light_range = 2 layer = LOW_OBJ_LAYER anchored = TRUE + var/teleporting = FALSE + + +/obj/effect/hierophant/update_icon_state() + icon_state = "hierophant_tele_[teleporting ? "on" : "off"]" + /obj/effect/hierophant/ex_act() return @@ -797,4 +804,4 @@ Difficulty: Hard icon_state = null gpstag = "Mysterious Signal" desc = "Heed its words." - invisibility = 100 + invisibility = INVISIBILITY_ABSTRACT diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index eae3590a2b2..5e3694824de 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -189,6 +189,9 @@ Difficulty: Medium if(ismineralturf(t)) var/turf/simulated/mineral/M = t M.attempt_drill(src) + if(iswallturf(t)) + var/turf/simulated/wall/W = t + W.thermitemelt(time = 1 SECONDS) for(var/mob/living/M in t) if(faction_check(M.faction, faction, FALSE)) continue @@ -228,4 +231,4 @@ Difficulty: Medium icon_state = null gpstag = "Mysterious Signal" desc = "The message repeats." - invisibility = 100 + invisibility = INVISIBILITY_ABSTRACT diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index fd328613316..697c96554be 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -44,6 +44,9 @@ var/enraged = FALSE /// Path of the hardmode loot disk, if applicable. var/enraged_loot + /// Hardmode one loot + var/enraged_unique_loot + /// Only one loot from hardmode /mob/living/simple_animal/hostile/megafauna/Initialize(mapload) . = ..() @@ -79,6 +82,8 @@ if(C && crusher_loot && C.total_damage >= maxHealth * 0.6) spawn_crusher_loot() if(enraged && length(loot) && enraged_loot) //Don't drop a disk if the boss drops no loot. Important for legion. + if(enraged_unique_loot) + loot += enraged_unique_loot for(var/mob/living/M in urange(20, src)) //Yes big range, but for bubblegum arena if(M.client) loot += enraged_loot //Disk for each miner / borg. @@ -154,6 +159,7 @@ mob_attack_logs += "[time_stamp()] Aggrod on [L][COORD(L)] at [COORD(src)]" ..() + /mob/living/simple_animal/hostile/megafauna/LoseTarget() var/mob/living/L = target if(istype(L) && L.mind) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index c02f592f185..a460b45e7dd 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa icon_state = null gpstag = "Hungry Signal" desc = "Transmitted over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom" - invisibility = 100 + invisibility = INVISIBILITY_ABSTRACT //SWARMER AI //AI versions of the swarmer mini-antag diff --git a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm index fbaa26489b4..bcd8ddd048f 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm @@ -146,7 +146,7 @@ . = ..() if(.) var/mob/living/L = target - if(istype(L)) + if(istype(L) && !isrobot(L)) L.AdjustWeakened(1 SECONDS) L.Slowed(3 SECONDS) L.Confused(3 SECONDS) diff --git a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm index 61d25da2df4..51a857c9a2d 100644 --- a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm +++ b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm @@ -100,11 +100,12 @@ currentWormSeg = newSegment for(var/mob/living/simple_animal/hostile/spaceWorm/SW in totalWormSegments) - SW.update_icon() + SW.update_icon(UPDATE_ICON_STATE) -/mob/living/simple_animal/hostile/spaceWorm/wormHead/update_icon() + +/mob/living/simple_animal/hostile/spaceWorm/wormHead/update_icon_state() if(stat == CONSCIOUS || stat == UNCONSCIOUS) - icon_state = "spacewormhead[previousWorm ? 1 : 0]" + icon_state = "spacewormhead[previousWorm ? "1" : "0"]" if(previousWorm) dir = get_dir(previousWorm,src) else @@ -113,7 +114,7 @@ for(var/mob/living/simple_animal/hostile/spaceWorm/SW in totalWormSegments) if(SW == src)//incase src ends up in here we don't want an infinite loop continue - SW.update_icon() + SW.update_icon(UPDATE_ICON_STATE) //Try to move onto target's turf and eat them @@ -207,7 +208,7 @@ if(prob(stomachProcessProbability)) ProcessStomach() - update_icon()//While most mobs don't call this on Life(), the worm would probably look stupid without it + update_icon(UPDATE_ICON_STATE)//While most mobs don't call this on Life(), the worm would probably look stupid without it //Plus the worm's update_icon() isn't as beefy. ..() //Really high fuckin priority that this is at the bottom. @@ -227,11 +228,11 @@ if(.) if(previousWorm) previousWorm.Move(segmentNextPos) - update_icon() + update_icon(UPDATE_ICON_STATE) //Update the appearence of this big weird chain-worm-thingy -/mob/living/simple_animal/hostile/spaceWorm/update_icon() +/mob/living/simple_animal/hostile/spaceWorm/update_icon_state() if(stat != DEAD) if(previousWorm) icon_state = "spaceworm[get_dir(src,previousWorm) | get_dir(src,nextWorm)]" diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/abillities.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/abillities.dm index 39c9ca6325f..68d1ac5325e 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/abillities.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/abillities.dm @@ -91,7 +91,7 @@ fireball_type = /obj/item/projectile/terrorspider/widow/venom -/obj/effect/proc_holder/spell/fireball/venom_spit/update_icon() +/obj/effect/proc_holder/spell/fireball/venom_spit/update_icon_state() return @@ -132,7 +132,7 @@ fireball_type = /obj/item/projectile/terrorspider/widow/smoke -/obj/effect/proc_holder/spell/fireball/smoke_spit/update_icon() +/obj/effect/proc_holder/spell/fireball/smoke_spit/update_icon_state() return diff --git a/code/modules/mob/living/simple_animal/hulk_power.dm b/code/modules/mob/living/simple_animal/hulk_power.dm index 31dc1c2b4e8..10ccb9d5f15 100644 --- a/code/modules/mob/living/simple_animal/hulk_power.dm +++ b/code/modules/mob/living/simple_animal/hulk_power.dm @@ -485,7 +485,7 @@ return ..() -/obj/effect/proc_holder/spell/fireball/hulk_spit/update_icon() +/obj/effect/proc_holder/spell/fireball/hulk_spit/update_icon_state() return diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index bf2095c0f4b..2a66e06b085 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -35,6 +35,7 @@ icon_resting = "parrot_sit" pass_flags = PASSTABLE can_collar = TRUE + blocks_emissive = EMISSIVE_BLOCK_UNIQUE tts_seed = "Sniper" faction = list("neutral", "jungle") diff --git a/code/modules/mob/living/simple_animal/posessed_object.dm b/code/modules/mob/living/simple_animal/posessed_object.dm index 25b295fd4e1..560cb2bc7b2 100644 --- a/code/modules/mob/living/simple_animal/posessed_object.dm +++ b/code/modules/mob/living/simple_animal/posessed_object.dm @@ -168,4 +168,3 @@ overlays = possessed_item.overlays set_opacity(possessed_item.opacity) return ..(NONE) - diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 8a6333566b4..f846ffa5dbc 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -45,6 +45,10 @@ else ..() +/mob/living/simple_animal/shade/update_icon_state() + icon_state = holy ? "shade_angelic" : "shade" + + /mob/living/simple_animal/shade/Process_Spacemove() return TRUE @@ -64,3 +68,18 @@ /mob/living/simple_animal/shade/sword/Initialize(mapload) .=..() status_flags |= GODMODE + +/mob/living/simple_animal/shade/talisman + faction = list("neutral") + tts_seed = "Alextraza_echo" + // Ckey check for master of talisman + var/master + +/mob/living/simple_animal/shade/talisman/Initialize(mapload) + .=..() + status_flags |= GODMODE + +/mob/living/simple_animal/shade/talisman/New() + ..() + var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] + medsensor.add_hud_to(src) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index fd04de44d15..35bc800f4c9 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -737,14 +737,9 @@ /mob/living/proc/AdjustDeaf(amount, bound_lower = 0, bound_upper = INFINITY) SetDeaf(directional_bounded_sum(AmountDeaf(), amount, bound_lower, bound_upper)) -/mob/living/proc/BecomeDeaf() - mutations |= DEAF - /mob/living/proc/CureDeaf() - mutations -= DEAF CureIfHasDisability(GLOB.deafblock) - // // DISABILITIES // diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index fc1f100be9b..fd6deb1358e 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -15,7 +15,7 @@ /mob/living/proc/taste(datum/reagents/from) if(last_taste_time + 50 < world.time) var/taste_sensitivity = get_taste_sensitivity() - var/text_output = from.generate_taste_message(taste_sensitivity) + var/text_output = from.generate_taste_message(taste_sensitivity, src) // We dont want to spam the same message over and over again at the // person. Give it a bit of a buffer. if(AmountHallucinate() > 50 SECONDS && prob(25)) diff --git a/code/modules/mob/living/update_status.dm b/code/modules/mob/living/update_status.dm index 6dc0db4082e..1f53ae52427 100644 --- a/code/modules/mob/living/update_status.dm +++ b/code/modules/mob/living/update_status.dm @@ -1,12 +1,12 @@ /mob/living/update_blind_effects() - if(!has_vision(information_only=TRUE)) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - throw_alert("blind", /obj/screen/alert/blind) - return 1 - else + if(has_vision(information_only = TRUE)) clear_fullscreen("blind") clear_alert("blind") - return 0 + return FALSE + + overlay_fullscreen("blind", /obj/screen/fullscreen/blind) + throw_alert("blind", /obj/screen/alert/blind) + return TRUE /mob/living/update_blurry_effects() @@ -46,13 +46,13 @@ // Whether the mob can hear things /mob/living/can_hear() - return !(DEAF in mutations) && !HAS_TRAIT(src, TRAIT_DEAF) + return !HAS_TRAIT(src, TRAIT_DEAF) // Whether the mob is able to see // `information_only` is for stuff that's purely informational - like blindness overlays // This flag exists because certain things like angel statues expect this to be false for dead people /mob/living/has_vision(information_only = FALSE) - return (information_only && stat == DEAD) || !(AmountBlinded() || (BLINDNESS in mutations) || stat) + return (information_only && stat == DEAD) || !(AmountBlinded() || (BLINDNESS in mutations) || stat || get_total_tint() >= 3) // Whether the mob is capable of talking /mob/living/can_speak() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index e65e901721a..3b63977c9f6 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -79,26 +79,25 @@ return if(type) - if((type & EMOTE_VISIBLE) && !has_vision(information_only = TRUE)) // Vision related - if(!(alt)) + if((type & EMOTE_VISIBLE) && !has_vision(information_only = TRUE)) //Vision related + if(!alt) return - else - msg = alt - type = alt_type - if((type & EMOTE_AUDIBLE) && !can_hear()) // Hearing related - if(!(alt)) + msg = alt + type = alt_type + + if(type & EMOTE_AUDIBLE && !can_hear()) //Hearing related + if(!alt) return - else - msg = alt - type = alt_type - if((type & EMOTE_VISIBLE) && !has_vision(information_only=TRUE)) - return + msg = alt + type = alt_type + if((type & EMOTE_VISIBLE) && !has_vision(information_only = TRUE)) + return + // Added voice muffling for Issue 41. if(stat == UNCONSCIOUS) to_chat(src, "…Вам почти удаётся расслышать чьи-то слова…") else to_chat(src, msg) - return // Show a message to all mobs in sight of this one @@ -299,18 +298,13 @@ popup.open() //mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine() -/mob/verb/examinate(atom/A as mob|obj|turf in view(client.maxview())) +/mob/verb/examinate(atom/A as mob|obj|turf in view(client.maxview(), client.eye)) set name = "Examine" set category = "IC" DEFAULT_QUEUE_OR_CALL_VERB(VERB_CALLBACK(src, PROC_REF(run_examinate), A)) /mob/proc/run_examinate(atom/A) - if(!has_vision(information_only = TRUE) && !isobserver(src)) - to_chat(src, chat_box_regular("Здесь что-то есть, но вы не видите — что именно.")) - return TRUE - - face_atom(A) var/list/result = A.examine(src) to_chat(src, chat_box_examine(result.Join("\n"))) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 700b5d9a04d..9bda2f967e9 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -54,6 +54,7 @@ var/med_record = "" var/sec_record = "" var/gen_record = "" + var/exploit_record = "" var/lying = 0 var/lying_prev = 0 var/lastpuke = 0 @@ -228,3 +229,5 @@ /// The datum receiving keyboard input. parent mob by default. var/datum/input_focus = null var/last_emote = null + + var/ghost_orbiting = 0 diff --git a/code/modules/mob/mob_emote.dm b/code/modules/mob/mob_emote.dm index b17532442a0..af545256726 100644 --- a/code/modules/mob/mob_emote.dm +++ b/code/modules/mob/mob_emote.dm @@ -68,13 +68,13 @@ * * * intentional_use: Whether or not to check based on if the action was intentional. */ -/mob/proc/usable_emote_keys(intentional_use = TRUE) +/mob/proc/usable_emote_keys(intentional_use) var/list/all_keys = list() for(var/key in GLOB.emote_list) for(var/datum/emote/P in GLOB.emote_list[key]) if(P.key in all_keys) continue - if(P.can_run_emote(src, status_check = FALSE, intentional = null)) + if(P.can_run_emote(src, status_check = FALSE, intentional = intentional_use)) all_keys += P.key if(P.key_third_person) all_keys += P.key_third_person diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index cd582790d75..7c78e64e586 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -435,8 +435,8 @@ if(affecting.mind) add_attack_logs(attacker, affecting, "Devoured") - - user.adjust_nutrition(2 * affecting.health) + if(!isvampire(user)) + user.adjust_nutrition(2 * affecting.health) for(var/datum/disease/virus/V in affecting.diseases) if(V.spread_flags > NON_CONTAGIOUS) @@ -457,10 +457,6 @@ return 1 var/mob/living/carbon/human/H = attacker - var/datum/antagonist/vampire/vamp = H.mind?.has_antag_datum(/datum/antagonist/vampire) - var/datum/antagonist/goon_vampire/g_vamp = H.mind?.has_antag_datum(/datum/antagonist/goon_vampire) - if(ishuman(H) && (vamp || g_vamp) && istype(prey, /mob/living/simple_animal)) //vampires can't eat simple mobs despite race - return FALSE if(ishuman(H) && is_type_in_list(prey, H.dna.species.allowed_consumed_mobs)) //species eating of other mobs return 1 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 261dd033617..4cd4d3c6442 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -380,6 +380,7 @@ /client/verb/body_r_arm() set name = "body-r-arm" set hidden = 1 + if(!check_has_body_select()) return @@ -398,11 +399,13 @@ if(!check_has_body_select()) return + var/next_in_line if(mob.zone_selected == BODY_ZONE_CHEST) next_in_line = BODY_ZONE_WING else next_in_line = BODY_ZONE_CHEST + var/obj/screen/zone_sel/selector = mob.hud_used.zone_select selector.set_selected_zone(next_in_line) @@ -444,9 +447,15 @@ if(!check_has_body_select()) return + + var/next_in_line + if(mob.zone_selected == BODY_ZONE_PRECISE_GROIN) + next_in_line = BODY_ZONE_TAIL + else + next_in_line = BODY_ZONE_PRECISE_GROIN var/obj/screen/zone_sel/selector = mob.hud_used.zone_select - selector.set_selected_zone(BODY_ZONE_PRECISE_GROIN) + selector.set_selected_zone(next_in_line) /client/verb/body_tail() set name = "body-tail" diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index ce9be619fb6..30d9aadbf3e 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -6,7 +6,7 @@ var/iscopy = 0 -/obj/item/paper/carbon/update_icon() +/obj/item/paper/carbon/update_icon_state() if(iscopy) if(info) icon_state = "cpaper_words" @@ -24,7 +24,6 @@ icon_state = "paper_stack" - /obj/item/paper/carbon/verb/removecopy() set name = "Remove carbon-copy" set category = "Object" diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index d662897190e..262e27f2225 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -16,7 +16,18 @@ /obj/item/clipboard/New() ..() - update_icon() + update_icon(UPDATE_OVERLAYS) + + +/obj/item/clipboard/AltClick(mob/user) + if(Adjacent(user) && !user.incapacitated()) + if(is_pen(user.get_active_hand())) + penPlacement(user, user.get_active_hand(), TRUE) + else + removePen(user) + return + . = ..() + /obj/item/clipboard/verb/removePen(mob/user) set category = "Object" @@ -39,6 +50,7 @@ /obj/item/clipboard/examine(mob/user) . = ..() + . += "Alt-Click to remove its pen." if(in_range(user, src) && toppaper) . += toppaper.examine(user) @@ -60,7 +72,7 @@ containedpen.forceMove_turf() user.put_in_hands(containedpen, ignore_anim = FALSE) containedpen = null - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/clipboard/proc/showClipboard(mob/user) //Show them what's on the clipboard var/dat = {"[src]"} @@ -76,15 +88,23 @@ popup.set_content(dat) popup.open() -/obj/item/clipboard/update_icon() - overlays.Cut() + +/obj/item/clipboard/update_overlays() + . = ..() if(toppaper) - overlays += toppaper.icon_state - overlays += toppaper.overlays + . += toppaper.icon_state + . += toppaper.overlays if(containedpen) - overlays += "clipboard_pen" - overlays += "clipboard_over" - ..() + . += "clipboard_pen" + for(var/obj/O in src) + if(istype(O, /obj/item/photo)) + var/image/img = image('icons/obj/bureaucracy.dmi') + var/obj/item/photo/Ph = O + img = Ph.tiny + . += img + break + . += "clipboard_over" + /obj/item/clipboard/attackby(obj/item/W, mob/user) if(isPaperwork(W)) //If it's a photo, paper bundle, or piece of paper, place it on the clipboard. @@ -93,7 +113,7 @@ playsound(loc, "pageturn", 50, 1) if(isPaperwork(W) == PAPERWORK) toppaper = W - update_icon() + update_icon(UPDATE_OVERLAYS) else if(is_pen(W)) if(!toppaper) //If there's no paper we can write on, just stick the pen into the clipboard penPlacement(user, W, TRUE) @@ -113,7 +133,7 @@ return else if(istype(W, /obj/item/stamp) && toppaper) //We can stamp the topmost piece of paper toppaper.attackby(W, user) - update_icon() + update_icon(UPDATE_OVERLAYS) else return ..() @@ -155,7 +175,7 @@ to_chat(usr, "You flick the pages so that [P] is on top.") playsound(loc, "pageturn", 50, 1) toppaper = P - update_icon() + update_icon(UPDATE_OVERLAYS) showClipboard(usr) #undef PAPERWORK diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index aac51f90340..d1d9a09f839 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -10,7 +10,7 @@ /obj/item/paper/contract/proc/update_text() return -/obj/item/paper/contract/update_icon() +/obj/item/paper/contract/update_icon_state() return diff --git a/code/modules/paperwork/desk_bell.dm b/code/modules/paperwork/desk_bell.dm index 69839e6a98d..67ea39a9248 100644 --- a/code/modules/paperwork/desk_bell.dm +++ b/code/modules/paperwork/desk_bell.dm @@ -29,13 +29,13 @@ return TRUE -/obj/item/desk_bell/MouseDrop(atom/over) +/obj/item/desk_bell/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() if(!.) return FALSE var/mob/user = usr - if(over != user || user.incapacitated() || !ishuman(user)) + if(over_object != user || user.incapacitated() || !ishuman(user)) return FALSE anchored = FALSE diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index fc00441de33..f80d3da514b 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -14,8 +14,9 @@ desc = "A large cabinet with drawers." icon = 'icons/obj/bureaucracy.dmi' icon_state = "filingcabinet" - density = 1 + density = TRUE anchored = TRUE + var/opened = FALSE /obj/structure/filingcabinet/chestdrawer @@ -37,14 +38,20 @@ I.loc = src +/obj/structure/filingcabinet/update_icon_state() + icon_state = "[initial(icon_state)][opened ? "-open" : ""]" + + /obj/structure/filingcabinet/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/paper) || istype(P, /obj/item/folder) || istype(P, /obj/item/photo) || istype(P, /obj/item/paper_bundle) || istype(P, /obj/item/documents)) add_fingerprint(user) to_chat(user, "You put [P] in [src].") user.drop_transfer_item_to_loc(P, src) - icon_state = "[initial(icon_state)]-open" + opened = TRUE + update_icon(UPDATE_ICON_STATE) sleep(5) - icon_state = initial(icon_state) + opened = FALSE + update_icon(UPDATE_ICON_STATE) updateUsrDialog() else if(user.a_intent != INTENT_HARM) to_chat(user, "You can't put [P] in [src]!") @@ -106,9 +113,11 @@ P.forceMove_turf() usr.put_in_hands(P, ignore_anim = FALSE) updateUsrDialog() - icon_state = "[initial(icon_state)]-open" + opened = TRUE + update_icon(UPDATE_ICON_STATE) sleep(5) - icon_state = initial(icon_state) + opened = FALSE + update_icon(UPDATE_ICON_STATE) /* diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index f3f2e646ce8..eeca23bdc72 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -29,17 +29,18 @@ desc = "A white folder." icon_state = "folder_white" -/obj/item/folder/update_icon() - overlays.Cut() + +/obj/item/folder/update_overlays() + . = ..() if(contents.len) - overlays += "folder_paper" - ..() + . += "folder_paper" + /obj/item/folder/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/paper_bundle) || istype(W, /obj/item/documents)) user.drop_transfer_item_to_loc(W, src) to_chat(user, "You put the [W] into \the [src].") - update_icon() + update_icon(UPDATE_OVERLAYS) else if(istype(W, /obj/item/pen)) rename_interactive(user, W) else @@ -90,8 +91,8 @@ //Update everything attack_self(usr) - update_icon() - return + update_icon(UPDATE_OVERLAYS) + /obj/item/folder/documents name = "folder- 'TOP SECRET'" @@ -100,7 +101,7 @@ /obj/item/folder/documents/New() ..() new /obj/item/documents/nanotrasen(src) - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/folder/syndicate name = "folder- 'TOP SECRET'" @@ -112,7 +113,7 @@ /obj/item/folder/syndicate/red/New() ..() new /obj/item/documents/syndicate/red(src) - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/folder/syndicate/blue icon_state = "folder_sblue" @@ -120,7 +121,7 @@ /obj/item/folder/syndicate/blue/New() ..() new /obj/item/documents/syndicate/blue(src) - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/folder/syndicate/yellow icon_state = "folder_syellow" @@ -128,11 +129,11 @@ /obj/item/folder/syndicate/yellow/full/New() ..() new /obj/item/documents/syndicate/yellow(src) - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/folder/syndicate/mining/New() . = ..() new /obj/item/documents/syndicate/mining(src) - update_icon() + update_icon(UPDATE_OVERLAYS) diff --git a/code/modules/paperwork/frames.dm b/code/modules/paperwork/frames.dm index 6e3be6478c3..3c84e75cb11 100644 --- a/code/modules/paperwork/frames.dm +++ b/code/modules/paperwork/frames.dm @@ -25,12 +25,8 @@ qdel(A) return ..() -/obj/item/picture_frame/update_icon() - overlays.Cut() - - if(displayed) - overlays |= getFlatIcon(displayed) +/obj/item/picture_frame/update_icon_state() if(istype(displayed, /obj/item/photo)) icon_state = "[icon_base]-photo" else if(istype(displayed, /obj/structure/sign/poster)) @@ -38,7 +34,15 @@ else icon_state = "[icon_base]-paper" - overlays |= icon_state + +/obj/item/picture_frame/update_overlays() + . = ..() + + if(displayed) + . += getFlatIcon(displayed) + + . += icon_state + /obj/item/picture_frame/proc/insert(obj/D) if(istype(D, /obj/item/poster)) @@ -56,7 +60,7 @@ qdel(D) /obj/item/picture_frame/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) if(displayed) playsound(src, I.usesound, 100, 1) user.visible_message("[user] unfastens \the [displayed] out of \the [src].", "You unfasten \the [displayed] out of \the [src].") @@ -71,7 +75,7 @@ update_icon() else to_chat(user, "There is nothing to remove from \the [src].") - else if(istype(I, /obj/item/crowbar)) + else if(I.tool_behaviour == TOOL_CROWBAR) playsound(src, I.usesound, 100, 1) user.visible_message("[user] breaks down \the [src].", "You break down \the [src].") for(var/A in contents) @@ -199,18 +203,24 @@ QDEL_NULL(frame) return ..() -/obj/structure/sign/picture_frame/update_icon() - overlays.Cut() + +/obj/structure/sign/picture_frame/update_icon_state() if(frame) icon = null icon_state = null - overlays |= getFlatIcon(frame) else icon = initial(icon) icon_state = initial(icon_state) + +/obj/structure/sign/picture_frame/update_overlays() + . = ..() + if(frame) + . += getFlatIcon(frame) + + /obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) playsound(src, I.usesound, 100, 1) user.visible_message("[user] begins to unfasten \the [src] from the wall.", "You begin to unfasten \the [src] from the wall.") if(do_after(user, 100 * I.toolspeed * gettoolspeedmod(user), target = src)) diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index f4dca6a98f8..5a046aaf350 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -6,7 +6,7 @@ item_state = "flight" var/label = null var/labels_left = 30 - var/mode = 0 + var/mode = FALSE /obj/item/hand_labeler/afterattack(atom/A, mob/user, proximity) if(!proximity) @@ -33,9 +33,14 @@ playsound(A, 'sound/items/handling/component_pickup.ogg', 20, TRUE) labels_left-- -/obj/item/hand_labeler/attack_self(mob/user as mob) - mode = !mode + +/obj/item/hand_labeler/update_icon_state() icon_state = "labeler[mode]" + + +/obj/item/hand_labeler/attack_self(mob/user) + mode = !mode + update_icon(UPDATE_ICON_STATE) if(mode) to_chat(user, "You turn on \the [src].") //Now let them chose the text. diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 3232d1a7889..2ea2bfc83f6 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -19,6 +19,7 @@ body_parts_covered = HEAD resistance_flags = FLAMMABLE max_integrity = 50 + blocks_emissive = FALSE attack_verb = list("bapped") permeability_coefficient = 0.01 dog_fashion = /datum/dog_fashion/head @@ -29,9 +30,10 @@ var/footer //The bottom stuff before the stamp but after the body var/info_links //A different version of the paper which includes html links at fields and EOF var/stamps //The (text for the) stamps on the paper. - var/fields //Amount of user created fields + var/fields = 0 //Amount of user created fields var/language = "Galactic Common" //The language of paper. For now using only in case of Thetta var/list/stamped + var/list/stamp_overlays = list() var/ico[0] //Icons and var/offset_x[0] //offsets stored for later var/offset_y[0] //usage by the photocopier @@ -61,8 +63,7 @@ update_icon() updateinfolinks() -/obj/item/paper/update_icon() - ..() +/obj/item/paper/update_icon_state() if(info) icon_state = "paper_words" return @@ -70,6 +71,7 @@ /obj/item/paper/examine(mob/user) . = ..() + . += "Alt-Click the [initial(name)] with a pen in hand to rename it." if(user.is_literate()) if(in_range(user, src) || istype(user, /mob/dead/observer)) show_content(user) @@ -78,12 +80,13 @@ else . += "You don't know how to read." -/obj/item/paper/proc/show_content(var/mob/user, var/forceshow = 0, var/forcestars = 0, var/infolinks = 0, var/view = 1) + +/obj/item/paper/proc/show_content(mob/user, forceshow = FALSE, forcestars = FALSE, infolinks, view = TRUE) var/datum/asset/assets = get_asset_datum(/datum/asset/simple/paper) assets.send(user) var/data - var/stars = (!user?.say_understands(null, GLOB.all_languages[language]) && !forceshow) || forcestars + var/stars = (!user.say_understands(null, GLOB.all_languages[language]) && !forceshow) || forcestars if(stars) //assuming all paper is written in common is better than hardcoded type checks data = "[header][stars(info)][footer][stamps]" else @@ -105,84 +108,132 @@ popup.open() return data -/obj/item/paper/verb/rename() - set name = "Rename paper" - set category = "Object" - set src in usr - if((CLUMSY in usr.mutations) && prob(50)) - to_chat(usr, "You cut yourself on the paper.") +/obj/item/paper/AltClick(mob/living/carbon/human/user) + if(!ishuman(user) || user.incapacitated() || !Adjacent(user)) + return + if(is_pen(user.get_active_hand())) + rename(user) return - if(!usr.is_literate()) - to_chat(usr, "You don't know how to read.") + if(user.is_in_hands(src)) + ProcFoldPlane(user, src) return - var/n_name = rename_interactive(usr) + return ..() + + +/obj/item/paper/proc/rename(mob/user) + if((CLUMSY in user.mutations) && prob(50)) + to_chat(user, "You cut yourself on the paper.") + return + if(!user.is_literate()) + to_chat(user, "You don't know how to read.") + return + var/n_name = rename_interactive(user) if(isnull(n_name)) return if(n_name != "") desc = "This is a paper titled '" + name + "'." else desc = initial(desc) - add_fingerprint(usr) - return + add_fingerprint(user) + /obj/item/paper/attack_self(mob/living/user as mob) user.examinate(src) - if(rigged && (SSholiday.holidays && SSholiday.holidays[APRIL_FOOLS])) - if(spam_flag == 0) - spam_flag = 1 - playsound(loc, 'sound/items/bikehorn.ogg', 50, 1) - spawn(20) - spam_flag = 0 - return + if(rigged && !spam_flag && (SSholiday.holidays && SSholiday.holidays[APRIL_FOOLS])) + spam_flag = TRUE + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), 3 SECONDS) + playsound(loc, 'sound/items/bikehorn.ogg', 50, 1) + -/obj/item/paper/attack_ai(var/mob/living/silicon/ai/user as mob) +/obj/item/paper/attack_ai(mob/living/silicon/ai/user) var/dist - if(istype(user) && user.current) //is AI + if(isAI(user) && user.current) //is AI dist = get_dist(src, user.current) else //cyborg or AI not seeing through a camera dist = get_dist(src, user) if(dist < 2) - show_content(user, forceshow = 1) + show_content(user, forceshow = TRUE) else - show_content(user, forcestars = 1) - return + show_content(user, forcestars = TRUE) + + +/obj/item/paper/attack(mob/living/carbon/human/target, mob/living/user, def_zone) + if(!ishuman(target)) + return ..() -/obj/item/paper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(user.zone_selected == BODY_ZONE_PRECISE_EYES) user.visible_message("[user] is trying to show the paper to you. ", \ - "You hold up a paper and try to show it to [M]. ") + "You hold up a paper and try to show it to [target]. ") - if(do_mob(user, M, 0.7 SECONDS)) + if(do_mob(user, target, 0.7 SECONDS)) user.visible_message("[user] shows the paper to you. ", \ - "You hold up a paper and show it to [M]. ") - M.examinate(src) + "You hold up a paper and show it to [target]. ") + target.examinate(src) else - to_chat(user, span_warning("You fail to show the paper to [M].")) + to_chat(user, span_warning("You fail to show the paper to [target].")) else if(user.zone_selected == BODY_ZONE_PRECISE_MOUTH) - if(!istype(M, /mob)) return - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H == user) - to_chat(user, "You wipe off your face with [src].") - H.lip_style = null - H.lip_color = initial(H.lip_color) - H.update_body() - else - user.visible_message("[user] begins to wipe [H]'s face clean with \the [src].", \ - "You begin to wipe off [H]'s face.") - if(do_after(user, 10, target = H) && do_after(H, 10, 0)) //user needs to keep their active hand, H does not. - user.visible_message("[user] wipes [H]'s face clean with \the [src].", \ - "You wipe off [H]'s face.") - H.lip_style = null - H.lip_color = initial(H.lip_color) - H.update_body() + if(target == user) + to_chat(user, "You wipe off your face with [src].") + else + user.visible_message("[user] begins to wipe [target]'s face clean with \the [src].", + "You begin to wipe off [target]'s face.") + if(!do_after(user, 1 SECONDS, target = target) || !do_after(target, 1 SECONDS, FALSE)) // user needs to keep their active hand, target does not. + return + user.visible_message("[user] wipes [target]'s face clean with \the [src].", + "You wipe off [target]'s face.") + + target.lip_style = null + target.lip_color = null + target.update_body() + else + return ..() + + +/obj/item/paper/attack_animal(mob/living/simple_animal/pet/dog/doggo) + if(!isdog(doggo)) // Only dogs can eat homework. + return + doggo.changeNext_move(CLICK_CD_MELEE) + if(world.time < doggo.last_eaten + 30 SECONDS) + to_chat(doggo, "You are too full to try eating [src] now.") + return + + doggo.visible_message("[doggo] starts chewing the corner of [src]!", + "You start chewing the corner of [src].", + "You hear a quiet gnawing, and the sound of paper rustling.") + playsound(src, 'sound/effects/pageturn2.ogg', 100, TRUE) + if(!do_after(doggo, 10 SECONDS, FALSE, src)) + return + + if(world.time < doggo.last_eaten + 30 SECONDS) // Check again to prevent eating multiple papers at once. + to_chat(doggo, "You are too full to try eating [src] now.") + return + doggo.last_eaten = world.time + + // 90% chance of a crumpled paper with illegible text. + if(prob(90)) + var/message_ending = "." + var/obj/item/paper/crumpled/crumped = new(loc) + crumped.name = name + if(info) // Something written on the paper. + crumped.info = "Whatever was once written here has been made completely illegible by a combination of chew marks and saliva." + message_ending = ", the drool making it an unreadable mess!" + crumped.update_icon() + qdel(src) + + doggo.visible_message("[doggo] finishes eating [src][message_ending]", + "You finish eating [src][message_ending]") + doggo.emote("bark") + + // 10% chance of the paper just being eaten entirely. else - ..() + doggo.visible_message("[doggo] swallows [src] whole!", "You swallow [src] whole. Tasty!") + playsound(doggo, 'sound/items/eatfood.ogg', 50, TRUE) + qdel(src) + -/obj/item/paper/proc/addtofield(var/id, var/text, var/links = 0) +/obj/item/paper/proc/addtofield(id, text, links = 0) if(id > MAX_PAPER_FIELDS) return @@ -192,11 +243,11 @@ while(locid <= MAX_PAPER_FIELDS) var/istart = 0 if(links) - istart = findtext(info_links, "", laststart) + istart = findtext_char(info_links, "", laststart) else - istart = findtext(info, "", laststart) + istart = findtext_char(info, "", laststart) - if(istart==0) + if(!istart) return // No field found with matching id laststart = istart+1 @@ -204,59 +255,58 @@ if(locid == id) var/iend = 1 if(links) - iend = findtext(info_links, "", istart) + iend = findtext_char(info_links, "", istart) else - iend = findtext(info, "", istart) + iend = findtext_char(info, "", istart) - //textindex = istart+26 textindex = iend break if(links) - var/before = copytext(info_links, 1, textindex) - var/after = copytext(info_links, textindex) + var/before = copytext_char(info_links, 1, textindex) + var/after = copytext_char(info_links, textindex) info_links = before + text + after else - var/before = copytext(info, 1, textindex) - var/after = copytext(info, textindex) + var/before = copytext_char(info, 1, textindex) + var/after = copytext_char(info, textindex) info = before + text + after updateinfolinks() + /obj/item/paper/proc/updateinfolinks() info_links = info - var/i = 0 - for(i=1,i<=fields,i++) - var/write_1 = "write" - var/write_2 = "\[A\]" + for(var/i in 1 to fields) + var/write_1 = "write" + var/write_2 = "\[a\]" addtofield(i, "[write_1][write_2]", 1) - info_links = info_links + "write" + info_links = info_links + "write" + "\[A\]" /obj/item/paper/proc/clearpaper() info = null stamps = null stamped = list() - overlays.Cut() + stamp_overlays = list() updateinfolinks() update_icon() -/obj/item/paper/proc/parsepencode(var/t, var/obj/item/pen/P, mob/user as mob) +/obj/item/paper/proc/parsepencode(t, obj/item/pen/P, mob/user as mob) t = pencode_to_html(html_encode(t), usr, P, TRUE, TRUE, TRUE, deffont, signfont, crayonfont) return t /obj/item/paper/proc/populatefields() - //Count the fields + //Count the fields var/laststart = 1 while(fields < MAX_PAPER_FIELDS) - var/i = findtext(info, "", laststart) - if(i==0) + var/i = findtext_char(info, "", laststart) + if(!i) break laststart = i+1 fields++ -/obj/item/paper/proc/openhelp(mob/user as mob) +/obj/item/paper/proc/openhelp(mob/user) user << browse({"Pen Help
    Crayon&Pen commands

    @@ -281,33 +331,29 @@ \[time\] : Inserts the current station time in HH:MM:SS.
    "}, "window=paper_help") -/obj/item/paper/proc/topic_href_write(var/id, var/input_element) + +/obj/item/paper/proc/topic_href_write(id, input_element) var/obj/item/item_write = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen. add_hiddenprint(usr) // No more forging nasty documents as someone else, you jerks - if(!istype(item_write, /obj/item/pen)) - if(!istype(item_write, /obj/item/toy/crayon)) - return - - // if paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr - if(src.loc != usr && !src.Adjacent(usr) && !((istype(src.loc, /obj/item/clipboard) || istype(src.loc, /obj/item/folder)) && (src.loc.loc == usr || src.loc.Adjacent(usr)) ) ) + if(!is_pen(item_write) && !istype(item_write, /obj/item/toy/crayon)) return + if(loc != usr && !Adjacent(usr) && !((istype(loc, /obj/item/clipboard) || istype(loc, /obj/item/folder)) && (loc.loc == usr || loc.Adjacent(usr)))) + return // If paper is not in usr, then it must be near them, or in a clipboard or folder, which must be in or near usr input_element = parsepencode(input_element, item_write, usr) // Encode everything from pencode to html - if(id!="end") + if(id != "end") addtofield(text2num(id), input_element) // He wants to edit a field, let him. else info += input_element // Oh, he wants to edit to the end of the file, let him. populatefields() updateinfolinks() - - item_write.on_write(src,usr) - - show_content(usr, forceshow = 1, infolinks = 1) - + item_write.on_write(src, usr) + show_content(usr, forceshow = TRUE, infolinks = TRUE) update_icon() + /obj/item/paper/Topic(href, href_list) ..() if(!usr || (usr.stat || usr.restrained())) @@ -317,51 +363,66 @@ var/id = href_list["auto_write"] var/const/sign_text = "\[Поставить подпись\]" + var/const/account_text = "\[Написать номер аккаунта\]" + var/const/pin_text = "\[Написать пин-код\]" var/const/time_text = "\[Написать текущее время\]" var/const/date_text = "\[Написать текущую дату\]" - var/const/num_text = "\[Написать номер аккаунта\]" - var/const/pin_text = "\[Написать пин-код\]" var/const/station_text = "\[Написать название станции\]" + var/const/gender_text = "\[Указать пол\]" + var/const/species_text = "\[Указать расу\]" + + var/list/menu_list = list() // text items in the menu + + menu_list.Add(usr.real_name) // the real name of the character, even if it is hidden - //пункты текста в меню - var/list/menu_list = list() - menu_list.Add(usr.real_name) //настоящее имя персонажа, даже если оно спрятано - - //если игрок маскируется или имя отличается, добавляется новый вариант ответа - if (usr.real_name != usr.name || usr.name != "unknown") - menu_list.Add("[usr.name]") - - menu_list.Add(usr.job, //текущая работа - num_text, //номер аккаунта - pin_text, //номер пин-кода - sign_text, //подпись - time_text, //время - date_text, //дата - station_text, //название станции - usr.gender, //пол - usr.dna.species //раса + if(usr.real_name != usr.name && lowertext(usr.name) != "unknown") // if the player is masked or the name is different a new answer option is added + menu_list.Add(usr.name) + + if(usr.job) + menu_list.Add(usr.job) // job + + menu_list.Add(sign_text) //signature + + if(usr.mind?.initial_account?.account_number) + menu_list.Add(account_text) // account number + + if(usr.mind?.initial_account?.remote_access_pin) + menu_list.Add(pin_text) // account pin-code + + menu_list.Add( + time_text, // time + date_text, // date + station_text, // station name + gender_text, // gender ) + if(usr.dna?.species) + menu_list.Add(species_text) //current + var/input_element = input("Выберите текст который хотите добавить:", "Выбор пункта") as null|anything in menu_list + if(!input_element) + return - //форматируем выбранные пункты меню в pencode и внутренние данные - switch(input_element) - if (sign_text) + switch(input_element) //format selected menu items in pencode and internal data + if(sign_text) input_element = "\[sign\]" - if (time_text) + if(time_text) input_element = "\[time\]" - if (date_text) + if(date_text) input_element = "\[date\]" - if (station_text) + if(station_text) input_element = "\[station\]" - if (num_text) + if(account_text) input_element = usr.mind.initial_account.account_number - if (pin_text) + if(pin_text) input_element = usr.mind.initial_account.remote_access_pin + if(gender_text) + input_element = usr.gender + if(species_text) + input_element = usr.dna.species topic_href_write(id, input_element) - if(href_list["write"] ) var/id = href_list["write"] var/input_element = input("Enter what you want to write:", "Write", null, null) as message @@ -370,14 +431,12 @@ /obj/item/paper/attackby(obj/item/P, mob/living/user, params) - ..() + . = ..() if(resistance_flags & ON_FIRE) return - var/clown = 0 - if(user.mind && (user.mind.assigned_role == "Clown")) - clown = 1 + var/clown = user.mind && (user.mind.assigned_role == "Clown") if(istype(P, /obj/item/paper) || istype(P, /obj/item/photo)) if(istype(P, /obj/item/paper/carbon)) @@ -426,9 +485,9 @@ src.loc = B P.loc = B B.amount++ - B.update_icon() + B.update_appearance(UPDATE_ICON|UPDATE_DESC) - else if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) + else if(is_pen(P) || istype(P, /obj/item/toy/crayon)) if(user.is_literate()) var/obj/item/pen/multi/robopen/RP = P if(istype(P, /obj/item/pen/multi/robopen) && RP.mode == 2) @@ -452,6 +511,7 @@ stamp(P) to_chat(user, "You stamp the paper with your rubber stamp.") + playsound(user, 'sound/items/handling/standard_stamp.ogg', 50, vary = TRUE) if(is_hot(P)) if((CLUMSY in user.mutations) && prob(10)) @@ -471,12 +531,14 @@ add_fingerprint(user) + /obj/item/paper/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) ..() if(!(resistance_flags & FIRE_PROOF)) info = "Heat-curled corners and sooty words offer little insight. Whatever was once written on this page has been rendered illegible through fire." -/obj/item/paper/proc/stamp(var/obj/item/stamp/S) + +/obj/item/paper/proc/stamp(obj/item/stamp/S) stamps += (!stamps || stamps == "" ? "
    " : "") + "" var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') @@ -501,9 +563,13 @@ if(!stamped) stamped = new stamped += S.type - overlays += stampoverlay + stamp_overlays += stampoverlay + update_icon(UPDATE_OVERLAYS) + + +/obj/item/paper/update_overlays() + return stamp_overlays - playsound(S, pick(S.stamp_sounds), 35, 1, -1) /* * Premade paper @@ -550,8 +616,10 @@ name = "paper scrap" icon_state = "scrap" -/obj/item/paper/crumpled/update_icon() - return + +/obj/item/paper/crumpled/update_icon_state() + if(info) + icon_state = "scrap_words" /obj/item/paper/crumpled/bloody icon_state = "scrap_bloodied" @@ -567,9 +635,10 @@ info = "

    [fortunemessage]

    " info += "

    Lucky numbers: [rand(1,49)], [rand(1,49)], [rand(1,49)], [rand(1,49)], [rand(1,49)]

    " -/obj/item/paper/fortune/update_icon() - ..() + +/obj/item/paper/fortune/update_icon_state() icon_state = initial(icon_state) + /* * Premade paper */ @@ -659,10 +728,6 @@ name = "paper- 'Note'" info = "The call has gone out! Our ancestral home has been rediscovered! Not a small patch of land, but a true clown nation, a true Clown Planet! We're on our way home at last!" -/obj/item/paper/crumpled - name = "paper scrap" - icon_state = "scrap" - /obj/item/paper/syndicate name = "paper" header = "


    " @@ -749,25 +814,21 @@ info = "ᅠᅠАгенство внутренних дел по надзору за домашними животными находящимися на станции сообщает, приставленный к вам питомец \"Гав Гавыч\" почил. Он верно служил ремеслу дознавателей, сыщиков и детективов. Мы будем помнить о его вкладе и сохраним о нём память в анналах истории о домашних питомцах Нанотрейзен.

    " footer = "
    Штампы и данные:

    Время принятия отчета:

    *Данный документ подлежит ксерокопированию, для сохранения в архиве уполномоченных лиц, и выдаче агенту.
    *Данный документ может содержать личную информацию.
    " -/obj/item/paper/crumpled/update_icon() - return - -/obj/item/paper/crumpled/bloody - icon_state = "scrap_bloodied" /obj/item/paper/evilfax name = "Centcomm Reply" info = "" var/mytarget = null var/myeffect = null - var/used = 0 + var/used = FALSE var/countdown = 60 - var/activate_on_timeout = 0 + var/activate_on_timeout = FALSE var/faxmachineid = null -/obj/item/paper/evilfax/show_content(var/mob/user, var/forceshow = 0, var/forcestars = 0, var/infolinks = 0, var/view = 1) + +/obj/item/paper/evilfax/show_content(mob/user, forceshow = FALSE, forcestars = FALSE, infolinks, view = TRUE) if(user == mytarget) - if(istype(user, /mob/living/carbon)) + if(iscarbon(user)) var/mob/living/carbon/C = user evilpaper_specialaction(C) ..() @@ -799,81 +860,85 @@ if(!countdown) if(mytarget) if(activate_on_timeout) - evilpaper_specialaction(mytarget) + addtimer(CALLBACK(src, PROC_REF(evilpaper_specialaction), mytarget), 3 SECONDS, TIMER_DELETE_ME) else message_admins("[mytarget] ignored an evil fax until it timed out.") else message_admins("Evil paper '[src]' timed out, after not being assigned a target.") - used = 1 + used = TRUE evilpaper_selfdestruct() else countdown-- -/obj/item/paper/evilfax/proc/evilpaper_specialaction(var/mob/living/carbon/target) - spawn(30) - if(istype(target, /mob/living/carbon)) - var/obj/machinery/photocopier/faxmachine/fax = locateUID(faxmachineid) - if(myeffect == "Borgification") - to_chat(target,"You seem to comprehend the AI a little better. Why are your muscles so stiff?") - var/datum/disease/virus/transformation/robot/D = new - D.Contract(target) - else if(myeffect == "Corgification") - to_chat(target,"You hear distant howling as the world seems to grow bigger around you. Boy, that itch sure is getting worse!") - var/datum/disease/virus/transformation/corgi/D = new - D.Contract(target) - else if(myeffect == "Death By Fire") - to_chat(target,"You feel hotter than usual. Maybe you should lowe-wait, is that your hand melting?") - var/turf/simulated/T = get_turf(target) - new /obj/effect/hotspot(T) - target.adjustFireLoss(150) // hard crit, the burning takes care of the rest. - else if(myeffect == "Total Brain Death") - to_chat(target,"You see a message appear in front of you in bright red letters: YHWH-3 ACTIVATED. TERMINATION IN 3 SECONDS") - target.mutations.Add(NOCLONE) - target.adjustBrainLoss(125) - else if(myeffect == "Honk Tumor") - if(!target.get_int_organ(/obj/item/organ/internal/honktumor)) - var/obj/item/organ/internal/organ = new /obj/item/organ/internal/honktumor - to_chat(target,"Life seems funnier, somehow.") - organ.insert(target) - else if(myeffect == "Cluwne") - if(istype(target, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = target - to_chat(H, "You feel surrounded by sadness. Sadness... and HONKS!") - H.makeCluwne() - else if(myeffect == "Demote") - GLOB.event_announcement.Announce("[target.real_name] настоящим приказом был понижен до Гражданского. Немедленно обработайте этот запрос. Невыполнение этих распоряжений является основанием для расторжения контракта.","ВНИМАНИЕ: Приказ ЦК о понижении в должности.") - for(var/datum/data/record/R in sortRecord(GLOB.data_core.security)) - if(R.fields["name"] == target.real_name) - R.fields["criminal"] = SEC_RECORD_STATUS_DEMOTE - R.fields["comments"] += "Central Command Demotion Order, given on [GLOB.current_date_string] [station_time_timestamp()]
    Process this demotion immediately. Failure to comply with these orders is grounds for termination." - update_all_mob_security_hud() - else if(myeffect == "Demote with Bot") - GLOB.event_announcement.Announce("[target.real_name] настоящим приказом был понижен до Гражданского. Немедленно обработайте этот запрос. Невыполнение этих распоряжений является основанием для расторжения контракта.","ВНИМАНИЕ: Приказ ЦК о понижении в должности.") - for(var/datum/data/record/R in sortRecord(GLOB.data_core.security)) - if(R.fields["name"] == target.real_name) - R.fields["criminal"] = SEC_RECORD_STATUS_ARREST - R.fields["comments"] += "Central Command Demotion Order, given on [GLOB.current_date_string] [station_time_timestamp()]
    Process this demotion immediately. Failure to comply with these orders is grounds for termination." - update_all_mob_security_hud() - if(fax) - var/turf/T = get_turf(fax) - new /obj/effect/portal(T) - new /mob/living/simple_animal/bot/secbot(T) - else if(myeffect == "Revoke Fax Access") - GLOB.fax_blacklist += target.real_name - if(fax) - fax.authenticated = 0 - else if(myeffect == "Angry Fax Machine") - if(fax) - fax.become_mimic() - else - message_admins("Evil paper [src] was activated without a proper effect set! This is a bug.") - used = 1 - evilpaper_selfdestruct() + +/obj/item/paper/evilfax/proc/evilpaper_specialaction(mob/living/carbon/target) + if(!iscarbon(target)) + return + + var/obj/machinery/photocopier/faxmachine/fax = locateUID(faxmachineid) + if(myeffect == "Borgification") + to_chat(target,"You seem to comprehend the AI a little better. Why are your muscles so stiff?") + var/datum/disease/virus/transformation/robot/D = new + D.Contract(target) + else if(myeffect == "Corgification") + to_chat(target,"You hear distant howling as the world seems to grow bigger around you. Boy, that itch sure is getting worse!") + var/datum/disease/virus/transformation/corgi/D = new + D.Contract(target) + else if(myeffect == "Death By Fire") + to_chat(target,"You feel hotter than usual. Maybe you should lowe-wait, is that your hand melting?") + var/turf/simulated/T = get_turf(target) + new /obj/effect/hotspot(T) + target.adjustFireLoss(150) // hard crit, the burning takes care of the rest. + else if(myeffect == "Total Brain Death") + to_chat(target,"You see a message appear in front of you in bright red letters: YHWH-3 ACTIVATED. TERMINATION IN 3 SECONDS") + target.mutations.Add(NOCLONE) + target.adjustBrainLoss(125) + else if(myeffect == "Honk Tumor") + if(!target.get_int_organ(/obj/item/organ/internal/honktumor)) + new /obj/item/organ/internal/honktumor(target) + to_chat(target,"Life seems funnier, somehow.") + else if(myeffect == "Cluwne") + if(ishuman(target)) + var/mob/living/carbon/human/H = target + to_chat(H, "You feel surrounded by sadness. Sadness... and HONKS!") + H.makeCluwne() + else if(myeffect == "Demote") + GLOB.event_announcement.Announce("[target.real_name] настоящим приказом был понижен до Гражданского. Немедленно обработайте этот запрос. Невыполнение этих распоряжений является основанием для расторжения контракта.","ВНИМАНИЕ: Приказ ЦК о понижении в должности.") + for(var/datum/data/record/R in sortRecord(GLOB.data_core.security)) + if(R.fields["name"] == target.real_name) + R.fields["criminal"] = SEC_RECORD_STATUS_DEMOTE + R.fields["comments"] += "Central Command Demotion Order, given on [GLOB.current_date_string] [station_time_timestamp()]
    Process this demotion immediately. Failure to comply with these orders is grounds for termination." + update_all_mob_security_hud() + else if(myeffect == "Demote with Bot") + GLOB.event_announcement.Announce("[target.real_name] настоящим приказом был понижен до Гражданского. Немедленно обработайте этот запрос. Невыполнение этих распоряжений является основанием для расторжения контракта.","ВНИМАНИЕ: Приказ ЦК о понижении в должности.") + for(var/datum/data/record/R in sortRecord(GLOB.data_core.security)) + if(R.fields["name"] == target.real_name) + R.fields["criminal"] = SEC_RECORD_STATUS_ARREST + R.fields["comments"] += "Central Command Demotion Order, given on [GLOB.current_date_string] [station_time_timestamp()]
    Process this demotion immediately. Failure to comply with these orders is grounds for termination." + update_all_mob_security_hud() + if(fax) + var/turf/T = get_turf(fax) + new /obj/effect/portal(T) + new /mob/living/simple_animal/bot/secbot(T) + else if(myeffect == "Revoke Fax Access") + GLOB.fax_blacklist += target.real_name + if(fax) + fax.authenticated = FALSE + else if(myeffect == "Angry Fax Machine") + if(fax) + fax.become_mimic() + else + message_admins("Evil paper [src] was activated without a proper effect set! This is a bug.") + + used = TRUE + evilpaper_selfdestruct() + /obj/item/paper/evilfax/proc/evilpaper_selfdestruct() visible_message("[src] spontaneously catches fire, and burns up!") qdel(src) + /obj/item/paper/pickup(user) if(contact_poison && ishuman(user)) var/mob/living/carbon/human/H = user @@ -1599,20 +1664,20 @@ могут быть использованы для строительства новых отсеков.\


    Особенности станции

    \
    В отличие от большинства других научно-исследовательских станций Nanotrasen, \ - таких как "Кибериада", НСС "Керборос" имеет менее \ + таких как "Кибериада", НСС "Керберос" имеет менее \ жёсткую систему контроля за личными вещами экипажа. В частности, в отсеках \ были построены дополнительные автолаты, в том числе публичные \ (в карго и РНД). Также, благодаря более высокому бюджету, были возведены \ новые отсеки, такие как ангар или склад в отсеке РнД.\ - Был расширен отдел вирусологии и возведены новые техничесские туннели для \ + Был расширен отдел вирусологии и возведены новые технические туннели для \ новых проектов." icon_state = "pamphlet" -/obj/item/paper/deltainfo/update_icon() +/obj/item/paper/deltainfo/update_icon_state() return /obj/item/paper/pamphletdeathsquad icon_state = "pamphlet-ds" -/obj/item/paper/pamphletdeathsquad/update_icon() +/obj/item/paper/pamphletdeathsquad/update_icon_state() return diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 1f9fe272072..c314d388910 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -14,7 +14,8 @@ attack_verb = list("bapped") drop_sound = 'sound/items/handling/paper_drop.ogg' pickup_sound = 'sound/items/handling/paper_pickup.ogg' - var/amount = 0 //Amount of items clipped to the paper. Note: If you have 2 paper, this should be 1 + var/amount = 0 //Amount of total items clipped to the paper. Note: If you have 2 paper, this should be 1 + var/photos = 0 //Amount of photos clipped to the paper. var/page = 1 var/screen = 0 @@ -50,6 +51,7 @@ H.update_inv_r_hand() else if(istype(W, /obj/item/photo)) amount++ + photos++ if(screen == 2) screen = 1 to_chat(user, "You add [(W.name == "photo") ? "the photo" : W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].") @@ -91,7 +93,7 @@ P.attackby(W, user, params) - update_icon() + update_appearance(UPDATE_ICON|UPDATE_DESC) if(winget(usr, "PaperBundle[UID()]", "is-visible") == "true") // NOT MY FAULT IT IS A BUILT IN PROC PLEASE DO NOT HIT ME attack_self(usr) //Update the browsed page. add_fingerprint(usr) @@ -171,11 +173,11 @@ + "[P.scribble ? "

    Written on the back:
    [P.scribble]" : ""]"\ + "", "window=PaperBundle[UID()]") -/obj/item/paper_bundle/attack_self(mob/user as mob) - src.show_content(user) +/obj/item/paper_bundle/attack_self(mob/user) + show_content(user) add_fingerprint(user) - update_icon() - return + update_appearance(UPDATE_ICON|UPDATE_DESC) + /obj/item/paper_bundle/Topic(href, href_list) ..() @@ -216,7 +218,7 @@ page-- amount-- - update_icon() + update_appearance(UPDATE_ICON|UPDATE_DESC) else to_chat(usr, "You need to hold it in your hands to change pages.") if(istype(src.loc, /mob)) @@ -253,35 +255,53 @@ return -/obj/item/paper_bundle/update_icon() - ..() - if(contents.len) - var/obj/item/paper/P = src[1] - icon_state = P.icon_state - overlays = P.overlays - underlays = 0 - var/i = 0 - var/photo +/obj/item/paper_bundle/update_desc(updates = ALL) + . = ..() + if(amount == (photos - 1)) + desc = "[photos] photos clipped together." // In case you clip 2 photos together and remove the paper + return + + else if(((amount + 1) - photos) >= 2) // extra papers + original paper - photos + desc = "[(amount + 1) - photos] papers clipped to each other." + + else + desc = "A single sheet of paper." + if(photos) + desc += "\nThere [photos == 1 ? "is a photo" : "are [photos] photos"] attached to it." + + +/obj/item/paper_bundle/update_icon_state() + if(length(contents)) + var/obj/item/paper/P = contents[1] + icon_state = P.icon_state // must have an icon_state to show up on clipboards + + +/obj/item/paper_bundle/update_overlays() + . = ..() + underlays.Cut() + if(length(contents)) + var/obj/item/paper/P = contents[1] + . += P.overlays + + var/counter = 0 for(var/obj/O in src) - var/image/img = image('icons/obj/bureaucracy.dmi') + var/image/sheet = image('icons/obj/bureaucracy.dmi') if(istype(O, /obj/item/paper)) - img.icon_state = O.icon_state - img.pixel_x -= min(1*i, 2) - img.pixel_y -= min(1*i, 2) - pixel_x = min(0.5*i, 1) - pixel_y = min( 1*i, 2) - underlays += img - i++ + if(length(underlays) == 3) + continue + + sheet.icon_state = O.icon_state + sheet.pixel_x -= min(1 * counter, 2) + sheet.pixel_y -= min(1 * counter, 2) + pixel_x = min(0.5 * counter, 1) + pixel_y = min(1 * counter, 2) + underlays += sheet + counter++ + else if(istype(O, /obj/item/photo)) - var/obj/item/photo/Ph = O - img = Ph.tiny - photo = 1 - overlays += img - if(i>1) - desc = "[i] papers clipped to each other." - else - desc = "A single sheet of paper." - if(photo) - desc += "\nThere is a photo attached to it." - overlays += image('icons/obj/bureaucracy.dmi', "clip") - return + var/obj/item/photo/picture = O + sheet = picture.tiny + . += sheet + + . += "clip" + diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 2f2072a8eb7..dcb8c658c85 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -11,11 +11,12 @@ var/amount = 30 //How much paper is in the bin. var/list/papers = list() //List of papers put in the bin for reference. var/letterhead_type + var/purple_bin = FALSE /obj/item/paper_bin/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) if(amount) amount = 0 - update_icon() + update_icon(UPDATE_ICON_STATE) ..() /obj/item/paper_bin/Destroy() @@ -25,16 +26,16 @@ /obj/item/paper_bin/burn() amount = 0 extinguish() - update_icon() + update_icon(UPDATE_ICON_STATE) -/obj/item/paper_bin/MouseDrop(atom/over) +/obj/item/paper_bin/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() if(!.) return FALSE var/mob/user = usr - if(over != user || user.incapacitated() || !ishuman(user)) + if(over_object != user || user.incapacitated() || !ishuman(user)) return FALSE if(user.put_in_hands(src, ignore_anim = FALSE)) @@ -45,7 +46,7 @@ return FALSE -/obj/item/paper_bin/attack_hand(mob/user as mob) +/obj/item/paper_bin/attack_hand(mob/user) if(ishuman(user)) var/mob/living/carbon/human/H = user var/obj/item/organ/external/temp = H.bodyparts_by_name[BODY_ZONE_PRECISE_R_HAND] @@ -57,7 +58,7 @@ if(amount >= 1) amount-- if(amount==0) - update_icon() + update_icon(UPDATE_ICON_STATE) var/obj/item/paper/P if(papers.len > 0) //If there's any custom paper on the stack, use that instead of creating a new paper. @@ -102,22 +103,24 @@ else . += "There are no papers in the bin." -/obj/item/paper_bin/update_icon() + +/obj/item/paper_bin/update_icon_state() if(amount < 1) icon_state = "paper_bin0" else - icon_state = "paper_bin1" - ..() + icon_state = "paper_bin[purple_bin ? "2" : "1"]" + /obj/item/paper_bin/carbon name = "carbonless paper bin" icon_state = "paper_bin2" + purple_bin = TRUE -/obj/item/paper_bin/carbon/attack_hand(mob/user as mob) +/obj/item/paper_bin/carbon/attack_hand(mob/user) if(amount >= 1) amount-- if(amount==0) - update_icon() + update_icon(UPDATE_ICON_STATE) var/obj/item/paper/carbon/P if(papers.len > 0) //If there's any custom paper on the stack, use that instead of creating a new paper. diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 58c38eb63bc..32b7201a523 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -14,6 +14,7 @@ var/obj/item/paper/internal_paper + /obj/item/paperplane/New(loc, obj/item/paper/new_paper) ..() pixel_y = rand(-8, 8) @@ -25,12 +26,14 @@ new_paper.forceMove(src) else internal_paper = new /obj/item/paper(src) - update_icon() + update_icon(UPDATE_OVERLAYS) + /obj/item/paperplane/Destroy() QDEL_NULL(internal_paper) return ..() + /obj/item/paperplane/suicide_act(mob/living/user) user.Stun(20 SECONDS) user.visible_message("[user] jams [name] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!") @@ -41,16 +44,17 @@ sleep(10) return BRUTELOSS -/obj/item/paperplane/update_icon() - overlays.Cut() + +/obj/item/paperplane/update_overlays() + . = ..() var/list/stamped = internal_paper.stamped if(!stamped) stamped = new else if(stamped) for(var/S in stamped) var/obj/item/stamp = S - var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]") - overlays += stampoverlay + . += "paperplane_[initial(stamp.icon_state)]" + /obj/item/paperplane/attack_self(mob/user) // Unfold the paper plane to_chat(user, "You unfold [src].") @@ -60,16 +64,17 @@ internal_paper = null qdel(src) + /obj/item/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params) ..() - if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) + if(is_pen(P) || istype(P, /obj/item/toy/crayon)) to_chat(user, "You should unfold [src] before changing it.") return else if(istype(P, /obj/item/stamp)) //we don't randomize stamps on a paperplane internal_paper.attackby(P, user) //spoofed attack to update internal paper. - update_icon() + update_icon(UPDATE_OVERLAYS) else if(is_hot(P)) if((CLUMSY in user.mutations) && prob(10)) @@ -88,6 +93,7 @@ add_fingerprint(user) + /obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(..()) return @@ -109,20 +115,15 @@ E.take_damage(8, 1) H.emote("scream") -/obj/item/paper/AltClick(mob/user, obj/item/I) + +/obj/item/paper/proc/ProcFoldPlane(mob/living/carbon/user, obj/item/paper) if(ishuman(user)) - var/mob/living/carbon/human/H = user - I = H.is_type_in_hands(/obj/item/paper) - if(I) - ProcFoldPlane(H, I) - -/obj/item/paper/proc/ProcFoldPlane(mob/living/carbon/user, obj/item/I) - if(istype(user)) - if((!in_range(src, user)) || user.stat || user.restrained()) + if(!Adjacent(user) || user.incapacitated()) return to_chat(user, "You fold [src] into the shape of a plane!") user.drop_item_ground(src) - I = new /obj/item/paperplane(user, src) - user.put_in_hands(I) + paper = new /obj/item/paperplane(user, src) + user.put_in_hands(paper, ignore_anim = FALSE) else to_chat(user, "You lack the dexterity to fold [src].") + diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 6c6658a0607..6e2a6472851 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -67,26 +67,28 @@ /obj/item/pen/multi/Initialize(mapload) ..() - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/pen/multi/proc/select_colour(mob/user as mob) +/obj/item/pen/multi/proc/select_colour(mob/user) var/newcolour = tgui_input_list(user, "Which colour would you like to use?", name, colour_choices, colour) if(newcolour) colour = newcolour playsound(loc, 'sound/effects/pop.ogg', 50, 1) - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/pen/multi/attack_self(mob/living/user as mob) +/obj/item/pen/multi/attack_self(mob/living/user) select_colour(user) -/obj/item/pen/multi/update_icon() - overlays.Cut() - var/icon/o = new(icon, pen_color_iconstate) - var/list/c = colour_choices[colour] - o.SetIntensity(c[1], c[2], c[3]) + +/obj/item/pen/multi/update_overlays() + . = ..() + var/icon/color_overlay = new(icon, pen_color_iconstate) + var/list/colors = colour_choices[colour] + color_overlay.SetIntensity(colors[1], colors[2], colors[3]) if(pen_color_shift) - o.Shift(SOUTH, pen_color_shift) - overlays += o + color_overlay.Shift(SOUTH, pen_color_shift) + . += color_overlay + /obj/item/pen/fancy name = "fancy pen" @@ -197,28 +199,24 @@ playsound(user, 'sound/weapons/saberon.ogg', 3, 1) to_chat(user, "[src] is now active.") set_light(brightness_on, 1) - update_icon() + update_icon(UPDATE_ICON_STATE) + + +/obj/item/pen/edagger/update_icon_state() + icon_state = on ? "edagger" : initial(icon_state) //looks like a normal pen when off. + item_state = on ? "edagger" : initial(item_state) -/obj/item/pen/edagger/update_icon() - if(on) - icon_state = "edagger" - item_state = "edagger" - else - icon_state = initial(icon_state) //looks like a normal pen when off. - item_state = initial(item_state) /obj/item/pen/edagger/comms icon_state = "ofcommpen" item_state = "ofcommpen" light_color = LIGHT_COLOR_BLUE -/obj/item/pen/edagger/comms/update_icon() - if(on) - icon_state = "ofcommpen_active" - item_state = "ofcommpen_active" - else - icon_state = initial(icon_state) //looks like a normal pen when off. - item_state = initial(item_state) + +/obj/item/pen/edagger/comms/update_icon_state() + icon_state = on ? "ofcommpen_active" : initial(icon_state) + item_state = on ? "ofcommpen_active" : initial(item_state) + /obj/item/proc/on_write(obj/item/paper/P, mob/user) return diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 4764c3ad36f..34fcaac2439 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -302,7 +302,7 @@ c.language = copy.language c.offset_x = copy.offset_x c.offset_y = copy.offset_y - var/list/temp_overlays = copy.overlays //Iterates through stamps + var/list/temp_overlays = copy.stamp_overlays //Iterates through stamps var/image/img //and puts a matching for(var/j = 1, j <= temp_overlays.len, j++) //gray overlay onto the copy if(copy.ico.len) @@ -316,7 +316,7 @@ img = image('icons/obj/bureaucracy.dmi', "paper_stamp-dots") img.pixel_x = copy.offset_x[j] img.pixel_y = copy.offset_y[j] - c.overlays += img + c.stamp_overlays += img c.updateinfolinks() toner-- if(toner == 0) @@ -393,7 +393,7 @@ return p //If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner -/obj/machinery/photocopier/proc/bundlecopy(var/obj/item/paper_bundle/bundle, var/need_toner=1) +/obj/machinery/photocopier/proc/bundlecopy(obj/item/paper_bundle/bundle, need_toner = TRUE) var/obj/item/paper_bundle/P = new /obj/item/paper_bundle (src, default_papers = FALSE) for(var/obj/item/W in bundle) if(toner <= 0 && need_toner) @@ -412,8 +412,7 @@ return null P.amount-- P.forceMove(get_turf(src)) - P.update_icon() - P.icon_state = "paper_words" + P.update_appearance(UPDATE_ICON|UPDATE_DESC) P.name = bundle.name P.pixel_y = rand(-8, 8) P.pixel_x = rand(-9, 9) @@ -425,7 +424,7 @@ new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) toner = 0 -/obj/machinery/photocopier/MouseDrop_T(mob/target, mob/living/user) +/obj/machinery/photocopier/MouseDrop_T(mob/target, mob/living/user, params) check_ass() //Just to make sure that you can re-drag somebody onto it after they moved off. if(!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai) || target == ass) return @@ -442,6 +441,7 @@ copyitem.forceMove(get_turf(src)) visible_message("[copyitem] is shoved out of the way by [ass]!") copyitem = null + return TRUE /obj/machinery/photocopier/proc/check_ass() //I'm not sure wether I made this proc because it's good form or because of the name. if(!ass) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index e96f38ebc59..860c50d3119 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -37,10 +37,10 @@ var/photo_size = 3 var/log_text = "" //Used for sending to Discord and just logging -/obj/item/photo/attack_self(mob/user as mob) +/obj/item/photo/attack_self(mob/user) user.examinate(src) -/obj/item/photo/attackby(obj/item/P as obj, mob/user as mob, params) +/obj/item/photo/attackby(obj/item/P, mob/user, params) if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) var/txt = sanitize(input(user, "What would you like to write on the back?", "Photo Writing", null) as text) txt = copytext(txt, 1, 128) @@ -81,7 +81,7 @@ else . += "It is too far away." -/obj/item/photo/proc/show(mob/user as mob) +/obj/item/photo/proc/show(mob/user) var/icon/img_shown = new/icon(img) var/colormatrix = user.get_screen_colour() // Apply colorblindness effects, if any. @@ -127,26 +127,6 @@ pickup_sound = 'sound/items/handling/book_pickup.ogg' -/obj/item/storage/photo_album/MouseDrop(atom/over) - . = ..() - if(!.) - return FALSE - - var/mob/user = usr - if(user.incapacitated() || !ishuman(user)) - return FALSE - - if(over == user) - playsound(loc, "rustle", 50, TRUE, -5) - user.put_in_hands(src, ignore_anim = FALSE) - if(user.s_active) - user.s_active.close(user) - show_to(user) - return TRUE - - return FALSE - - /********* * camera * *********/ @@ -194,19 +174,19 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor size = nsize to_chat(usr, "Camera will now take [size]x[size] photos.") -/obj/item/camera/attack(mob/living/carbon/human/M as mob, mob/user as mob) +/obj/item/camera/attack(mob/living/carbon/human/M, mob/user) return -/obj/item/camera/attack_self(mob/user as mob) +/obj/item/camera/attack_self(mob/user) on = !on - if(on) - src.icon_state = icon_on - else - src.icon_state = icon_off + update_icon(UPDATE_ICON_STATE) to_chat(user, "You switch the camera [on ? "on" : "off"].") return -/obj/item/camera/attackby(obj/item/I as obj, mob/user as mob, params) +/obj/item/camera/update_icon_state() + icon_state = on ? icon_on : icon_off + +/obj/item/camera/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/camera_film)) if(pictures_left) to_chat(user, "[src] still has some film in it!") @@ -354,15 +334,19 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor pictures_left-- desc = "A polaroid camera. It has [pictures_left] photos left." to_chat(user, "[pictures_left] photos left.") - icon_state = icon_off on = FALSE + update_icon(UPDATE_ICON_STATE) if(istype(src,/obj/item/camera/spooky)) if(user.mind && user.mind.assigned_role == "Chaplain" && see_ghosts) if(prob(24)) handle_haunt(user) - spawn(64) - icon_state = icon_on - on = TRUE + addtimer(CALLBACK(src, PROC_REF(delayed_turn_on)), 6.4 SECONDS) + + +/obj/item/camera/proc/delayed_turn_on() + on = TRUE + update_icon(UPDATE_ICON_STATE) + /obj/item/camera/proc/can_capture_turf(turf/T, mob/user) var/viewer = user @@ -467,18 +451,18 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor pictures_left = 30 var/max_storage = 10 -/obj/item/camera/digital/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag) + +/obj/item/camera/digital/afterattack(atom/target, mob/user, flag) if(!on || !pictures_left || ismob(target.loc)) return captureimage(target, user, flag) playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, 1, -3) - desc = "A digital camera. A small screen shows that there are currently [saved_pictures.len] pictures stored." - icon_state = icon_off - on = 0 - spawn(64) - icon_state = icon_on - on = 1 + desc = "A digital camera. A small screen shows that there are currently [length(saved_pictures)] pictures stored." + on = FALSE + update_icon(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/camera, delayed_turn_on)), 6.4 SECONDS) + /obj/item/camera/digital/captureimage(atom/target, mob/user, flag) if(saved_pictures.len >= max_storage) diff --git a/code/modules/pda/PDA.dm b/code/modules/pda/PDA.dm index 096d4aa72c0..4bb5731c089 100755 --- a/code/modules/pda/PDA.dm +++ b/code/modules/pda/PDA.dm @@ -104,7 +104,7 @@ GLOBAL_LIST_EMPTY(PDAs) return id ? id : ..() -/obj/item/pda/MouseDrop(atom/over) +/obj/item/pda/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() var/mob/user = usr diff --git a/code/modules/pda/ai.dm b/code/modules/pda/ai.dm index 9f34fe4b73f..ff76ff3d515 100644 --- a/code/modules/pda/ai.dm +++ b/code/modules/pda/ai.dm @@ -22,7 +22,7 @@ return var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) if(!M) - to_chat(usr, "Cannot use messenger!") + to_chat(usr, span_warning("Cannot use messenger!")) var/list/plist = M.available_pdas() if(plist) var/c = tgui_input_list(usr, "Please select a PDA", "Send message", sortList(plist)) @@ -40,13 +40,11 @@ return var/datum/data/pda/app/messenger/M = find_program(/datum/data/pda/app/messenger) if(!M) - to_chat(usr, "Cannot use messenger!") + to_chat(usr, span_warning("Cannot use messenger!")) var/HTML = {"AI PDA Message Log"} for(var/index in M.tnote) - if(index["sent"]) - HTML += addtext("→ To ", index["owner"],":
    ", index["message"], "
    ") - else - HTML += addtext("← From ", index["owner"],":
    ", index["message"], "
    ") + var/obj/item/pda/target_pda = locateUID(index["target"]) + HTML += "[index["sent"] ? "→ To" : "← From"] [QDELETED(target_pda) ? "Error#1133: Unable to find UserName." : "[target_pda.owner] ([target_pda.ownjob])"]:
    [index["message"]]
    " HTML +="" usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") diff --git a/code/modules/pda/messenger.dm b/code/modules/pda/messenger.dm index 73e3975f597..bb643bf4127 100644 --- a/code/modules/pda/messenger.dm +++ b/code/modules/pda/messenger.dm @@ -28,8 +28,8 @@ data["messages"] = tnote for(var/c in tnote) if(c["target"] == active_conversation) - data["convo_name"] = sanitize(c["owner"]) - data["convo_job"] = sanitize(c["job"]) + var/obj/item/pda/device = locateUID(c["target"]) + data["convo_device"] = QDELETED(device) ? "Error#1133: Unable to find UserName." : "[device.owner] ([device.ownjob])" break else var/list/convopdas = list() @@ -171,8 +171,8 @@ useMS.send_pda_message("[P.owner]","[pda.owner]","[t]") - tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "[P.UID()]"))) - PM.tnote.Add(list(list("sent" = 0, "owner" = "[pda.owner]", "job" = "[pda.ownjob]", "message" = "[t]", "target" = "[pda.UID()]"))) + tnote.Add(list(list("sent" = 1, "message" = "[t]", "target" = "[P.UID()]"))) + PM.tnote.Add(list(list("sent" = 0, "message" = "[t]", "target" = "[pda.UID()]"))) // Show it to ghosts for(var/mob/M in GLOB.dead_mob_list) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 9d5bd2e5f18..9fff1a15de4 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1007,32 +1007,28 @@ var/obj/machinery/light = L INVOKE_ASYNC(light, TYPE_PROC_REF(/obj/machinery/light, update), FALSE) -/obj/machinery/power/apc/proc/can_use(var/mob/user, var/loud = 0) //used by attack_hand() and Topic() +/obj/machinery/power/apc/proc/can_use(mob/user, loud = 0) //used by attack_hand() and Topic() if(stat & BROKEN) return FALSE if(user.can_admin_interact()) return TRUE autoflag = 5 - if(istype(user, /mob/living/silicon)) + if(ispAI(user)) + var/mob/living/silicon/pai/pAI = user + if(!pAI.syndipai || !pAI.ai_capability || pAI.capa_is_cooldown) + return FALSE + else if(issilicon(user)) var/mob/living/silicon/ai/AI = user var/mob/living/silicon/robot/robot = user - if( \ - aidisabled || \ - malfhack && istype(malfai) && \ - ( \ - (istype(AI) && (malfai!=AI && malfai != AI.parent)) || \ - (istype(robot) && (robot in malfai.connected_robots)) \ - ) \ - ) + if(aidisabled || malfhack && istype(malfai) && ((istype(AI) && (malfai!=AI && malfai != AI.parent)) || (istype(robot) && !(robot in malfai.connected_robots)))) if(!loud) to_chat(user, "\The [src] has AI control disabled!") user << browse(null, "window=apc") user.unset_machine() return FALSE - else - if((!in_range(src, user) || !istype(loc, /turf))) - return FALSE + else if(!in_range(src, user) || !isturf(loc)) + return FALSE var/mob/living/carbon/human/H = user if(istype(H)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index d6a3c915ccd..8951d904eb6 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -99,7 +99,7 @@ By design, d1 is the smallest direction and d2 is the highest //If underfloor, hide the cable /obj/structure/cable/hide(i) if(level == 1 && isturf(loc)) - invisibility = i ? INVISIBILITY_ABSTRACT : 0 + invisibility = i ? INVISIBILITY_MAXIMUM : 0 update_icon(UPDATE_ICON_STATE) @@ -602,8 +602,8 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe/cable_restrain current_organ = pick_n_take(childlist) if(!current_organ.burn_dam || !current_organ.is_robotic()) continue - else if(current_organ.parent && !parenthealed) - current_organ = current_organ.parent + else if(target_organ.parent && !parenthealed) + current_organ = target_organ.parent parenthealed = TRUE if(!current_organ.burn_dam || !current_organ.is_robotic()) break diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 43eb5828781..9d21a27c2a7 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -32,7 +32,7 @@ if(ratingdesc) desc += " This one has a power rating of [DisplayPower(maxcharge)], and you should not swallow it." - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/stock_parts/cell/Destroy() STOP_PROCESSING(SSobj, src) @@ -53,16 +53,18 @@ else return PROCESS_KILL -/obj/item/stock_parts/cell/update_icon() - overlays.Cut() + +/obj/item/stock_parts/cell/update_overlays() + . = ..() if(grown_battery) - overlays += image('icons/obj/engines_and_power/power.dmi', "grown_wires") + . += image('icons/obj/engines_and_power/power.dmi', "grown_wires") if(charge < 0.01) return else if(charge/maxcharge >=0.995) - overlays += "cell-o2" + . += "cell-o2" else - overlays += "cell-o1" + . += "cell-o1" + /obj/item/stock_parts/cell/proc/percent() // return % charge of cell return 100 * charge / maxcharge @@ -183,7 +185,7 @@ /obj/item/stock_parts/cell/crap/empty/New() ..() charge = 0 - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/stock_parts/cell/upgraded name = "upgraded power cell" @@ -208,7 +210,7 @@ /obj/item/stock_parts/cell/secborg/empty/New() ..() charge = 0 - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/stock_parts/cell/pulse //265 pulse shots name = "pulse rifle power cell" @@ -249,7 +251,7 @@ /obj/item/stock_parts/cell/high/empty/New() ..() charge = 0 - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/stock_parts/cell/super name = "super-capacity power cell" @@ -263,7 +265,7 @@ /obj/item/stock_parts/cell/super/empty/New() ..() charge = 0 - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/stock_parts/cell/hyper name = "hyper-capacity power cell" @@ -277,7 +279,7 @@ /obj/item/stock_parts/cell/hyper/empty/New() ..() charge = 0 - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/stock_parts/cell/bluespace name = "bluespace power cell" @@ -292,7 +294,7 @@ /obj/item/stock_parts/cell/bluespace/empty/New() ..() charge = 0 - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/stock_parts/cell/infinite name = "infinite-capacity power cell!" @@ -304,7 +306,7 @@ chargerate = 30000 /obj/item/stock_parts/cell/infinite/use() - return 1 + return TRUE /obj/item/stock_parts/cell/infinite/abductor name = "void core" @@ -315,9 +317,9 @@ rating = 12 ratingdesc = FALSE -/obj/item/stock_parts/cell/infinite/abductor/update_icon() - return +/obj/item/stock_parts/cell/infinite/abductor/update_overlays() + return list() /obj/item/stock_parts/cell/potato name = "potato battery" @@ -351,7 +353,7 @@ /obj/item/stock_parts/cell/emproof/empty/New() ..() charge = 0 - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/stock_parts/cell/emproof/emp_act(severity) return diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 86c2d1fba12..d150dd0a82d 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -181,7 +181,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne /obj/machinery/gravity_generator/main/attackby(obj/item/I as obj, mob/user as mob, params) switch(broken_state) if(GRAV_NEEDS_SCREWDRIVER) - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) add_fingerprint(user) to_chat(user, "You secure the screws of the framework.") playsound(src.loc, I.usesound, 50, 1) @@ -202,7 +202,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne to_chat(user, "You need 10 sheets of plasteel.") return if(GRAV_NEEDS_WRENCH) - if(istype(I, /obj/item/wrench)) + if(I.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) to_chat(user, "You secure the plating to the framework.") playsound(src.loc, I.usesound, 75, 1) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 30665b2802a..662481f43a5 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -469,7 +469,7 @@ // attempt to stick weapon into light socket if(status == LIGHT_EMPTY) - if(istype(W, /obj/item/screwdriver)) //If it's a screwdriver open it. + if(W.tool_behaviour == TOOL_SCREWDRIVER) //If it's a screwdriver open it. playsound(loc, W.usesound, W.tool_volume, 1) user.visible_message("[user] opens [src]'s casing.", \ "You open [src]'s casing.", "You hear a screwdriver.") diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 5561a31e8a3..9c8cbbe3eaa 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -287,7 +287,7 @@ SStgui.update_uis(src) return else if(!active) - if(istype(O, /obj/item/wrench)) + if(O.tool_behaviour == TOOL_WRENCH) if(!anchored) connect_to_network() @@ -299,7 +299,7 @@ playsound(src.loc, O.usesound, 50, 1) anchored = !anchored - else if(istype(O, /obj/item/screwdriver)) + else if(O.tool_behaviour == TOOL_SCREWDRIVER) panel_open = !panel_open playsound(src.loc, O.usesound, 50, 1) if(panel_open) @@ -309,7 +309,7 @@ else if(istype(O, /obj/item/storage/part_replacer) && panel_open) exchange_parts(user, O) return - else if(istype(O, /obj/item/crowbar) && panel_open) + else if(O.tool_behaviour == TOOL_CROWBAR && panel_open) default_deconstruction_crowbar(user, O) add_fingerprint(user) else diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index f2b1d6308ac..6d714358df6 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -239,7 +239,7 @@ var/index = 1 var/obj/P = null - worklist+=O //start propagating from the passed object + worklist[O] = TRUE //start propagating from the passed object while(index<=worklist.len) //until we've exhausted all power objects P = worklist[index] //get the next power object found @@ -249,17 +249,19 @@ var/obj/structure/cable/C = P if(C.powernet != PN) //add it to the powernet, if it isn't already there PN.add_cable(C) - worklist |= C.get_connections() //get adjacents power objects, with or without a powernet + //worklist |= C.get_connections() //get adjacents power objects, with or without a powernet + for(var/i in C.get_connections()) + worklist[i] = TRUE else if(P.anchored && istype(P, /obj/machinery/power)) var/obj/machinery/power/M = P - found_machines |= M //we wait until the powernet is fully propagates to connect the machines + found_machines[P] = M //we wait until the powernet is fully propagates to connect the machines else continue //now that the powernet is set, connect found machines to it - for(var/obj/machinery/power/PM in found_machines) + for(var/obj/machinery/power/PM as anything in found_machines) if(!PM.connect_to_network()) //couldn't find a node on its turf... PM.disconnect_from_network() //... so disconnect if already on a powernet diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 1ded07a2a83..bda593ff322 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -54,7 +54,7 @@ GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/multitool)) + if(W.tool_behaviour == TOOL_MULTITOOL) add_fingerprint(user) to_chat(user, "The [W.name] detects that [last_power]W were recently produced.") return 1 @@ -68,13 +68,13 @@ GLOBAL_LIST_EMPTY(rad_collectors) add_fingerprint(user) user.drop_transfer_item_to_loc(W, src) src.P = W - update_icons() - else if(istype(W, /obj/item/crowbar)) + update_icon() + else if(W.tool_behaviour == TOOL_CROWBAR) if(P && !src.locked) add_fingerprint(user) eject() return 1 - else if(istype(W, /obj/item/wrench)) + else if(W.tool_behaviour == TOOL_WRENCH) if(P) to_chat(user, "Remove the plasma tank first.") return 1 @@ -125,7 +125,7 @@ GLOBAL_LIST_EMPTY(rad_collectors) if(active) toggle_power() else - update_icons() + update_icon() /obj/machinery/power/rad_collector/proc/receive_pulse(var/pulse_strength) if(P && active) @@ -134,26 +134,27 @@ GLOBAL_LIST_EMPTY(rad_collectors) add_avail(power_produced) last_power = power_produced return - return -/obj/machinery/power/rad_collector/proc/update_icons() - overlays.Cut() +/obj/machinery/power/rad_collector/update_icon_state() + icon_state = "ca[active ? "_on" : ""]" + + +/obj/machinery/power/rad_collector/update_overlays() + . = ..() if(P) - overlays += image('icons/obj/engines_and_power/singularity.dmi', "ptank") + . += "ptank" if(stat & (NOPOWER|BROKEN)) return if(active) - overlays += image('icons/obj/engines_and_power/singularity.dmi', "on") + . += "on" /obj/machinery/power/rad_collector/proc/toggle_power() active = !active if(active) - icon_state = "ca_on" flick("ca_active", src) else - icon_state = "ca" flick("ca_deactive", src) - update_icons() - return + update_icon() + diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index ad5aa584818..67851b52e98 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -83,7 +83,7 @@ field_generator power level display add_fingerprint(user) to_chat(user, "[src] needs to be off!") return - else if(istype(W, /obj/item/wrench)) + else if(W.tool_behaviour == TOOL_WRENCH) switch(state) if(FG_UNSECURED) if(isinspace()) diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm index f2fbe3b450b..a01be8a11e8 100644 --- a/code/modules/power/singularity/generator.dm +++ b/code/modules/power/singularity/generator.dm @@ -22,7 +22,7 @@ if(src) qdel(src) /obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) anchored = !anchored playsound(src.loc, W.usesound, 75, 1) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 92a64ad27bb..d22b389a675 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -15,6 +15,11 @@ /obj/singularity/narsie/admin_investigate_setup() return + +/obj/singularity/narsie/update_icon_state() + return + + /obj/singularity/narsie/large name = "Nar'Sie" icon = 'icons/obj/narsie.dmi' diff --git a/code/modules/power/singularity/ratvar.dm b/code/modules/power/singularity/ratvar.dm index df1e4335670..7f774d30c68 100644 --- a/code/modules/power/singularity/ratvar.dm +++ b/code/modules/power/singularity/ratvar.dm @@ -36,6 +36,11 @@ addtimer(CALLBACK(src, PROC_REF(call_shuttle)), 7 SECONDS) + +/obj/singularity/ratvar/update_icon_state() + return + + /obj/singularity/ratvar/proc/call_shuttle() SSshuttle.emergency.request(null, 0.3) SSshuttle.emergency.canRecall = FALSE // Cannot recall diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index d6ad8990499..f91d7cbd124 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -147,6 +147,28 @@ dissipate_track++ +/obj/singularity/update_icon_state() + switch(current_size) + if(STAGE_ONE) + icon = 'icons/obj/engines_and_power/singularity.dmi' + icon_state = "singularity_s1" + if(STAGE_TWO) + icon = 'icons/effects/96x96.dmi' + icon_state = "singularity_s3" + if(STAGE_THREE) + icon = 'icons/effects/160x160.dmi' + icon_state = "singularity_s5" + if(STAGE_FOUR) + icon = 'icons/effects/224x224.dmi' + icon_state = "singularity_s7" + if(STAGE_FIVE) + icon = 'icons/effects/288x288.dmi' + icon_state = "singularity_s9" + if(STAGE_SIX) + icon = 'icons/effects/352x352.dmi' + icon_state = "singularity_s11" + + /obj/singularity/proc/expand(force_size = 0) var/temp_allowed_size = src.allowed_size if(force_size) @@ -156,8 +178,6 @@ switch(temp_allowed_size) if(STAGE_ONE) current_size = STAGE_ONE - icon = 'icons/obj/engines_and_power/singularity.dmi' - icon_state = "singularity_s1" pixel_x = 0 pixel_y = 0 grav_pull = 4 @@ -168,8 +188,6 @@ if(STAGE_TWO) if((check_turfs_in(1,1))&&(check_turfs_in(2,1))&&(check_turfs_in(4,1))&&(check_turfs_in(8,1))) current_size = STAGE_TWO - icon = 'icons/effects/96x96.dmi' - icon_state = "singularity_s3" pixel_x = -32 pixel_y = -32 grav_pull = 6 @@ -180,8 +198,6 @@ if(STAGE_THREE) if((check_turfs_in(1,2))&&(check_turfs_in(2,2))&&(check_turfs_in(4,2))&&(check_turfs_in(8,2))) current_size = STAGE_THREE - icon = 'icons/effects/160x160.dmi' - icon_state = "singularity_s5" pixel_x = -64 pixel_y = -64 grav_pull = 8 @@ -192,8 +208,6 @@ if(STAGE_FOUR) if((check_turfs_in(1,3))&&(check_turfs_in(2,3))&&(check_turfs_in(4,3))&&(check_turfs_in(8,3))) current_size = STAGE_FOUR - icon = 'icons/effects/224x224.dmi' - icon_state = "singularity_s7" pixel_x = -96 pixel_y = -96 grav_pull = 10 @@ -203,8 +217,6 @@ dissipate_strength = 10 if(STAGE_FIVE)//this one also lacks a check for gens because it eats everything current_size = STAGE_FIVE - icon = 'icons/effects/288x288.dmi' - icon_state = "singularity_s9" pixel_x = -128 pixel_y = -128 grav_pull = 10 @@ -212,13 +224,12 @@ dissipate = 0 //It cant go smaller due to e loss if(STAGE_SIX) //This only happens if a stage 5 singulo consumes a supermatter shard. current_size = STAGE_SIX - icon = 'icons/effects/352x352.dmi' - icon_state = "singularity_s11" pixel_x = -160 pixel_y = -160 grav_pull = 15 consume_range = 5 dissipate = 0 + update_icon(UPDATE_ICON_STATE) if(current_size == allowed_size) investigate_log("grew to size [current_size]", INVESTIGATE_ENGINE) return 1 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index da3f01f882d..0feab1b9291 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -202,7 +202,7 @@ return //disassembling the terminal - if(istype(I, /obj/item/wirecutters) && terminal && panel_open) + if(I.tool_behaviour == TOOL_WIRECUTTER && terminal && panel_open) var/turf/T = get_turf(terminal) if(T.intact) //is the floor plating removed ? to_chat(user, "You must first expose the power terminal!") diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 392e81ed9d7..85d2caa1895 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -204,14 +204,14 @@ /obj/item/solar_assembly/attackby(var/obj/item/W, var/mob/user, params) if(!anchored && isturf(loc)) - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) anchored = 1 user.visible_message("[user] wrenches the solar assembly into place.", "You wrench the solar assembly into place.") playsound(src.loc, W.usesound, 50, 1) return 1 else - if(istype(W, /obj/item/wrench)) + if(W.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) anchored = 0 user.visible_message("[user] unwrenches the solar assembly from its place.", "You unwrench the solar assembly from its place.") @@ -242,7 +242,7 @@ qdel(W) user.visible_message("[user] inserts the electronics into the solar assembly.", "You insert the electronics into the solar assembly.") return 1 - else if(istype(W, /obj/item/crowbar)) + else if(W.tool_behaviour == TOOL_CROWBAR) add_fingerprint(user) var/obj/item/tracker_electronics/electronics = new(src.loc) electronics.add_fingerprint(user) @@ -428,7 +428,7 @@ set_panels(cdir) /obj/machinery/power/solar_control/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) playsound(src.loc, I.usesound, 50, 1) if(do_after(user, 20 * I.toolspeed * gettoolspeedmod(user), target = src)) if(src.stat & BROKEN) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index e2ee72809fb..7ea17a9141e 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -35,7 +35,7 @@ /obj/machinery/power/terminal/hide(i) if(i) - invisibility = INVISIBILITY_ABSTRACT + invisibility = INVISIBILITY_MAXIMUM icon_state = "term-f" else invisibility = 0 @@ -78,7 +78,7 @@ /obj/machinery/power/terminal/attackby(obj/item/W, mob/living/user, params) - if(istype(W, /obj/item/wirecutters)) + if(W.tool_behaviour == TOOL_WIRECUTTER) dismantle(user, W) else return ..() diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 62a9b83e93a..5d9d41d5653 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -30,20 +30,26 @@ /// How strong the flash is var/muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_WEAK + /obj/item/ammo_casing/New() ..() if(projectile_type) BB = new projectile_type(src) - pixel_x = rand(-10.0, 10) - pixel_y = rand(-10.0, 10) + pixel_x = rand(-10, 10) + pixel_y = rand(-10, 10) dir = pick(GLOB.alldirs) - update_icon() + update_appearance(UPDATE_ICON|UPDATE_DESC) -/obj/item/ammo_casing/update_icon() - ..() + +/obj/item/ammo_casing/update_icon_state() icon_state = "[initial(icon_state)][BB ? "-live" : ""]" + + +/obj/item/ammo_casing/update_desc(updates = ALL) + . = ..() desc = "[initial(desc)][BB ? "" : " This one is spent."]" + /obj/item/ammo_casing/proc/newshot(params) //For energy weapons, shotgun shells and wands (!). if(!BB) BB = new projectile_type(src, params) @@ -69,13 +75,13 @@ else continue if(boolets > 0) - box.update_icon() + box.update_appearance(UPDATE_ICON|UPDATE_DESC) to_chat(user, span_notice("You collect [boolets] shell\s. [box] now contains [box.stored_ammo.len] shell\s.")) playsound(src, 'sound/weapons/gun_interactions/bulletinsert.ogg', 50, 1) else to_chat(user, span_warning("You fail to collect anything!")) else - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) if(BB) if(initial(BB.name) == "bullet") var/tmp_label = "" @@ -139,7 +145,7 @@ if(ammo_type) for(var/i in 1 to max_ammo) stored_ammo += new ammo_type(src) - update_icon() + update_appearance(UPDATE_ICON|UPDATE_DESC) initial_mats = materials.Copy() update_mat_value() @@ -212,8 +218,8 @@ if(!silent) to_chat(user, span_notice("You load [num_loaded] shell\s into \the [src]!")) playsound(src, load_sound, 50, 1) - A.update_icon() - update_icon() + A.update_appearance(UPDATE_ICON|UPDATE_DESC) + update_appearance(UPDATE_ICON|UPDATE_DESC) return num_loaded @@ -223,16 +229,22 @@ user.put_in_hands(A) playsound(src, remove_sound, 50, 1) to_chat(user, span_notice("You remove a round from \the [src]!")) - update_icon() + update_appearance(UPDATE_ICON|UPDATE_DESC) -/obj/item/ammo_box/update_icon() + +/obj/item/ammo_box/update_desc(updates = ALL) + . = ..() + desc = "[initial(desc)] There are [length(stored_ammo)] shell\s left!" + + +/obj/item/ammo_box/update_icon_state() var/icon_base = initial(icon_prefix) ? initial(icon_prefix) : initial(icon_state) switch(multiple_sprites) if(1) - icon_state = "[icon_base]-[stored_ammo.len]" + icon_state = "[icon_base]-[length(stored_ammo)]" if(2) - icon_state = "[icon_base]-[stored_ammo.len ? "[max_ammo]" : "0"]" - desc = "[initial(desc)] There are [stored_ammo.len] shell\s left!" + icon_state = "[icon_base]-[length(stored_ammo) ? "[max_ammo]" : "0"]" + /obj/item/ammo_box/update_materials_coeff(new_coeff) . = ..() @@ -253,7 +265,7 @@ materials[material] += ammo.materials[material] //Behavior for magazines -/obj/item/ammo_box/magazine/proc/ammo_count() +/obj/item/ammo_box/magazine/proc/ammo_count(countempties = TRUE) return length(stored_ammo) /obj/item/ammo_box/magazine/proc/empty_magazine() diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index d7615d14d94..0b6b5910ed7 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -1,6 +1,6 @@ /obj/item/ammo_casing/a357 desc = "A .357 bullet casing." - materials = list(MAT_METAL = 4000) + materials = list(MAT_METAL = 3750) caliber = ".357" projectile_type = /obj/item/projectile/bullet muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_NORMAL @@ -61,7 +61,7 @@ /obj/item/ammo_casing/c38/hp desc = "A .38 Hollow-Point bullet casing" icon_state = "rhp-casing" - materials = list(MAT_METAL = 4000) + materials = list(MAT_METAL = 5000) projectile_type = /obj/item/projectile/bullet/hp38 /obj/item/ammo_casing/c38/invisible @@ -120,7 +120,7 @@ /obj/item/ammo_casing/c46x30mm desc = "A 4.6x30mm bullet casing." - materials = list(MAT_METAL = 1000) + materials = list(MAT_METAL = 500) caliber = "4.6x30mm" projectile_type = /obj/item/projectile/bullet/weakbullet3/foursix muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_WEAK @@ -128,7 +128,7 @@ /obj/item/ammo_casing/c9mmte desc = "A 9mm TE bullet casing." - materials = list(MAT_METAL = 800) + materials = list(MAT_METAL = 550) caliber = "9mm TE" projectile_type = /obj/item/projectile/bullet/weakbullet4/c9mmte muzzle_flash_strength = MUZZLE_FLASH_STRENGTH_WEAK @@ -483,11 +483,10 @@ var/modified = FALSE harmful = FALSE -/obj/item/ammo_casing/caseless/foam_dart/update_icon() - ..() + +/obj/item/ammo_casing/caseless/foam_dart/update_icon_state() if(modified) icon_state = "foamdart_empty" - desc = "Its nerf or nothing! ... Although, this one doesn't look too safe." if(BB) BB.icon_state = "foamdart_empty" else @@ -495,10 +494,16 @@ if(BB) BB.icon_state = initial(BB.icon_state) + +/obj/item/ammo_casing/caseless/foam_dart/update_desc(updates) + . = ..() + desc = modified ? "Its nerf or nothing! ... Although, this one doesn't look too safe." : initial(desc) + + /obj/item/ammo_casing/caseless/foam_dart/attackby(obj/item/A, mob/user, params) ..() var/obj/item/projectile/bullet/reusable/foam_dart/FD = BB - if(istype(A, /obj/item/screwdriver) && !modified) + if(A.tool_behaviour == TOOL_SCREWDRIVER && !modified) modified = TRUE FD.damage_type = BRUTE update_icon() @@ -537,11 +542,10 @@ caliber = "foam_force_sniper" projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/sniper -/obj/item/ammo_casing/caseless/foam_dart/sniper/update_icon() - ..() + +/obj/item/ammo_casing/caseless/foam_dart/sniper/update_icon_state() if(modified) icon_state = "foamdartsniper_empty" - desc = "Its nerf or nothing! ... Although, this one doesn't look too safe." if(BB) BB.icon_state = "foamdartsniper_empty" else @@ -549,6 +553,12 @@ if(BB) BB.icon_state = initial(BB.icon_state) + +/obj/item/ammo_casing/caseless/foam_dart/sniper/update_desc(updates) + . = ..() + desc = modified ? "Its nerf or nothing! ... Although, this one doesn't look too safe." : initial(desc) + + /obj/item/ammo_casing/caseless/foam_dart/sniper/riot name = "riot foam sniper dart" desc = "For the bigger brother of the crowd control toy. Ages 18 and up." diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index 9cb28aab69f..9941d83facb 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -9,9 +9,10 @@ ammo_type = /obj/item/ammo_casing/a357 max_ammo = 20 -/obj/item/ammo_box/a357/update_icon() - icon_state = "[initial(icon_state)]-[round(stored_ammo.len / 3)]" - desc = "[initial(desc)] There are [stored_ammo.len] shell\s left!" + +/obj/item/ammo_box/a357/update_icon_state() + icon_state = "[initial(icon_state)]-[round(length(stored_ammo) / 3)]" + /obj/item/ammo_box/n762 name = "ammo box (7.62x38mm)" @@ -294,16 +295,17 @@ name = "Shotgun Speedloader" icon_state = "shotgunloader" -/obj/item/ammo_box/speedloader/shotgun/update_icon() - overlays.Cut() +/obj/item/ammo_box/speedloader/shotgun/update_overlays() + . = ..() for(var/i = 1 to length(stored_ammo)) var/obj/item/ammo_casing/shotgun/ammo = stored_ammo[i] var/icon/new_ammo_icon = icon('icons/obj/weapons/ammo.dmi', "[initial(ammo.icon_state)]_loader") if(i < 7) new_ammo_icon.Shift((i % 2) == 0 ? WEST : EAST, 3) new_ammo_icon.Turn(FLOOR((i - 1) * 45, 90)) - overlays += new_ammo_icon + . += new_ammo_icon + /obj/item/ammo_box/speedloader/shotgun/slug name = "Shotgun Speedloader (slug)" diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index 4e0f06c3c4b..6c538947edc 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -223,14 +223,9 @@ delay = 10 e_cost = 100 fire_sound = 'sound/weapons/pulse3.ogg' - var/obj/item/gun/energy/wormhole_projector/gun = null select_name = "blue" harmful = FALSE -/obj/item/ammo_casing/energy/wormhole/New(var/obj/item/gun/energy/wormhole_projector/wh) - . = ..() - gun = wh - /obj/item/ammo_casing/energy/wormhole/orange projectile_type = /obj/item/projectile/beam/wormhole/orange muzzle_flash_color = "#FF6600" diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index dccfa7f2eef..51b6bc2fe5a 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -14,7 +14,7 @@ max_ammo = 7 -/obj/item/ammo_box/magazine/internal/cylinder/ammo_count(countempties = 1) +/obj/item/ammo_box/magazine/internal/cylinder/ammo_count(countempties = TRUE) var/boolets = 0 for(var/obj/item/ammo_casing/bullet in stored_ammo) if(bullet && (bullet.BB || countempties)) @@ -108,7 +108,7 @@ max_ammo = 4 multiload = 0 -/obj/item/ammo_box/magazine/internal/shot/ammo_count(countempties = 1) +/obj/item/ammo_box/magazine/internal/shot/ammo_count(countempties = TRUE) if(!countempties) var/boolets = 0 for(var/obj/item/ammo_casing/bullet in stored_ammo) @@ -243,8 +243,7 @@ desc= "A gun magazine. Loaded with rounds which penetrate armour, but are less effective against normal targets" ammo_type = /obj/item/ammo_casing/c10mm/ap -/obj/item/ammo_box/magazine/m10mm/update_icon() - . = ..() +/obj/item/ammo_box/magazine/m10mm/update_icon_state() icon_state = "[initial(icon_state)]-[ammo_count() ? "15" : "0"]" /obj/item/ammo_box/magazine/m45 @@ -263,13 +262,12 @@ multiple_sprites = 1 caliber = "9mm" -/obj/item/ammo_box/magazine/enforcer/update_icon() - ..() - overlays.Cut() - var/ammo = ammo_count() - if(ammo && is_rubber()) - overlays += image('icons/obj/weapons/ammo.dmi', icon_state = "enforcer-r") +/obj/item/ammo_box/magazine/enforcer/update_overlays() + . = ..() + if(ammo_count() && is_rubber()) + . += image('icons/obj/weapons/ammo.dmi', icon_state = "enforcer-r") + /obj/item/ammo_box/magazine/enforcer/examine(mob/user) . = ..() @@ -295,8 +293,7 @@ max_ammo = 10 caliber = "40nr" -/obj/item/ammo_box/magazine/sp8/update_icon() - ..() +/obj/item/ammo_box/magazine/sp8/update_icon_state() icon_state = "sp8mag-[round(ammo_count(),2)]" /obj/item/ammo_box/magazine/wt550m9 @@ -306,8 +303,7 @@ caliber = "4.6x30mm" max_ammo = 20 -/obj/item/ammo_box/magazine/wt550m9/update_icon() - ..() +/obj/item/ammo_box/magazine/wt550m9/update_icon_state() icon_state = "46x30mmt-[round(ammo_count(),4)]" /obj/item/ammo_box/magazine/wt550m9/wtap @@ -329,8 +325,7 @@ caliber = "9mm TE" max_ammo = 20 -/obj/item/ammo_box/magazine/sp91rc/update_icon() - ..() +/obj/item/ammo_box/magazine/sp91rc/update_icon_state() icon_state = "9mm-te-[round(ammo_count(),5)]" /obj/item/ammo_box/magazine/uzim9mm @@ -340,8 +335,7 @@ caliber = "9mm" max_ammo = 32 -/obj/item/ammo_box/magazine/uzim9mm/update_icon() - ..() +/obj/item/ammo_box/magazine/uzim9mm/update_icon_state() icon_state = "uzi9mm-[round(ammo_count(),4)]" /obj/item/ammo_box/magazine/smgm9mm @@ -363,8 +357,7 @@ name = "SMG Magazine (Incendiary 9mm)" ammo_type = /obj/item/ammo_casing/c9mm/inc -/obj/item/ammo_box/magazine/smgm9mm/update_icon() - ..() +/obj/item/ammo_box/magazine/smgm9mm/update_icon_state() icon_state = "[initial(icon_state)]-[round(ammo_count()+1,4)]" /obj/item/ammo_box/magazine/sfg9mm @@ -374,8 +367,7 @@ caliber = "9mm" max_ammo = 30 -/obj/item/ammo_box/magazine/sfg9mm/update_icon() - ..() +/obj/item/ammo_box/magazine/sfg9mm/update_icon_state() icon_state = "[initial(icon_state)]-[round(ammo_count(), 30)]" /obj/item/ammo_box/magazine/pistolm9mm @@ -385,8 +377,7 @@ caliber = "9mm" max_ammo = 15 -/obj/item/ammo_box/magazine/pistolm9mm/update_icon() - ..() +/obj/item/ammo_box/magazine/pistolm9mm/update_icon_state() icon_state = "9x19p-[ammo_count() ? "15" : "0"]" /obj/item/ammo_box/magazine/smgm45 @@ -397,8 +388,7 @@ caliber = ".45" max_ammo = 20 -/obj/item/ammo_box/magazine/smgm45/update_icon() - ..() +/obj/item/ammo_box/magazine/smgm45/update_icon_state() icon_state = "[initial(icon_state)]-[round(ammo_count(),2)]" /obj/item/ammo_box/magazine/tommygunm45 @@ -537,8 +527,7 @@ icon_state = "smg9mm-20" max_ammo = 20 -/obj/item/ammo_box/magazine/toy/smg/update_icon() - ..() +/obj/item/ammo_box/magazine/toy/smg/update_icon_state() icon_state = "smg9mm-[round(ammo_count()+1,4)]" /obj/item/ammo_box/magazine/toy/smg/riot @@ -553,8 +542,7 @@ /obj/item/ammo_box/magazine/toy/pistol/riot ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot -/obj/item/ammo_box/magazine/toy/pistol/update_icon() - ..() +/obj/item/ammo_box/magazine/toy/pistol/update_icon_state() icon_state = "9x19p-[ammo_count() ? "15" : "0"]" /obj/item/ammo_box/magazine/toy/enforcer @@ -564,21 +552,21 @@ multiple_sprites = 1 ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot -/obj/item/ammo_box/magazine/toy/enforcer/update_icon() - ..() - overlays.Cut() +/obj/item/ammo_box/magazine/toy/enforcer/update_overlays() + . = ..() var/ammo = ammo_count() if(ammo && is_riot()) overlays += image('icons/obj/weapons/ammo.dmi', icon_state = "enforcer-rd") else if(ammo) overlays += image('icons/obj/weapons/ammo.dmi', icon_state = "enforcer-bd") + /obj/item/ammo_box/magazine/toy/enforcer/proc/is_riot()//if the topmost bullet is a riot dart var/ammo = ammo_count() if(!ammo) return FALSE - if(istype(contents[contents.len], /obj/item/ammo_casing/caseless/foam_dart/riot)) + if(istype(contents[length(contents)], /obj/item/ammo_casing/caseless/foam_dart/riot)) return TRUE return FALSE @@ -587,8 +575,7 @@ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot max_ammo = 20 -/obj/item/ammo_box/magazine/toy/smgm45/update_icon() - ..() +/obj/item/ammo_box/magazine/toy/smgm45/update_icon_state() icon_state = "c20r45-[round(ammo_count(),2)]" /obj/item/ammo_box/magazine/toy/m762 @@ -596,8 +583,7 @@ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot max_ammo = 50 -/obj/item/ammo_box/magazine/toy/m762/update_icon() - ..() +/obj/item/ammo_box/magazine/toy/m762/update_icon_state() icon_state = "a762-[round(ammo_count(),10)]" /obj/item/ammo_box/magazine/toy/m762/riot @@ -612,9 +598,8 @@ caliber = "laser" max_ammo = 20 -/obj/item/ammo_box/magazine/laser/update_icon() - ..() - icon_state = "[initial(icon_state)]-[CEILING(ammo_count(0)/20, 1)*20]" +/obj/item/ammo_box/magazine/laser/update_icon_state() + icon_state = "[initial(icon_state)]-[CEILING(ammo_count(FALSE)/20, 1)*20]" /obj/item/ammo_box/magazine/lr30mag name = "small encased laser projector magazine" @@ -625,20 +610,10 @@ caliber = "laser" max_ammo = 12 -/obj/item/ammo_box/magazine/lr30mag/update_icon() - ..() +/obj/item/ammo_box/magazine/lr30mag/update_icon_state() icon_state = "lmag-[round(ammo_count(),3)]" -/obj/item/ammo_box/magazine/toy/smgm45 - name = "donksoft SMG magazine" - ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot - max_ammo = 20 - -/obj/item/ammo_box/magazine/toy/smgm45/update_icon() - ..() - icon_state = "c20r45-[round(ammo_count(),2)]" - /obj/item/ammo_box/magazine/toy/smgm45/riot ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 47221f2c3ce..b8ac290507c 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -43,15 +43,20 @@ var/randomspread = 1 var/barrel_dir = EAST // barel direction need for a rotate gun with telekinesis for shot to target (default: matched with tile direction) - var/unique_rename = TRUE //allows renaming with a pen - var/unique_reskin = FALSE //allows reskinning - var/current_skin = null //the skin choice if we had a reskin - var/list/options = list() + /// Allows renaming with a pen + var/unique_rename = TRUE + /// Allows reskinning + var/unique_reskin = FALSE + /// The skin choice if we had a reskin + var/current_skin + /// Lazy list of gun visual skins. Filled on Initialize() in proc/update_gun_skins() + var/list/skin_options lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/guns_righthand.dmi' var/obj/item/flashlight/gun_light = null + var/gun_light_overlay var/can_flashlight = 0 var/can_bayonet = FALSE //if a bayonet can be added or removed if it already has one. @@ -82,19 +87,24 @@ var/malf_high_bound = 80 var/malf_counter // random number between malf_low_bound and malf_high_bound + /obj/item/gun/Initialize() . = ..() appearance_flags |= KEEP_TOGETHER if(gun_light) verbs += /obj/item/gun/proc/toggle_gunlight build_zooming() - if(rusted_weapon == TRUE) + if(rusted_weapon) malf_counter = rand(malf_low_bound, malf_high_bound) + update_gun_skins() + /obj/item/gun/Destroy() + QDEL_NULL(gun_light) QDEL_NULL(bayonet) return ..() + /obj/item/gun/handle_atom_del(atom/A) if(A == bayonet) clear_bayonet() @@ -113,6 +123,24 @@ else if(can_bayonet) . += "It has a bayonet lug on it." + +/obj/item/gun/proc/update_gun_skins() + return + + +/** + * Adds skin in associative lazy list: skin_options[skin_name] = skin_icon_state + * + * Arguments: + * * skin_name - what skin name user will see. + * * skin_icon_state - which icon_state will be used for the gun. + */ +/obj/item/gun/proc/add_skin(skin_name, skin_icon_state) + if(!unique_reskin) + return + LAZYSET(skin_options, skin_name, skin_icon_state) + + /obj/item/gun/proc/process_chamber() return 0 @@ -357,11 +385,10 @@ if(S.on) set_light(0) gun_light = S - update_icon() - update_gun_light(user) var/datum/action/A = new /datum/action/item_action/toggle_gunlight(src) if(loc == user) A.Grant(user) + update_gun_light() if(unique_rename) if(istype(I, /obj/item/pen)) @@ -376,6 +403,7 @@ return to_chat(user, "You attach [K] to [src]'s bayonet lug.") bayonet = K + update_icon() var/state = "bayonet" //Generic state. if(bayonet.icon_state in icon_states('icons/obj/weapons/bayonets.dmi')) //Snowflake state? state = bayonet.icon_state @@ -383,7 +411,7 @@ knife_overlay = mutable_appearance(bayonet_icons, state) knife_overlay.pixel_x = knife_x_offset knife_overlay.pixel_y = knife_y_offset - overlays += knife_overlay + update_icon(UPDATE_OVERLAYS) else return ..() @@ -395,14 +423,13 @@ for(var/obj/item/flashlight/seclite/S in src) to_chat(user, "You unscrew the seclite from [src].") gun_light = null - S.loc = get_turf(user) - update_gun_light(user) + update_gun_light() + S.forceMove_turf() S.update_brightness(user) - update_icon() for(var/datum/action/item_action/toggle_gunlight/TGL in actions) qdel(TGL) else if(bayonet && can_bayonet) //if it has a bayonet, and the bayonet can be removed - bayonet.forceMove(get_turf(user)) + bayonet.forceMove_turf() clear_bayonet() /obj/item/gun/proc/toggle_gunlight() @@ -420,9 +447,10 @@ to_chat(user, "You toggle the gun light [gun_light.on ? "on":"off"].") playsound(user, 'sound/weapons/empty.ogg', 100, 1) - update_gun_light(user) + update_gun_light() -/obj/item/gun/proc/update_gun_light(mob/user = null) + +/obj/item/gun/proc/update_gun_light() if(gun_light) if(gun_light.on) set_light(gun_light.brightness_on) @@ -432,22 +460,23 @@ else set_light(0) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + update_icon(UPDATE_OVERLAYS) + update_equipped_item() + /obj/item/gun/proc/clear_bayonet() if(!bayonet) return bayonet = null if(knife_overlay) - overlays -= knife_overlay knife_overlay = null + update_icon(UPDATE_OVERLAYS) return TRUE /obj/item/gun/extinguish_light(force = FALSE) if(gun_light?.on) - toggle_gunlight() + gun_light.on = FALSE + update_gun_light() visible_message(span_danger("[src]'s light fades and turns off.")) @@ -457,22 +486,37 @@ if(azoom) azoom.Remove(user) + /obj/item/gun/AltClick(mob/user) + if(!unique_reskin || current_skin || loc != user) + return ..() if(user.incapacitated()) - to_chat(user, "You can't do that right now!") - return - if(unique_reskin && loc == user) - reskin_gun(user) + to_chat(user, span_warning("You can't do that right now!")) + return ..() + reskin_gun(user) -/obj/item/gun/proc/reskin_gun(mob/M) - var/choice = input(M,"Select your skin.","Reskin Gun") in options - if(src && choice && !M.incapacitated() && in_range(M,src)) - if(options[choice] == null) - return - current_skin = options[choice] - to_chat(M, "Your gun is now skinned as [choice]. Say hello to your new friend.") +/obj/item/gun/proc/reskin_gun(mob/user) + if(!LAZYLEN(skin_options)) + stack_trace("[src] has unique_reskin set to TRUE but skin_options list is empty.") + return + var/list/skins = list() + for(var/skin in skin_options) + skins[skin] = image(icon = icon, icon_state = skin_options[skin]) + var/choice = show_radial_menu(user, src, skins, radius = 40, custom_check = CALLBACK(src, PROC_REF(reskin_radial_check), user), require_near = TRUE) + + if(choice && reskin_radial_check(user) && !current_skin) + current_skin = skin_options[choice] + to_chat(user, "Your gun is now skinned as [choice]. Say hello to your new friend.") update_icon() + update_equipped_item() + + +/obj/item/gun/proc/reskin_radial_check(mob/living/carbon/human/user) + if(!ishuman(user) || QDELETED(src) || !user.is_in_hands(src) || user.incapacitated()) + return FALSE + return TRUE + /obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params) if(!ishuman(user) || !ishuman(target)) diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 746649fe722..bcabb2de7f7 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -54,9 +54,14 @@ restricted_species = list(/datum/species/vox/armalis) sprite_sheets_inhand = list("Vox Armalis" = 'icons/mob/clothing/species/armalis/held.dmi') //Big guns big birds. -/obj/item/gun/energy/noisecannon/update_icon() + +/obj/item/gun/energy/noisecannon/update_icon_state() return + +/obj/item/gun/energy/noisecannon/update_overlays() + return list() + //Casing /obj/item/ammo_casing/energy/sonic projectile_type = /obj/item/projectile/energy/sonic diff --git a/code/modules/projectiles/guns/dartgun.dm b/code/modules/projectiles/guns/dartgun.dm index ad69e1445a6..f68c07b1f2f 100644 --- a/code/modules/projectiles/guns/dartgun.dm +++ b/code/modules/projectiles/guns/dartgun.dm @@ -10,14 +10,15 @@ origin_tech = "materials=2" var/darts = 5 -/obj/item/dart_cartridge/update_icon() + +/obj/item/dart_cartridge/update_icon_state() if(!darts) icon_state = "darts-0" else if(darts > 5) icon_state = "darts-5" else icon_state = "darts-[darts]" - return 1 + /obj/item/gun/dartgun name = "dart gun" @@ -32,10 +33,11 @@ var/containers_type = /obj/item/reagent_containers/glass/beaker var/list/starting_chems = null -/obj/item/gun/dartgun/update_icon() + +/obj/item/gun/dartgun/update_icon_state() if(!cartridge) icon_state = "dartgun-e" - return 1 + return if(!cartridge.darts) icon_state = "dartgun-0" @@ -43,10 +45,11 @@ icon_state = "dartgun-5" else icon_state = "dartgun-[cartridge.darts]" - return 1 -/obj/item/gun/dartgun/New() - ..() + +/obj/item/gun/dartgun/Initialize() + . = ..() + if(starting_chems) for(var/chem in starting_chems) var/obj/B = new containers_type(src) @@ -55,6 +58,7 @@ cartridge = new /obj/item/dart_cartridge(src) update_icon() + /obj/item/gun/dartgun/examine(mob/user) . = ..() if(get_dist(user, src) <= 2) @@ -150,7 +154,7 @@ to_chat(user, "There are no reagents available!") return cartridge.darts-- - src.update_icon() + update_icon() S.reagents.trans_to(D, S.reagents.total_volume) qdel(S) D.icon_state = "syringeproj" @@ -293,6 +297,6 @@ anchored = 1 density = 0 -/obj/effect/syringe_gun_dummy/New() +/obj/effect/syringe_gun_dummy/Initialize(mapload) . = ..() create_reagents(15) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index f01f049d325..f46c5b7b558 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -4,6 +4,7 @@ desc = "A basic energy-based gun." icon = 'icons/obj/weapons/energy.dmi' fire_sound_text = "laser blast" + gun_light_overlay = "flight" ammo_x_offset = 2 var/obj/item/stock_parts/cell/cell //What type of power cell this uses @@ -17,6 +18,12 @@ var/charge_sections = 4 var/charge_tick = 0 var/charge_delay = 4 + /// Used when updating icon and overlays + var/new_icon_state + /// If the item uses a shared set of overlays instead of being based on icon_state + var/overlay_set + /// Used when updating icon and overlays to determine the energy pips + var/ratio var/can_add_sibyl_system = TRUE //if a sibyl system's mod can be added or removed if it already has one var/obj/item/sibyl_system_mod/sibyl_mod = null @@ -174,11 +181,13 @@ /obj/item/gun/energy/proc/on_recharge() newshot() + /obj/item/gun/energy/attack_self(mob/living/user) - if(ammo_type.len > 1) + if(length(ammo_type)) select_fire(user) update_icon() + /obj/item/gun/energy/can_shoot(mob/living/user) var/obj/item/ammo_casing/energy/shot = ammo_type[select] var/check_charge = cell.charge >= shot.e_cost @@ -229,43 +238,54 @@ chambered = null newshot() update_icon() - if(istype(user,/mob/living/carbon/human)) //This has to be here or else if you toggle modes by clicking the gun in hand - var/mob/living/carbon/human/H = user //Otherwise the mob icon doesn't update, blame shitty human update_icons() code - H.update_inv_l_hand() - H.update_inv_r_hand() - return - -/obj/item/gun/energy/update_icon() - overlays.Cut() - var/ratio = CEILING((cell.charge / cell.maxcharge) * charge_sections, 1) + + +/obj/item/gun/energy/update_icon(updates = ALL) + ..() + update_equipped_item() + + +/obj/item/gun/energy/update_icon_state() + icon_state = initial(icon_state) + ratio = CEILING((cell.charge / cell.maxcharge) * charge_sections, 1) var/obj/item/ammo_casing/energy/shot = ammo_type[select] - var/iconState = "[icon_state]_charge" - var/itemState = null + new_icon_state = "[icon_state]_charge" + var/new_item_state = null if(!initial(item_state)) - itemState = icon_state + new_item_state = icon_state if(modifystate) - overlays += "[icon_state]_[shot.select_name]" - iconState += "_[shot.select_name]" - if(itemState) - itemState += "[shot.select_name]" + new_icon_state += "_[shot.select_name]" + if(new_item_state) + new_item_state += "[shot.select_name]" + if(new_item_state) + new_item_state += "[ratio]" + item_state = new_item_state + if(current_skin) + icon_state = current_skin + + +/obj/item/gun/energy/update_overlays() + . = ..() + var/overlay_name = overlay_set ? overlay_set : icon_state + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + if(modifystate) + . += "[overlay_name]_[shot.select_name]" if(cell.charge < shot.e_cost) - overlays += "[icon_state]_empty" + . += "[overlay_name]_empty" else if(!shaded_charge) for(var/i = ratio, i >= 1, i--) - overlays += image(icon = icon, icon_state = iconState, pixel_x = ammo_x_offset * (i -1)) + . += image(icon = icon, icon_state = new_icon_state, pixel_x = ammo_x_offset * (i - 1)) else - overlays += image(icon = icon, icon_state = "[icon_state]_[modifystate ? "[shot.select_name]_" : ""]charge[ratio]") - if(gun_light && can_flashlight) - var/iconF = "flight" + . += image(icon = icon, icon_state = "[overlay_name]_[modifystate ? "[shot.select_name]_" : ""]charge[ratio]") + if(gun_light && gun_light_overlay) + var/iconF = gun_light_overlay if(gun_light.on) - iconF = "flight_on" - overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) - if(bayonet && can_bayonet) - overlays += knife_overlay - if(itemState) - itemState += "[ratio]" - item_state = itemState + iconF = "[gun_light_overlay]_on" + . += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) + if(bayonet && knife_overlay) + . += knife_overlay + /obj/item/gun/energy/ui_action_click() toggle_gunlight() diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 1245b0d6cf2..eb9a41b30ff 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -151,18 +151,11 @@ update_icon() overheat = FALSE -/obj/item/gun/energy/kinetic_accelerator/update_icon() - cut_overlays() + +/obj/item/gun/energy/kinetic_accelerator/update_overlays() + . = ..() if(empty_state && !can_shoot()) - add_overlay(empty_state) - - if(gun_light && can_flashlight) - var/iconF = "flight" - if(gun_light.on) - iconF = "flight_on" - add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) - if(bayonet && can_bayonet) - add_overlay(knife_overlay) + . += empty_state /obj/item/gun/energy/kinetic_accelerator/experimental diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 8a585f2d992..8d2d8d9c3ff 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -1,8 +1,8 @@ /obj/item/gun/energy/laser name = "laser gun" desc = "A basic energy-based laser gun that fires concentrated beams of light which pass through glass and thin metal." - icon_state = "laser" - item_state = "laser" + icon_state = "lasergun" + item_state = null w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=2000) origin_tech = "combat=4;magnets=2" @@ -13,6 +13,8 @@ /obj/item/gun/energy/laser/practice name = "practice laser gun" desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice." + icon_state = "laser" + item_state = "laser" origin_tech = "combat=2;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/laser/practice) clumsy_check = 0 @@ -21,6 +23,7 @@ /obj/item/gun/energy/laser/retro name ="retro laser gun" icon_state = "retro" + item_state = "laser" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's private security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." ammo_x_offset = 3 @@ -36,19 +39,12 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF unique_reskin = TRUE -/obj/item/gun/energy/laser/captain/New() - ..() - options["The Original"] = "caplaser" - options["Restored"] = "caplaser_new" - options["Alternative"] = "caplaser_newer" - options["Cancel"] = null -/obj/item/gun/energy/laser/captain/update_icon() - ..() - if(current_skin) - icon_state = "[current_skin]" - else - icon_state = "[initial(icon_state)]" +/obj/item/gun/energy/laser/captain/update_gun_skins() + add_skin("The Original", "caplaser") + add_skin("Restored", "caplaser_new") + add_skin("Alternative", "caplaser_newer") + /obj/item/gun/energy/laser/captain/scattershot name = "scatter shot laser rifle" @@ -141,11 +137,13 @@ ammo_type = list(/obj/item/ammo_casing/energy/immolator/strong, /obj/item/ammo_casing/energy/immolator/scatter) origin_tech = "combat=5;magnets=5;powerstorage=4" -/obj/item/gun/energy/immolator/multi/update_icon() - ..() + +/obj/item/gun/energy/immolator/multi/update_overlays() + . = ..() var/obj/item/ammo_casing/energy/shot = ammo_type[select] var/append = shot.select_name - overlays += image(icon = icon, icon_state = "multilensimmolator-[append]") + . += image(icon, icon_state = "multilensimmolator-[append]") + /obj/item/gun/energy/immolator/multi/cyborg name = "cyborg immolator cannon" @@ -155,6 +153,8 @@ ////////Laser Tag//////////////////// /obj/item/gun/energy/laser/tag + icon_state = "bluetag" + item_state = "laser" name = "laser tag gun" desc = "Standard issue weapon of the Imperial Guard" origin_tech = "combat=2;magnets=2" diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 668e85d6911..7398ebb26c4 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -26,9 +26,12 @@ desc = "A small, pistol-sized energy gun with a built-in flashlight. It has two settings: disable and kill." icon_state = "mini" w_class = WEIGHT_CLASS_SMALL + gun_light_overlay = "mini-light" + flight_x_offset = 0 + flight_y_offset = 0 ammo_x_offset = 2 charge_sections = 3 - can_flashlight = 0 // Can't attach or detach the flashlight, and override it's icon update + can_flashlight = FALSE actions_types = list(/datum/action/item_action/toggle_gunlight) /obj/item/gun/energy/gun/mini/Initialize(mapload, ...) @@ -37,10 +40,6 @@ cell.maxcharge = 600 cell.charge = 600 -/obj/item/gun/energy/gun/mini/update_icon() - ..() - if(gun_light && gun_light.on) - overlays += "mini-light" /obj/item/gun/energy/gun/hos name = "\improper X-01 MultiPhase Energy Gun" @@ -64,8 +63,8 @@ /obj/item/gun/energy/gun/blueshield/can_shoot() . = ..() - if (. && !isertmindshielded(usr)) - to_chat(usr, "ЕРТ имплант «Защита разума» не обнаружен!") + if(. && !isertmindshielded(usr)) + to_chat(usr, span_warning("ЕРТ имплант «Защита разума» не обнаружен!")) return FALSE return . @@ -83,8 +82,8 @@ /obj/item/gun/energy/gun/pdw9/ert/can_shoot() . = ..() - if (. && !isertmindshielded(usr)) - to_chat(usr, "ЕРТ имплант «Защита разума» не обнаружен!") + if(. && !isertmindshielded(usr)) + to_chat(usr, span_warning("ЕРТ имплант «Защита разума» не обнаружен!")) return FALSE return . diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index c04c8c3d1bc..5197f796942 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -186,8 +186,8 @@ else return ..() -/obj/item/gun/energy/plasmacutter/update_icon() - return +/obj/item/gun/energy/plasmacutter/update_overlays() + return list() /obj/item/gun/energy/plasmacutter/adv name = "advanced plasma cutter" @@ -285,8 +285,8 @@ ammo_type = list(/obj/item/ammo_casing/energy/c3dbullet) can_charge = FALSE -/obj/item/gun/energy/printer/update_icon() - return +/obj/item/gun/energy/printer/update_overlays() + return list() /obj/item/gun/energy/printer/emp_act() return @@ -700,9 +700,7 @@ /obj/item/gun/energy/dominator/update_icon(updates = ALL) is_equipped = ismob(loc) - update_icon_state() - update_overlays() - update_equipped_item() + ..() /obj/item/gun/energy/dominator/update_icon_state() @@ -714,7 +712,7 @@ icon_state = "[base_icon_state][sibyl_mod.auth_id ? "_unlock" : "_lock" ]" return - var/ratio = CEILING((cell.charge / cell.maxcharge) * charge_sections, 1) + ratio = CEILING((cell.charge / cell.maxcharge) * charge_sections, 1) var/obj/item/ammo_casing/energy/shot = ammo_type[select] var/shot_name = shot.alt_select_name var/new_item_state = base_icon_state @@ -730,9 +728,9 @@ /obj/item/gun/energy/dominator/update_overlays() . = list() if(gun_light && can_flashlight) - var/iconF = "flight" + var/iconF = gun_light_overlay if(gun_light.on) - iconF = "[iconF]_on" + iconF = "[gun_light_overlay]_on" . += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 87cdec16388..360579aa054 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -51,8 +51,8 @@ charges--//... drain a charge return -/obj/item/gun/magic/New() - ..() +/obj/item/gun/magic/Initialize() + . = ..() charges = max_charges chambered = new ammo_type(src) if(can_charge) @@ -73,7 +73,7 @@ charges++ return 1 -/obj/item/gun/magic/update_icon() +/obj/item/gun/magic/update_icon_state() return /obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index a95db09a36c..f31e2ee2cb7 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -1,4 +1,4 @@ -/obj/item/gun/magic/wand/ +/obj/item/gun/magic/wand name = "wand of nothing" belt_icon = "wand of nothing" desc = "It's not just a stick, it's a MAGIC stick!" @@ -10,19 +10,21 @@ max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) var/variable_charges = 1 -/obj/item/gun/magic/wand/New() +/obj/item/gun/magic/wand/Initialize() if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges if(prob(33)) max_charges = CEILING(max_charges / 3, 1) else max_charges = CEILING(max_charges / 2, 1) - ..() + . = ..() + /obj/item/gun/magic/wand/examine(mob/user) . = ..() . += "Has [charges] charge\s remaining." -/obj/item/gun/magic/wand/update_icon() + +/obj/item/gun/magic/wand/update_icon_state() icon_state = "[initial(icon_state)][charges ? "" : "-drained"]" diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index 137a2bf65d1..d0ea81f4306 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -15,8 +15,8 @@ weapon_weight = WEAPON_MEDIUM -/obj/item/gun/medbeam/New() - ..() +/obj/item/gun/medbeam/Initialize() + . = ..() START_PROCESSING(SSobj, src) /obj/item/gun/medbeam/Destroy() diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index ad9e4edcbb9..9f9bef2b698 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -23,19 +23,33 @@ user.put_in_hands(bomb) user.visible_message("[user] detaches [bomb] from [src].") bomb = null - update_icon() + update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) return ..() -/obj/item/gun/blastcannon/update_icon() + +/obj/item/gun/blastcannon/update_name(updates = ALL) + . = ..() if(bomb) - icon_state = icon_state_loaded name = "blast cannon" - desc = "A makeshift device used to concentrate a bomb's blast energy to a narrow wave." else - icon_state = initial(icon_state) name = initial(name) + + +/obj/item/gun/blastcannon/update_desc(updates = ALL) + . = ..() + if(bomb) + desc = "A makeshift device used to concentrate a bomb's blast energy to a narrow wave." + else desc = initial(desc) + +/obj/item/gun/blastcannon/update_icon_state() + if(bomb) + icon_state = icon_state_loaded + else + icon_state = initial(icon_state) + + /obj/item/gun/blastcannon/attackby(obj/O, mob/user) if(istype(O, /obj/item/transfer_valve)) var/obj/item/transfer_valve/T = O @@ -47,7 +61,7 @@ return FALSE user.visible_message("[user] attaches [T] to [src]!") bomb = T - update_icon() + update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) return TRUE return ..() @@ -71,7 +85,7 @@ return ..() var/power = calculate_bomb() QDEL_NULL(bomb) - update_icon() + update_appearance(UPDATE_NAME|UPDATE_DESC|UPDATE_ICON_STATE) var/heavy = power * 0.2 var/medium = power * 0.5 var/light = power diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 8cb7c95df60..4fd4c64fa93 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -10,24 +10,50 @@ var/obj/item/ammo_box/magazine/magazine var/can_tactical = FALSE //check to see if the gun can tactically reload -/obj/item/gun/projectile/New() - ..() + +/obj/item/gun/projectile/Initialize(mapload) + . = ..() if(!magazine) magazine = new mag_type(src) chamber_round() + update_weight() update_icon() - return -/obj/item/gun/projectile/update_icon() - ..() + +/obj/item/gun/projectile/update_name(updates = ALL) + . = ..() + if(sawn_state) + name = "sawn-off [name]" + else + name = initial(name) + + +/obj/item/gun/projectile/update_desc(updates = ALL) + . = ..() + if(sawn_state) + desc = sawn_desc + else + desc = initial(desc) + + +/obj/item/gun/projectile/update_icon_state() if(current_skin) - icon_state = "[current_skin][suppressed ? "-suppressed" : ""][sawn_state ? "-sawn" : ""]" + icon_state = "[current_skin][suppressed ? "-suppressed" : ""][sawn_state ? "_sawn" : ""]" else icon_state = "[initial(icon_state)][suppressed ? "-suppressed" : ""][sawn_state ? "-sawn" : ""][bolt_open ? "-open" : ""]" - if(bayonet && can_bayonet) - overlays += knife_overlay -/obj/item/gun/projectile/process_chamber(eject_casing = 1, empty_chamber = 1) + +/obj/item/gun/projectile/update_overlays() + . = ..() + if(bayonet && knife_overlay) + . += knife_overlay + + +/obj/item/gun/proc/update_weight() + return + + +/obj/item/gun/projectile/process_chamber(eject_casing = TRUE, empty_chamber = TRUE) var/obj/item/ammo_casing/AC = chambered //Find chambered round if(isnull(AC) || !istype(AC)) chamber_round() @@ -35,7 +61,7 @@ if(eject_casing) AC.loc = get_turf(src) //Eject casing onto ground. AC.SpinAnimation(10, 1) //next gen special effects - playsound(src, chambered.casing_drop_sound, 100, 1) + playsound(src, chambered.casing_drop_sound, 100, TRUE) if(empty_chamber) chambered = null chamber_round() @@ -50,24 +76,26 @@ return /obj/item/gun/projectile/can_shoot() - if(!magazine || !magazine.ammo_count(0)) - return 0 - return 1 + if(!magazine || !magazine.ammo_count(FALSE)) + return FALSE + return TRUE /obj/item/gun/projectile/proc/can_reload() return !magazine -/obj/item/gun/projectile/proc/reload(obj/item/ammo_box/magazine/AM, mob/user as mob) - user.drop_item_ground(AM) - magazine = AM - magazine.loc = src - playsound(src, magin_sound, 50, 1) - chamber_round() - AM.update_icon() - update_icon() - return -/obj/item/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob, params) +/obj/item/gun/projectile/proc/reload(obj/item/ammo_box/magazine/AM, mob/user) + user.drop_item_ground(AM) + magazine = AM + magazine.loc = src + playsound(src, magin_sound, 50, 1) + chamber_round() + update_weight() + AM.update_icon() + update_icon() + + +/obj/item/gun/projectile/attackby(obj/item/A, mob/user, params) if(istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A if(istype(AM, mag_type)) @@ -129,13 +157,14 @@ return ..() -/obj/item/gun/projectile/attack_self(mob/living/user as mob) +/obj/item/gun/projectile/attack_self(mob/living/user) var/obj/item/ammo_casing/AC = chambered //Find chambered round if(magazine) magazine.loc = get_turf(loc) user.put_in_hands(magazine) magazine.update_icon() magazine = null + update_weight() to_chat(user, "You pull the magazine out of \the [src]!") playsound(src, magout_sound, 50, 1) else if(chambered) @@ -153,12 +182,12 @@ . = ..() . += "Has [get_ammo()] round\s remaining." -/obj/item/gun/projectile/proc/get_ammo(countchambered = 1) +/obj/item/gun/projectile/proc/get_ammo(countchambered = TRUE, countempties = TRUE) var/boolets = 0 //mature var names for mature people if(chambered && countchambered) boolets++ if(magazine) - boolets += magazine.ammo_count() + boolets += magazine.ammo_count(countempties) return boolets /obj/item/gun/projectile/suicide_act(mob/user) @@ -192,19 +221,17 @@ user.visible_message("\The [src] goes off!", "\The [src] goes off in your face!") return - if(do_after(user, 30, target = src)) + if(do_after(user, 3 SECONDS, target = src)) if(sawn_state == SAWN_OFF) return user.visible_message("[user] shortens \the [src]!", "You shorten \the [src].") - name = "sawn-off [name]" - desc = sawn_desc w_class = WEIGHT_CLASS_NORMAL item_state = "gun"//phil235 is it different with different skin? slot_flags &= ~SLOT_BACK //you can't sling it on your back slot_flags |= SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) sawn_state = SAWN_OFF - update_icon() - return 1 + update_appearance() + return TRUE // Sawing guns related proc /obj/item/gun/projectile/proc/blow_up(mob/user) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 033a687f040..f76495b0d15 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -9,22 +9,30 @@ fire_delay = 2 actions_types = list(/datum/action/item_action/toggle_firemode) -/obj/item/gun/projectile/automatic/update_icon() - ..() - overlays.Cut() + +/obj/item/gun/projectile/automatic/update_icon_state() + icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" + + +/obj/item/gun/projectile/automatic/update_overlays() + . = ..() if(!select) - overlays += "[initial(icon_state)]semi" + . += "[initial(icon_state)]semi" if(select == 1) - overlays += "[initial(icon_state)]burst" - icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" - if(bayonet && can_bayonet) - overlays += knife_overlay + . += "[initial(icon_state)]burst" + + if(gun_light && gun_light_overlay) + var/iconF = gun_light_overlay + if(gun_light.on) + iconF = "[gun_light_overlay]_on" + . += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) -/obj/item/gun/projectile/automatic/attackby(var/obj/item/A as obj, mob/user as mob, params) + +/obj/item/gun/projectile/automatic/attackby(obj/item/A, mob/user, params) . = ..() if(.) if(alarmed) // Did the empty clip alarm go off already? - alarmed = 0 // Reset the alarm once a magazine is loaded + alarmed = FALSE // Reset the alarm once a magazine is loaded return if(istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A @@ -101,17 +109,20 @@ knife_x_offset = 26 knife_y_offset = 12 -/obj/item/gun/projectile/automatic/c20r/New() - ..() + +/obj/item/gun/projectile/automatic/c20r/Initialize() + . = ..() update_icon() -/obj/item/gun/projectile/automatic/c20r/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) + +/obj/item/gun/projectile/automatic/c20r/afterattack(atom/target, mob/living/user, flag) ..() empty_alarm() -/obj/item/gun/projectile/automatic/c20r/update_icon() - ..() - icon_state = "c20r[magazine ? "-[CEILING(get_ammo(0)/4, 1)*4]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" + +/obj/item/gun/projectile/automatic/c20r/update_icon_state() + icon_state = "c20r[magazine ? "-[CEILING(get_ammo(FALSE)/4, 1)*4]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" + //WT550// /obj/item/gun/projectile/automatic/wt550 @@ -130,22 +141,19 @@ can_bayonet = TRUE knife_x_offset = 25 knife_y_offset = 12 + gun_light_overlay = "wt-light" -/obj/item/gun/projectile/automatic/wt550/update_icon() - ..() - icon_state = "wt550[magazine ? "-[CEILING(get_ammo(0)/4, 1)*4]" : ""]" - if(gun_light) - var/iconF = "wt-light" - if(gun_light.on) - iconF = "wt-light-on" - overlays += image(icon = icon, icon_state = iconF, pixel_x = 0) +/obj/item/gun/projectile/automatic/wt550/update_icon_state() + icon_state = "wt550[magazine ? "-[CEILING(get_ammo(FALSE)/4, 1)*4]" : ""]" -/obj/item/gun/projectile/automatic/wt550/ui_action_click(var/owner, var/action_type) - if(..()) return TRUE - if (action_type == /datum/action/item_action/toggle_gunlight) - toggle_gunlight() - return TRUE + +/obj/item/gun/projectile/automatic/wt550/ui_action_click(owner, action_type) + if(..()) + return TRUE + if(action_type == /datum/action/item_action/toggle_gunlight) + toggle_gunlight() + return TRUE //"SP-91-RC// /obj/item/gun/projectile/automatic/sp91rc @@ -158,31 +166,25 @@ magin_sound = 'sound/weapons/gun_interactions/batrifle_magin.ogg' magout_sound = 'sound/weapons/gun_interactions/batrifle_magout.ogg' fire_delay = 2 - can_suppress = 0 - can_flashlight = 1 + can_suppress = FALSE + can_flashlight = TRUE burst_size = 3 can_bayonet = FALSE + gun_light_overlay = "SP-91-RC-light" -/obj/item/gun/projectile/automatic/sp91rc/update_icon() - ..() - icon_state = "SP-91-RC[magazine ? "-[CEILING(get_ammo(0)/5, 1)*5]" : ""]" - item_state = "SP-91-RC[magazine ? "-[get_ammo(0) ? "20" : "0"]" : ""]" - if(gun_light) - var/iconF = "SP-91-RC-light" - if(gun_light.on) - iconF = "SP-91-RC-light-on" - overlays += image(icon = icon, icon_state = iconF, pixel_x = 0) +/obj/item/gun/projectile/automatic/sp91rc/update_icon_state() + icon_state = "SP-91-RC[magazine ? "-[CEILING(get_ammo(FALSE)/5, 1)*5]" : ""]" + item_state = "SP-91-RC[magazine ? "-[get_ammo(FALSE) ? "20" : "0"]" : ""]" -/obj/item/gun/projectile/automatic/sp91rc/attackby(var/obj/item/A, mob/user, params) - . = .. () - update_equipped_item() -/obj/item/gun/projectile/automatic/sp91rc/ui_action_click(var/owner, var/action_type) - if(..()) return TRUE - if (action_type == /datum/action/item_action/toggle_gunlight) - toggle_gunlight() - return TRUE +/obj/item/gun/projectile/automatic/sp91rc/ui_action_click(owner, action_type) + if(..()) + return TRUE + if(action_type == /datum/action/item_action/toggle_gunlight) + toggle_gunlight() + return TRUE + //Type-U3 Uzi// /obj/item/gun/projectile/automatic/mini_uzi @@ -210,19 +212,21 @@ burst_size = 3 fire_delay = 2 -/obj/item/gun/projectile/automatic/m90/New() - ..() + +/obj/item/gun/projectile/automatic/m90/Initialize(mapload) + . = ..() underbarrel = new /obj/item/gun/projectile/revolver/grenadelauncher(src) update_icon() -/obj/item/gun/projectile/automatic/m90/afterattack(var/atom/target, var/mob/living/user, flag, params) + +/obj/item/gun/projectile/automatic/m90/afterattack(atom/target, mob/living/user, flag, params) if(select == 0) underbarrel.afterattack(target, user, flag, params) else ..() return -/obj/item/gun/projectile/automatic/m90/attackby(var/obj/item/A, mob/user, params) +/obj/item/gun/projectile/automatic/m90/attackby(obj/item/A, mob/user, params) if(istype(A, /obj/item/ammo_casing)) if(istype(A, underbarrel.magazine.ammo_type)) underbarrel.attack_self() @@ -230,21 +234,25 @@ else return ..() -/obj/item/gun/projectile/automatic/m90/update_icon() - ..() - overlays.Cut() - switch(select) - if(1) - overlays += "[initial(icon_state)]burst" - if(0) - overlays += "[initial(icon_state)]gren" + +/obj/item/gun/projectile/automatic/m90/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "" : "-e"][suppressed ? "-suppressed" : ""]" if(magazine) - overlays += image(icon = icon, icon_state = "m90-[CEILING(get_ammo(0)/6, 1)*6]") - item_state = "m90-[CEILING(get_ammo(0)/7.5, 1)]" + item_state = "m90-[CEILING(get_ammo(FALSE)/7.5, 1)]" else item_state = "m90-0" - return + + +/obj/item/gun/projectile/automatic/m90/update_overlays() + . = ..() + if(magazine) + . += image(icon = icon, icon_state = "m90-[CEILING(get_ammo(FALSE)/6, 1)*6]") + switch(select) + if(0) + . += "[initial(icon_state)]gren" + if(1) + . += "[initial(icon_state)]burst" + /obj/item/gun/projectile/automatic/m90/burst_select() var/mob/living/carbon/human/user = usr @@ -326,14 +334,19 @@ fire_delay = 0 actions_types = null -/obj/item/gun/projectile/automatic/shotgun/bulldog/New() - ..() - update_icon() -/obj/item/gun/projectile/automatic/shotgun/bulldog/proc/update_magazine() +/obj/item/gun/projectile/automatic/shotgun/bulldog/update_icon_state() + icon_state = "bulldog[chambered ? "" : "-e"]" + + +/obj/item/gun/projectile/automatic/shotgun/bulldog/update_overlays() + . = ..() + if(magazine) + . += "[magazine.icon_state]" + + +/obj/item/gun/projectile/automatic/shotgun/bulldog/update_weight() if(magazine) - overlays.Cut() - overlays += "[magazine.icon_state]" if(istype(magazine, /obj/item/ammo_box/magazine/m12g/XtrLrg)) w_class = WEIGHT_CLASS_BULKY else @@ -341,21 +354,17 @@ else w_class = WEIGHT_CLASS_NORMAL -/obj/item/gun/projectile/automatic/shotgun/bulldog/update_icon() - overlays.Cut() - update_magazine() - icon_state = "bulldog[chambered ? "" : "-e"]" -/obj/item/gun/projectile/automatic/shotgun/bulldog/attackby(var/obj/item/A as obj, mob/user as mob, params) - if(istype(A, /obj/item/ammo_box/magazine/m12g/XtrLrg)) - if(istype(loc, /obj/item/storage)) // To prevent inventory exploits - var/obj/item/storage/Strg = loc - if(Strg.max_w_class < WEIGHT_CLASS_BULKY) - to_chat(user, "You can't reload [src], with a XL mag, while it's in a normal bag.") - return +/obj/item/gun/projectile/automatic/shotgun/bulldog/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/ammo_box/magazine/m12g/XtrLrg) && isstorage(loc)) // To prevent inventory exploits + var/obj/item/storage/storage = loc + if(storage.max_w_class < WEIGHT_CLASS_BULKY) + to_chat(user, span_warning("You can't reload [src], with a XL mag, while it's in a normal bag.")) + return return ..() -/obj/item/gun/projectile/automatic/shotgun/bulldog/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) + +/obj/item/gun/projectile/automatic/shotgun/bulldog/afterattack(atom/target, mob/living/user, flag) ..() empty_alarm() @@ -397,10 +406,11 @@ burst_size = 2 can_suppress = 0 -/obj/item/gun/projectile/automatic/cats/update_icon() - ..() + +/obj/item/gun/projectile/automatic/cats/update_icon_state() icon_state = "tla_cats[magazine ? "" : "-e"]" + /obj/item/gun/projectile/automatic/cats/examine(mob/user) . = ..() if(Adjacent(user)) @@ -424,9 +434,8 @@ can_suppress = 0 burst_size = 2 -/obj/item/gun/projectile/automatic/lasercarbine/update_icon() - ..() - icon_state = "lasercarbine[magazine ? "-[CEILING(get_ammo(0)/5, 1)*5]" : ""]" +/obj/item/gun/projectile/automatic/lasercarbine/update_icon_state() + icon_state = "lasercarbine[magazine ? "-[CEILING(get_ammo(FALSE)/5, 1)*5]" : ""]" /obj/item/gun/projectile/automatic/lr30 name = "\improper LR-30 Laser Rifle" @@ -443,9 +452,8 @@ burst_size = 1 actions_types = null -/obj/item/gun/projectile/automatic/lr30/update_icon() - ..() - icon_state = "lr30[magazine ? "-[CEILING(get_ammo(0)/3, 1)*3]" : ""]" +/obj/item/gun/projectile/automatic/lr30/update_icon_state() + icon_state = "lr30[magazine ? "-[CEILING(get_ammo(FALSE)/3, 1)*3]" : ""]" //Semi-Machine Gun SFG @@ -457,21 +465,19 @@ mag_type = /obj/item/ammo_box/magazine/sfg9mm burst_size = 3 can_flashlight = TRUE + gun_light_overlay = "sfg-light" -/obj/item/gun/projectile/automatic/sfg/update_icon() - ..() + +/obj/item/gun/projectile/automatic/sfg/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "" : "-e"][suppressed ? "-suppressed" : ""]" - if(gun_light) - var/iconF = "sfg-light" - if(gun_light.on) - iconF = "sfg-light-on" - overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) -/obj/item/gun/projectile/automatic/sfg/ui_action_click(var/owner, var/action_type) - if(..()) return TRUE - if (action_type == /datum/action/item_action/toggle_gunlight) - toggle_gunlight() - return TRUE + +/obj/item/gun/projectile/automatic/sfg/ui_action_click(owner, action_type) + if(..()) + return TRUE + if(action_type == /datum/action/item_action/toggle_gunlight) + toggle_gunlight() + return TRUE //Aussec Armory M-52 diff --git a/code/modules/projectiles/guns/projectile/bombarda.dm b/code/modules/projectiles/guns/projectile/bombarda.dm index bf2d01cf5e2..61f4fadb796 100644 --- a/code/modules/projectiles/guns/projectile/bombarda.dm +++ b/code/modules/projectiles/guns/projectile/bombarda.dm @@ -24,12 +24,10 @@ A.update_icon() update_icon() -/obj/item/gun/projectile/bombarda/update_icon() - . = ..() - if(!chambered) - icon_state = "bombarda_open" - else - icon_state = "bombarda" + +/obj/item/gun/projectile/bombarda/update_icon_state() + icon_state = "bombarda[chambered ? "" : "_open"]" + /obj/item/gun/projectile/bombarda/process_chamber(eject_casing, empty_chamber) var/obj/item/ammo_casing/AC = chambered @@ -82,11 +80,11 @@ remove_sound = 'sound/weapons/bombarda/open.ogg' load_sound = 'sound/weapons/bombarda/load.ogg' -/obj/item/ammo_box/magazine/internal/bombarda/New() - ..() +/obj/item/ammo_box/magazine/internal/bombarda/Initialize(mapload) + . = ..() QDEL_LIST(stored_ammo) //not supposed to have initial ammo. -/obj/item/ammo_box/magazine/internal/bombarda/ammo_count(countempties = 1) +/obj/item/ammo_box/magazine/internal/bombarda/ammo_count(countempties = TRUE) if(!countempties) var/boolets = 0 for(var/obj/item/ammo_casing/bullet in stored_ammo) diff --git a/code/modules/projectiles/guns/projectile/bow.dm b/code/modules/projectiles/guns/projectile/bow.dm index ed8a6a70dbd..a4418fbcf5d 100644 --- a/code/modules/projectiles/guns/projectile/bow.dm +++ b/code/modules/projectiles/guns/projectile/bow.dm @@ -10,7 +10,7 @@ weapon_weight = WEAPON_HEAVY trigger_guard = TRIGGER_GUARD_NONE var/draw_sound = 'sound/weapons/draw_bow.ogg' - var/ready_to_fire = 0 + var/ready_to_fire = FALSE var/slowdown_when_ready = 2 /obj/item/gun/projectile/bow/ashen //better than wooden @@ -23,20 +23,25 @@ force = 10 slowdown_when_ready = 1 -/obj/item/gun/projectile/bow/update_icon() + +/obj/item/gun/projectile/bow/update_icon_state() if(magazine.ammo_count() && !ready_to_fire) icon_state = "[initial(icon_state)]_loaded" else if(ready_to_fire) icon_state = "[initial(icon_state)]_firing" - slowdown = slowdown_when_ready else icon_state = initial(icon_state) - slowdown = initial(slowdown) + + +/obj/item/gun/projectile/bow/proc/update_slowdown() + slowdown = ready_to_fire ? slowdown_when_ready : initial(slowdown) + /obj/item/gun/projectile/bow/dropped(mob/user, silent = FALSE) if(magazine && magazine.ammo_count()) magazine.empty_magazine() ready_to_fire = FALSE + update_slowdown() update_icon() . = ..() @@ -45,10 +50,10 @@ if(!ready_to_fire && magazine.ammo_count()) ready_to_fire = TRUE playsound(user, draw_sound, 100, 1) - update_icon() else ready_to_fire = FALSE - update_icon() + update_slowdown() + update_icon() /obj/item/gun/projectile/bow/attackby(obj/item/A, mob/user, params) var/num_loaded = magazine.attackby(A, user, params, 1) @@ -68,6 +73,7 @@ /obj/item/gun/projectile/bow/process_chamber(eject_casing = 0, empty_chamber = 1) . = ..() ready_to_fire = FALSE + update_slowdown() update_icon() // ammo @@ -134,8 +140,8 @@ new /obj/item/ammo_casing/caseless/arrow(src) update_icon() -/obj/item/storage/backpack/quiver/update_icon() - if(length(contents) > 0) +/obj/item/storage/backpack/quiver/update_icon_state() + if(length(contents)) icon_state = "quiver_[clamp(length(contents),1,5)]" else icon_state = initial(icon_state) diff --git a/code/modules/projectiles/guns/projectile/launchers.dm b/code/modules/projectiles/guns/projectile/launchers.dm index 1b06c3e7538..c6d9f199ad2 100644 --- a/code/modules/projectiles/guns/projectile/launchers.dm +++ b/code/modules/projectiles/guns/projectile/launchers.dm @@ -46,10 +46,10 @@ /obj/item/gun/projectile/automatic/gyropistol/process_chamber(eject_casing = 0, empty_chamber = 1) ..() -/obj/item/gun/projectile/automatic/gyropistol/update_icon() - ..() + +/obj/item/gun/projectile/automatic/gyropistol/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "loaded" : ""]" - return + /obj/item/gun/projectile/automatic/speargun name = "kinetic speargun" @@ -67,7 +67,7 @@ select = 0 actions_types = null -/obj/item/gun/projectile/automatic/speargun/update_icon() +/obj/item/gun/projectile/automatic/speargun/update_icon_state() return /obj/item/gun/projectile/automatic/speargun/attack_self() @@ -136,10 +136,16 @@ update_icon() return -/obj/item/gun/projectile/revolver/rocketlauncher/update_icon() - cut_overlays() + +/obj/item/gun/projectile/revolver/rocketlauncher/update_icon_state() + return + + +/obj/item/gun/projectile/revolver/rocketlauncher/update_overlays() + . = ..() if(!chambered) - add_overlay("[icon_state]_empty") + . += "[icon_state]_empty" + /obj/item/gun/projectile/revolver/rocketlauncher/suicide_act(mob/user) user.visible_message("[user] aims [src] at the ground! It looks like [user.p_theyre()] performing a sick rocket jump!") diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index bc831a96392..c60f2c20de9 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -10,15 +10,15 @@ fire_sound = 'sound/weapons/gunshots/1stechkin.ogg' magin_sound = 'sound/weapons/gun_interactions/pistol_magin.ogg' magout_sound = 'sound/weapons/gun_interactions/pistol_magout.ogg' - can_suppress = 1 + can_suppress = TRUE burst_size = 1 fire_delay = 0 actions_types = null -/obj/item/gun/projectile/automatic/pistol/update_icon() - ..() + +/obj/item/gun/projectile/automatic/pistol/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" - return + //M1911// /obj/item/gun/projectile/automatic/pistol/m1911 @@ -28,7 +28,7 @@ w_class = WEIGHT_CLASS_NORMAL mag_type = /obj/item/ammo_box/magazine/m45 fire_sound = 'sound/weapons/gunshots/1colt.ogg' - can_suppress = 0 + can_suppress = FALSE //Enforcer// /obj/item/gun/projectile/automatic/pistol/enforcer @@ -41,42 +41,42 @@ can_suppress = TRUE unique_reskin = TRUE can_flashlight = TRUE + gun_light_overlay = "enforcer-light" + + +/obj/item/gun/projectile/automatic/pistol/enforcer/update_gun_skins() + add_skin("Grey slide", "enforcer_grey") + add_skin("Red slide", "enforcer_red") + add_skin("Green slide", "enforcer_green") + add_skin("Tan slide", "enforcer_tan") + add_skin("Black slide", "enforcer_black") + add_skin("Green Handle", "enforcer_greengrip") + add_skin("Tan Handle", "enforcer_tangrip") + add_skin("Red Handle", "enforcer_redgrip") -/obj/item/gun/projectile/automatic/pistol/enforcer/New() - ..() - options["Grey slide"] = "enforcer_grey" - options["Red slide"] = "enforcer_red" - options["Green slide"] = "enforcer_green" - options["Tan slide"] = "enforcer_tan" - options["Black slide"] = "enforcer_black" - options["Green Handle"] = "enforcer_greengrip" - options["Tan Handle"] = "enforcer_tangrip" - options["Red Handle"] = "enforcer_redgrip" - options["Cancel"] = null - -/obj/item/gun/projectile/automatic/pistol/enforcer/update_icon() - ..() + +/obj/item/gun/projectile/automatic/pistol/enforcer/update_icon_state() if(current_skin) icon_state = "[current_skin][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" - overlays.Cut() + + +/obj/item/gun/projectile/automatic/pistol/enforcer/update_overlays() + . = ..() if(suppressed) - overlays += image(icon = icon, icon_state = "enforcer_supp", pixel_x = 4) - if(gun_light) - var/iconF = "Enforcer_light" - if(gun_light.on) - iconF = "Enforcer_light-on" - overlays += image(icon = icon, icon_state = iconF, pixel_x = 0) + . += image(icon = icon, icon_state = "enforcer_supp", pixel_x = 4) + /obj/item/gun/projectile/automatic/pistol/enforcer/ui_action_click() toggle_gunlight() /obj/item/gun/projectile/automatic/pistol/enforcer/lethal -/obj/item/gun/projectile/automatic/pistol/enforcer/lethal/New() +/obj/item/gun/projectile/automatic/pistol/enforcer/lethal/Initialize(mapload) magazine = new/obj/item/ammo_box/magazine/enforcer/lethal - ..() + . = ..() + //СБшный инфорсер// /obj/item/gun/projectile/automatic/pistol/enforcer/security @@ -97,92 +97,59 @@ can_suppress = TRUE unique_reskin = TRUE can_flashlight = TRUE + gun_light_overlay = "sp8-light" -/obj/item/gun/projectile/automatic/pistol/sp8/New() - ..() - options["Black"] = "sp8_black" - options["Red"] = "sp8_red" - options["Green"] = "sp8_green" - options["Olive"] = "sp8_olive" - options["Yellow"] = "sp8_yellow" - options["White"] = "sp8_white" - options["Cancel"] = null - -/obj/item/gun/projectile/automatic/pistol/sp8/update_icon() - ..() + +/obj/item/gun/projectile/automatic/pistol/sp8/update_gun_skins() + add_skin("Black", "sp8_black") + add_skin("Red", "sp8_red") + add_skin("Green", "sp8_green") + add_skin("Olive", "sp8_olive") + add_skin("Yellow", "sp8_yellow") + add_skin("White", "sp8_white") + + +/obj/item/gun/projectile/automatic/pistol/sp8/update_icon_state() if(current_skin) icon_state = "[current_skin][chambered ? "" : "-e"]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" - overlays.Cut() + + +/obj/item/gun/projectile/automatic/pistol/sp8/update_overlays() + . = ..() if(suppressed) - overlays += image(icon = icon, icon_state = "sp8_supp") - if(gun_light) - var/iconF = "sp8-light" - if(gun_light.on) - iconF = "sp8-light-on" - overlays += image(icon = icon, icon_state = iconF, pixel_x = 0) + . += image(icon = icon, icon_state = "sp8_supp") + /obj/item/gun/projectile/automatic/pistol/sp8/ui_action_click() toggle_gunlight() -/obj/item/gun/projectile/automatic/pistol/sp8t + +/obj/item/gun/projectile/automatic/pistol/sp8/sp8t name = "SP-8-T" - can_suppress = FALSE icon_state = "sp8t_dust" desc = "Новейшая разработка для сил защиты активов." - force = 10 - mag_type = /obj/item/ammo_box/magazine/sp8 fire_sound = 'sound/weapons/gunshots/sp8t.ogg' + can_suppress = FALSE unique_reskin = TRUE can_flashlight = TRUE -/obj/item/gun/projectile/automatic/pistol/sp8t/New() - ..() - options["Dust"] = "sp8t_dust" - options["Sea"] = "sp8t_sea" - options["Cancel"] = null -/obj/item/gun/projectile/automatic/pistol/sp8t/update_icon() - ..() - if(current_skin) - icon_state = "[current_skin][chambered ? "" : "-e"]" - else - icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" - overlays.Cut() - if(suppressed) - overlays += image(icon = icon, icon_state = "sp8_supp") - if(gun_light) - var/iconF = "sp8-light" - if(gun_light.on) - iconF = "sp8-light-on" - overlays += image(icon = icon, icon_state = iconF, pixel_x = 0) - -/obj/item/gun/projectile/automatic/pistol/sp8t/ui_action_click() - toggle_gunlight() +/obj/item/gun/projectile/automatic/pistol/sp8/sp8t/update_gun_skins() + add_skin("Dust", "sp8t_dust") + add_skin("Sea", "sp8t_sea") + -/obj/item/gun/projectile/automatic/pistol/sp8ar +/obj/item/gun/projectile/automatic/pistol/sp8/sp8ar name = "SP-8-AR" desc = "Пистолет сил защиты активов оснащённый ДТК." - can_suppress = FALSE icon_state = "sp8ar" - unique_reskin = FALSE - force = 10 - mag_type = /obj/item/ammo_box/magazine/sp8 fire_sound = 'sound/weapons/gunshots/sp8ar.ogg' + can_suppress = FALSE + unique_reskin = FALSE can_flashlight = TRUE -/obj/item/gun/projectile/automatic/pistol/sp8ar/update_icon() - ..() - if(gun_light) - var/iconF = "sp8-light" - if(gun_light.on) - iconF = "sp8-light-on" - overlays += image(icon = icon, icon_state = iconF, pixel_x = 0) - -/obj/item/gun/projectile/automatic/pistol/sp8ar/ui_action_click() - toggle_gunlight() - //Desert Eagle// /obj/item/gun/projectile/automatic/pistol/deagle @@ -195,12 +162,13 @@ fire_sound = 'sound/weapons/gunshots/1deagle.ogg' magin_sound = 'sound/weapons/gun_interactions/hpistol_magin.ogg' magout_sound = 'sound/weapons/gun_interactions/hpistol_magout.ogg' - can_suppress = 0 + can_suppress = FALSE + -/obj/item/gun/projectile/automatic/pistol/deagle/update_icon() - ..() +/obj/item/gun/projectile/automatic/pistol/deagle/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "" : "-e"]" + /obj/item/gun/projectile/automatic/pistol/deagle/gold desc = "A gold plated desert eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." icon_state = "deagleg" @@ -219,7 +187,7 @@ w_class = WEIGHT_CLASS_NORMAL origin_tech = "combat=3;materials=2;syndicate=3" mag_type = /obj/item/ammo_box/magazine/pistolm9mm - can_suppress = 1 + can_suppress = TRUE burst_size = 3 fire_delay = 2 actions_types = list(/datum/action/item_action/toggle_firemode) diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 5b6adb143e6..39df8798abe 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -6,8 +6,8 @@ origin_tech = "combat=3;materials=2" fire_sound = 'sound/weapons/gunshots/1rev.ogg' -/obj/item/gun/projectile/revolver/New() - ..() +/obj/item/gun/projectile/revolver/Initialize(mapload) + . = ..() if(!istype(magazine, /obj/item/ammo_box/magazine/internal/cylinder)) verbs -= /obj/item/gun/projectile/revolver/verb/spin @@ -40,7 +40,7 @@ /obj/item/gun/projectile/revolver/attack_self(mob/living/user) var/num_unloaded = 0 chambered = null - while(get_ammo() > 0) + while(get_ammo(FALSE) > 0) var/obj/item/ammo_casing/CB CB = magazine.get_round(0) if(CB) @@ -73,20 +73,14 @@ else verbs -= /obj/item/gun/projectile/revolver/verb/spin + /obj/item/gun/projectile/revolver/can_shoot() - return get_ammo(0,0) + return get_ammo(FALSE, FALSE) -/obj/item/gun/projectile/revolver/get_ammo(countchambered = 0, countempties = 1) - var/boolets = 0 //mature var names for mature people - if(chambered && countchambered) - boolets++ - if(magazine) - boolets += magazine.ammo_count(countempties) - return boolets /obj/item/gun/projectile/revolver/examine(mob/user) . = ..() - . += span_notice("[get_ammo(0,0)] of those are live rounds") + . += span_notice("[get_ammo(FALSE, FALSE)] of those are live rounds") /obj/item/gun/projectile/revolver/detective desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds." @@ -97,16 +91,15 @@ unique_rename = TRUE unique_reskin = TRUE -/obj/item/gun/projectile/revolver/detective/New() - ..() - options["The Original"] = "detective" - options["Leopard Spots"] = "detective_leopard" - options["Black Panther"] = "detective_panther" - options["White Gold "] = "detective_gold" - options["The Peacemaker"] = "detective_peacemaker" - options["Gold Wood"] = "detective_gold_alt" - options["Silver"] = "detective_silver" - options["Cancel"] = null + +/obj/item/gun/projectile/revolver/detective/update_gun_skins() + add_skin("The Original", "detective") + add_skin("Leopard Spots", "detective_leopard") + add_skin("Black Panther", "detective_panther") + add_skin("White Gold", "detective_gold") + add_skin("Gold Wood", "detective_gold_alt") + add_skin("The Peacemaker", "detective_peacemaker") + add_skin("Silver", "detective_silver") /obj/item/gun/projectile/revolver/fingergun //Summoned by the Finger Gun spell, from advanced mimery traitor item @@ -132,8 +125,8 @@ mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38/invisible/fake -/obj/item/gun/projectile/revolver/fingergun/New(loc, new_parent_spell) - ..() +/obj/item/gun/projectile/revolver/fingergun/Initialize(loc, new_parent_spell) + . = ..() parent_spell = new_parent_spell verbs -= /obj/item/gun/projectile/revolver/verb/spin @@ -213,15 +206,15 @@ var/spun = FALSE -/obj/item/gun/projectile/revolver/russian/New() - ..() +/obj/item/gun/projectile/revolver/russian/Initialize(mapload) + . = ..() Spin() update_icon() /obj/item/gun/projectile/revolver/russian/proc/Spin() chambered = null var/random = rand(1, magazine.max_ammo) - if(random <= get_ammo(0,0)) + if(random <= get_ammo(FALSE, FALSE)) chamber_round() spun = TRUE @@ -348,15 +341,15 @@ unique_rename = TRUE unique_reskin = TRUE -/obj/item/gun/projectile/revolver/doublebarrel/New() - ..() - options["Default"] = "dshotgun" - options["Dark Red Finish"] = "dshotgun-d" - options["Ash"] = "dshotgun-f" - options["Faded Grey"] = "dshotgun-g" - options["Maple"] = "dshotgun-l" - options["Rosewood"] = "dshotgun-p" - options["Cancel"] = null + +/obj/item/gun/projectile/revolver/doublebarrel/update_gun_skins() + add_skin("Default", "dshotgun") + add_skin("Dark Red Finish", "dshotgun-d") + add_skin("Ash", "dshotgun-f") + add_skin("Faded Grey", "dshotgun-g") + add_skin("Maple", "dshotgun-l") + add_skin("Rosewood", "dshotgun-p") + /obj/item/gun/projectile/revolver/doublebarrel/attackby(obj/item/A, mob/user, params) if(istype(A, /obj/item/ammo_box/speedloader) || istype(A, /obj/item/ammo_casing)) @@ -376,7 +369,7 @@ /obj/item/gun/projectile/revolver/doublebarrel/attack_self(mob/living/user) var/num_unloaded = 0 - while(get_ammo() > 0) + while(get_ammo(FALSE) > 0) var/obj/item/ammo_casing/CB CB = magazine.get_round(0) chambered = null @@ -421,10 +414,10 @@ else return ..() -/obj/item/gun/projectile/revolver/doublebarrel/improvised/update_icon() - ..() - if(slung && (sawn_state == SAWN_INTACT)) - icon_state = "ishotgunsling" + +/obj/item/gun/projectile/revolver/doublebarrel/improvised/update_icon_state() + icon_state = "ishotgun[slung ? "sling" : sawn_state == SAWN_OFF ? "-sawn" : ""]" + /obj/item/gun/projectile/revolver/doublebarrel/improvised/sawoff(mob/user) . = ..() @@ -459,9 +452,12 @@ /obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/is_crutch() return TRUE -/obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/update_icon() +/obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/update_icon_state() return +/obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/update_overlays() + return list() + /obj/item/gun/projectile/revolver/doublebarrel/improvised/cane/attackby(obj/item/A, mob/user, params) if(istype(A, /obj/item/stack/cable_coil)) return diff --git a/code/modules/projectiles/guns/projectile/saw.dm b/code/modules/projectiles/guns/projectile/saw.dm index 2debf7f8de9..44e0370556e 100644 --- a/code/modules/projectiles/guns/projectile/saw.dm +++ b/code/modules/projectiles/guns/projectile/saw.dm @@ -22,10 +22,12 @@ playsound(src, cover_open ? 'sound/weapons/gun_interactions/sawopen.ogg' : 'sound/weapons/gun_interactions/sawclose.ogg', 50, 1) update_icon() -/obj/item/gun/projectile/automatic/l6_saw/update_icon() - icon_state = "l6[cover_open ? "open" : "closed"][magazine ? CEILING(get_ammo(0)/12.5, 1)*25 : "-empty"][suppressed ? "-suppressed" : ""]" + +/obj/item/gun/projectile/automatic/l6_saw/update_icon_state() + icon_state = "l6[cover_open ? "open" : "closed"][magazine ? CEILING(get_ammo(FALSE)/12.5, 1)*25 : "-empty"][suppressed ? "-suppressed" : ""]" item_state = "l6[cover_open ? "openmag" : "closedmag"]" + /obj/item/gun/projectile/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays if(cover_open) to_chat(user, "[src]'s cover is open! Close it before firing!") @@ -131,8 +133,7 @@ origin_tech = "combat=4" ammo_type = /obj/item/ammo_casing/mm556x45/incen -/obj/item/ammo_box/magazine/mm556x45/update_icon() - ..() +/obj/item/ammo_box/magazine/mm556x45/update_icon_state() icon_state = "a762-[round(ammo_count(),10)]" //casings// diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 854a65a6ec0..9c696c06677 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -27,7 +27,7 @@ /obj/item/gun/projectile/shotgun/process_chamber() - return ..(0, 0) + return ..(FALSE, FALSE) /obj/item/gun/projectile/shotgun/chamber_round() return @@ -115,7 +115,7 @@ user.visible_message("The [src] goes click!", "The [src] you are holding goes click.") if(magazine.ammo_count()) //Spill the mag onto the floor user.visible_message("[user.name] opens [src] up and the shells go goes flying around!", "You open [src] up and the shells go goes flying everywhere!!") - while(get_ammo(0) > 0) + while(get_ammo(FALSE) > 0) var/obj/item/ammo_casing/CB CB = magazine.get_round(0) if(CB) @@ -183,8 +183,7 @@ magazine.max_ammo = 6 update_icon() -/obj/item/gun/projectile/shotgun/riot/update_icon() //Can't use the old proc as it makes it go to riotshotgun-short_sawn - ..() +/obj/item/gun/projectile/shotgun/riot/update_icon_state() //Can't use the old proc as it makes it go to riotshotgun-short_sawn if(current_skin) icon_state = "[current_skin]" else @@ -193,8 +192,8 @@ /obj/item/gun/projectile/shotgun/riot/short mag_type = /obj/item/ammo_box/magazine/internal/shot/riot/short -/obj/item/gun/projectile/shotgun/riot/short/New() - ..() +/obj/item/gun/projectile/shotgun/riot/short/Initialize(mapload) + . = ..() post_sawoff() /obj/item/gun/projectile/shotgun/riot/buckshot //comes pre-loaded with buckshot rather than rubber @@ -225,10 +224,14 @@ else pump_unload(M) bolt_open = !bolt_open - icon_state = "moistnugget_open" - update_icon() //I.E. fix the desc + update_icon(UPDATE_ICON_STATE) return 1 + +/obj/item/gun/projectile/shotgun/boltaction/update_icon_state() + icon_state = "[initial(icon_state)][bolt_open ? "-open" : ""]" + + /obj/item/gun/projectile/shotgun/blow_up(mob/user) . = 0 if(chambered && chambered.BB) @@ -252,8 +255,8 @@ mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted can_bayonet = FALSE -/obj/item/gun/projectile/shotgun/boltaction/enchanted/New() - ..() +/obj/item/gun/projectile/shotgun/boltaction/enchanted/Initialize(mapload) + . = ..() bolt_open = 1 pump() @@ -328,8 +331,8 @@ var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine fire_sound = 'sound/weapons/gunshots/1shotgun_auto.ogg' -/obj/item/gun/projectile/shotgun/automatic/dual_tube/New() - ..() +/obj/item/gun/projectile/shotgun/automatic/dual_tube/Initialize(mapload) + . = ..() if(!alternate_magazine) alternate_magazine = new mag_type(src) diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 10c7f420836..77975abedd1 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -12,8 +12,8 @@ fire_delay = 40 burst_size = 1 origin_tech = "combat=7" - can_unsuppress = 1 - can_suppress = 1 + can_unsuppress = TRUE + can_suppress = TRUE w_class = WEIGHT_CLASS_NORMAL zoomable = TRUE zoom_amt = 7 //Long range, enough to see in front of you, but no tiles behind you. @@ -36,14 +36,10 @@ QDEL_NULL(magazine) magazine = new /obj/item/ammo_box/magazine/sniper_rounds/compact/penetrator(src) -/obj/item/gun/projectile/automatic/sniper_rifle/update_icon() - if(magazine) - icon_state = "sniper-mag" - else - icon_state = "sniper" - ..() - icon_state = "[initial(icon_state)][magazine ? "" : "-e"][suppressed ? "-suppressed" : ""]" - return + +/obj/item/gun/projectile/automatic/sniper_rifle/update_icon_state() + icon_state = "[initial(icon_state)][magazine ? "-mag" : ""][suppressed ? "-suppressed" : ""]" + /obj/item/gun/projectile/automatic/sniper_rifle/compact //holds very little ammo, lacks zooming, and bullets are primarily damage dealers, but the gun lacks the downsides of the full size rifle name = "compact sniper rifle" @@ -57,11 +53,6 @@ can_suppress = FALSE zoomable = FALSE -/obj/item/gun/projectile/automatic/sniper_rifle/compact/update_icon() - if(magazine) - icon_state = "snipercompact-mag" - else - icon_state = "snipercompact" //Normal Boolets /obj/item/ammo_box/magazine/sniper_rounds @@ -72,7 +63,7 @@ max_ammo = 5 caliber = ".50" -/obj/item/ammo_box/magazine/sniper_rounds/update_icon() +/obj/item/ammo_box/magazine/sniper_rounds/update_icon_state() if(ammo_count()) icon_state = "[initial(icon_state)]-ammo" else @@ -121,7 +112,7 @@ /obj/item/projectile/bullet/sniper/soporific armour_penetration = 0 - nodamage = 1 + nodamage = TRUE dismemberment = 0 weaken = 0 breakthings = FALSE @@ -272,13 +263,16 @@ max_ammo = 6 caliber = "foam_force_sniper" -/obj/item/ammo_box/magazine/toy/sniper_rounds/update_icon() - overlays.Cut() +/obj/item/ammo_box/magazine/toy/sniper_rounds/update_icon_state() + return + + +/obj/item/ammo_box/magazine/toy/sniper_rounds/update_overlays() + . = ..() var/ammo = ammo_count() - if(ammo && istype(contents[contents.len], /obj/item/ammo_casing/caseless/foam_dart/sniper/riot)) - overlays += image('icons/obj/weapons/ammo.dmi', icon_state = ".50mag-r") + if(ammo && istype(contents[length(contents)], /obj/item/ammo_casing/caseless/foam_dart/sniper/riot)) + . += ".50mag-r" else if(ammo) - overlays += image('icons/obj/weapons/ammo.dmi', icon_state = ".50mag-f") - else - icon_state = "[initial(icon_state)]" + . += ".50mag-f" + diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm index 85de8d94e7e..92f29176be5 100644 --- a/code/modules/projectiles/guns/projectile/toy.dm +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -9,14 +9,12 @@ force = 0 throwforce = 0 burst_size = 3 - can_suppress = 0 - clumsy_check = 0 - needs_permit = 0 + can_suppress = FALSE + clumsy_check = FALSE + needs_permit = FALSE pickup_sound = 'sound/items/handling/generic_pickup1.ogg' drop_sound = 'sound/items/handling/generic_drop3.ogg' -/obj/item/gun/projectile/automatic/toy/process_chamber(eject_casing = 0, empty_chamber = 1) - ..() /obj/item/gun/projectile/automatic/toy/pistol name = "foam force pistol" @@ -26,23 +24,26 @@ can_holster = TRUE mag_type = /obj/item/ammo_box/magazine/toy/pistol fire_sound = 'sound/weapons/gunshots/gunshot.ogg' - can_suppress = 0 + can_suppress = FALSE burst_size = 1 fire_delay = 0 actions_types = null -/obj/item/gun/projectile/automatic/toy/pistol/update_icon() - ..() + +/obj/item/gun/projectile/automatic/toy/pistol/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" + /obj/item/gun/projectile/automatic/toy/pistol/riot name = "foam force riot pistol" desc = "RIOT! Ages 8 and up." mag_type = /obj/item/ammo_box/magazine/toy/pistol/riot -/obj/item/gun/projectile/automatic/toy/pistol/riot/New() + +/obj/item/gun/projectile/automatic/toy/pistol/riot/Initialize(mapload) magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src) - ..() + . = ..() + /obj/item/gun/projectile/automatic/toy/pistol/enforcer name = "foam enforcer" @@ -50,15 +51,8 @@ icon_state = "enforcer" mag_type = /obj/item/ammo_box/magazine/toy/enforcer can_flashlight = TRUE + gun_light_overlay = "enforcer-light" -/obj/item/gun/projectile/automatic/toy/pistol/enforcer/update_icon() - ..() - overlays.Cut() - if(gun_light) - var/iconF = "Enforcer_light" - if(gun_light.on) - iconF = "Enforcer_light-on" - overlays += image(icon = 'icons/obj/weapons/projectile.dmi', icon_state = iconF, pixel_x = 0) /obj/item/gun/projectile/automatic/toy/pistol/enforcer/ui_action_click() toggle_gunlight() @@ -72,8 +66,8 @@ throwforce = 0 origin_tech = null mag_type = /obj/item/ammo_box/magazine/internal/shot/toy - clumsy_check = 0 - needs_permit = 0 + clumsy_check = FALSE + needs_permit = FALSE pickup_sound = 'sound/items/handling/generic_pickup1.ogg' drop_sound = 'sound/items/handling/generic_drop3.ogg' @@ -97,8 +91,8 @@ desc = "A bullpup two-round burst toy SMG, designated 'C-20r'. Ages 8 and up." icon = 'icons/obj/weapons/toy.dmi' fire_sound = 'sound/weapons/gunshots/gunshot_smg.ogg' - can_suppress = 0 - needs_permit = 0 + can_suppress = FALSE + needs_permit = FALSE mag_type = /obj/item/ammo_box/magazine/toy/smgm45 pickup_sound = 'sound/items/handling/generic_pickup1.ogg' drop_sound = 'sound/items/handling/generic_drop3.ogg' @@ -106,16 +100,13 @@ /obj/item/gun/projectile/automatic/c20r/toy/riot mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot -/obj/item/gun/projectile/automatic/c20r/toy/process_chamber(eject_casing = 0, empty_chamber = 1) - ..() - /obj/item/gun/projectile/automatic/l6_saw/toy name = "donksoft LMG" desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." icon = 'icons/obj/weapons/toy.dmi' fire_sound = 'sound/weapons/gunshots/gunshot_smg.ogg' - can_suppress = 0 - needs_permit = 0 + can_suppress = FALSE + needs_permit = FALSE mag_type = /obj/item/ammo_box/magazine/toy/m762 pickup_sound = 'sound/items/handling/generic_pickup1.ogg' drop_sound = 'sound/items/handling/generic_drop3.ogg' @@ -123,9 +114,6 @@ /obj/item/gun/projectile/automatic/l6_saw/toy/riot mag_type = /obj/item/ammo_box/magazine/toy/m762/riot -/obj/item/gun/projectile/automatic/l6_saw/toy/process_chamber(eject_casing = 0, empty_chamber = 1) - ..() - /obj/item/gun/projectile/shotgun/toy/tommygun name = "tommy gun" desc = "Looks almost like the real thing! Great for practicing Drive-bys. Ages 8 and up." @@ -148,11 +136,3 @@ pickup_sound = 'sound/items/handling/generic_pickup1.ogg' drop_sound = 'sound/items/handling/generic_drop3.ogg' -/obj/item/gun/projectile/automatic/sniper_rifle/toy/update_icon() - if(magazine) - icon_state = "sniper-mag" - else - icon_state = "sniper" - -/obj/item/gun/projectile/automatic/sniper_rifle/toy/process_chamber(eject_casing = 0, empty_chamber = 1) - ..() diff --git a/code/modules/projectiles/guns/rocket.dm b/code/modules/projectiles/guns/rocket.dm index f8418e7c214..44f9041e19a 100644 --- a/code/modules/projectiles/guns/rocket.dm +++ b/code/modules/projectiles/guns/rocket.dm @@ -24,9 +24,12 @@ rockets = null return ..() -/obj/item/gun/rocketlauncher/update_icon() +/obj/item/gun/throw/update_icon_state() return +/obj/item/gun/throw/update_overlays() + return list() + /obj/item/gun/rocketlauncher/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/ammo_casing/rocket)) if(rockets.len < max_rockets) diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 3c43ce33287..f5d849dcffb 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -14,8 +14,8 @@ var/list/syringes = list() var/max_syringes = 1 -/obj/item/gun/syringe/New() - ..() +/obj/item/gun/syringe/Initialize() + . = ..() chambered = new /obj/item/ammo_casing/syringegun(src) /obj/item/gun/syringe/process_chamber() diff --git a/code/modules/projectiles/guns/throw.dm b/code/modules/projectiles/guns/throw.dm index a778aed783b..8c68ed809fe 100644 --- a/code/modules/projectiles/guns/throw.dm +++ b/code/modules/projectiles/guns/throw.dm @@ -41,8 +41,6 @@ loaded_projectiles = null return ..() -/obj/item/gun/throw/update_icon() - return /obj/item/gun/throw/attackby(obj/item/I, mob/user, params) if(istype(I, valid_projectile_type) && !(I.flags & NODROP)) diff --git a/code/modules/projectiles/guns/throw/crossbow.dm b/code/modules/projectiles/guns/throw/crossbow.dm index 9f6867539ca..fe728437491 100644 --- a/code/modules/projectiles/guns/throw/crossbow.dm +++ b/code/modules/projectiles/guns/throw/crossbow.dm @@ -32,7 +32,8 @@ if(cell && severity) emp_act(severity) -/obj/item/gun/throw/crossbow/update_icon() + +/obj/item/gun/throw/crossbow/update_icon_state() if(!tension) if(!to_launch) icon_state = "[initial(icon_state)]" @@ -40,16 +41,18 @@ icon_state = "[initial(icon_state)]-nocked" else icon_state = "[initial(icon_state)]-drawn" - overlays.Cut() - var/bolt_type = "bolt" - if(to_launch) - if(tension) - bolt_type += "_tighten" - else - bolt_type += "_untighten" - var/obj/item/arrow/bolt = to_launch - bolt_type += "_[bolt.overlay_prefix]" - overlays += image('icons/obj/weapons/crossbow_rod.dmi', bolt_type) + + +/obj/item/gun/throw/crossbow/update_overlays() + . = ..() + + if(!to_launch) + return + + var/bolt_type = "bolt[tension ? "_tighten" : "_untighten"]" + var/obj/item/arrow/bolt = to_launch + bolt_type += "_[bolt.overlay_prefix]" + . += image('icons/obj/weapons/crossbow_rod.dmi', bolt_type) /obj/item/gun/throw/crossbow/examine(mob/user) @@ -251,7 +254,7 @@ /obj/item/arrow/rod/fire/attackby(obj/item/I, mob/user, params) . = ..() - if(istype(I, /obj/item/lighter) || istype(I, /obj/item/weldingtool)) + if(istype(I, /obj/item/lighter) || I.tool_behaviour == TOOL_WELDER) fire_up() /obj/item/arrow/rod/fire/proc/fire_up(mob/user) diff --git a/code/modules/projectiles/guns/throw/pielauncher.dm b/code/modules/projectiles/guns/throw/pielauncher.dm index 69dcc166aae..48c745c6b46 100644 --- a/code/modules/projectiles/guns/throw/pielauncher.dm +++ b/code/modules/projectiles/guns/throw/pielauncher.dm @@ -14,8 +14,8 @@ projectile_range = 30 -/obj/item/gun/throw/piecannon/New() - ..() +/obj/item/gun/throw/piecannon/Initialize() + . = ..() for(var/i in 1 to max_capacity) var/obj/item/reagent_containers/food/snacks/pie/P = new /obj/item/reagent_containers/food/snacks/pie(src) loaded_projectiles += P @@ -24,13 +24,15 @@ /obj/item/gun/throw/piecannon/notify_ammo_count() return "[src] has [get_ammocount()] of [max_capacity] pies left." -/obj/item/gun/throw/piecannon/update_icon() + +/obj/item/gun/throw/piecannon/update_icon_state() if(to_launch) icon_state = "piecannon1" else icon_state = "piecannon0" item_state = icon_state + /obj/item/gun/throw/piecannon/process_chamber() ..() update_icon() diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 9065de76d57..71494bbc190 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -356,13 +356,13 @@ damage_type = TOX weaken = 1 SECONDS -/obj/item/projectile/bullet/neurotoxin/on_hit(var/atom/target, var/blocked = 0) +/obj/item/projectile/bullet/neurotoxin/prehit(atom/target) if(isalien(target)) weaken = 0 nodamage = 1 if(isobj(target) || issilicon(target) || ismachineperson(target)) damage_type = BURN - . = ..() // Execute the rest of the code. + . = ..() /obj/item/projectile/bullet/cap name = "cap" diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 7b8b17b1be9..baafcaeceee 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -210,7 +210,7 @@ Robot.mmi = new /obj/item/mmi/robotic_brain(new_mob) Robot.mmi.brainmob.timeofhostdeath = M.timeofdeath Robot.mmi.brainmob.stat = CONSCIOUS - Robot.mmi.become_occupied("boris") + Robot.mmi.update_appearance(UPDATE_ICON_STATE|UPDATE_NAME) Robot.lawupdate = FALSE Robot.disconnect_from_ai() Robot.clear_inherent_laws() @@ -342,32 +342,34 @@ icon_state = "red_1" damage_type = BURN -/obj/item/projectile/magic/animate/Bump(var/atom/change) - ..() - if(istype(change, /obj/item) || istype(change, /obj/structure) && !is_type_in_list(change, GLOB.protected_objects)) - if(istype(change, /obj/structure/closet/statue)) - for(var/mob/living/carbon/human/H in change.contents) - var/mob/living/simple_animal/hostile/statue/S = new /mob/living/simple_animal/hostile/statue(change.loc, firer) - S.name = "statue of [H.name]" - S.faction = list("\ref[firer]") - S.icon = change.icon - if(H.mind) - H.mind.transfer_to(S) - to_chat(S, "You are an animated statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved!") - to_chat(S, "Do not harm [firer.name], your creator.") - H = change - H.loc = S - qdel(src) + +/obj/item/projectile/magic/animate/on_hit(atom/target, blocked = 0, hit_zone) + . = ..() + + if(isitem(target) || (isstructure(target) && !is_type_in_list(target, GLOB.protected_objects))) + if(istype(target, /obj/structure/closet/statue)) + for(var/mob/living/carbon/human/prisoner in target) + var/mob/living/simple_animal/hostile/statue/statue = new(target.loc, firer) + statue.name = "statue of [prisoner.real_name]" + statue.faction = list("\ref[firer]") + statue.icon = target.icon + if(prisoner.mind) + prisoner.mind.transfer_to(statue) + to_chat(statue, span_warning("You are an animated statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved!")) + to_chat(statue, span_userdanger("Do not harm [firer.real_name], your creator.")) + prisoner.forceMove(statue) + qdel(target) else - var/obj/O = change - if(istype(O, /obj/item/gun)) - new /mob/living/simple_animal/hostile/mimic/copy/ranged(O.loc, O, firer) + if(istype(target, /obj/item/gun)) + new /mob/living/simple_animal/hostile/mimic/copy/ranged(target.loc, target, firer) else - new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, firer) - else if(istype(change, /mob/living/simple_animal/hostile/mimic/copy)) + new /mob/living/simple_animal/hostile/mimic/copy(target.loc, target, firer) + + else if(istype(target, /mob/living/simple_animal/hostile/mimic/copy)) // Change our allegiance! - var/mob/living/simple_animal/hostile/mimic/copy/C = change - C.ChangeOwner(firer) + var/mob/living/simple_animal/hostile/mimic/copy/mimic = target + mimic.ChangeOwner(firer) + /obj/item/projectile/magic/spellblade name = "blade energy" diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index ac6c16325e5..aa632834112 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -813,34 +813,19 @@ trans_data["diseases"] = temp return trans_data -/datum/reagents/proc/generate_taste_message(minimum_percent = TASTE_SENSITIVITY_NORMAL) +/datum/reagents/proc/generate_taste_message(minimum_percent = TASTE_SENSITIVITY_NORMAL, mob/living/user) var/list/out = list() var/list/reagent_tastes = list() //in the form reagent_tastes["descriptor"] = strength //mobs should get this message when either they cannot taste, the tastes are all too weak for them to detect, or the tastes somehow don't have any strength var/no_taste_text = "something indescribable" if(minimum_percent > 100) return no_taste_text - for(var/A in reagent_list) - var/datum/reagent/R = A + for(var/datum/reagent/R in reagent_list) if(!R.taste_mult) continue - //nutriment carries a list of tastes that originates from the snack food that the nutriment came from - if(istype(R, /datum/reagent/consumable/nutriment)) - var/list/nutriment_taste_data = R.data - for(var/nutriment_taste in nutriment_taste_data) - var/ratio = nutriment_taste_data[nutriment_taste] - var/amount = ratio * R.taste_mult * R.volume - if(nutriment_taste in reagent_tastes) - reagent_tastes[nutriment_taste] += amount - else - reagent_tastes[nutriment_taste] = amount - else - var/taste_desc = R.taste_description - var/taste_amount = R.volume * R.taste_mult - if(taste_desc in reagent_tastes) - reagent_tastes[taste_desc] += taste_amount - else - reagent_tastes[taste_desc] = taste_amount + var/list/taste_amount = R.taste_amplification(user) + for(var/taste_desc in taste_amount) + reagent_tastes[taste_desc] += taste_amount[taste_desc] //deal with percentages //TODO: may want to sort these from strong to weak var/total_taste = counterlist_sum(reagent_tastes) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 177c0708765..17e6225bb8f 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -1,3 +1,7 @@ +#define UPDATE_TYPE_HACK 1 +#define UPDATE_TYPE_COMPONENTS 2 + + /obj/machinery/chem_dispenser name = "chem dispenser" density = TRUE @@ -15,8 +19,9 @@ var/recharge_amount = 100 var/recharge_counter = 0 var/hackedcheck = FALSE + var/componentscheck = FALSE var/obj/item/reagent_containers/beaker = null - var/image/icon_beaker = null //cached overlay + var/mutable_appearance/icon_beaker //cached overlay var/list/dispensable_reagents = list("hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine", "sodium", "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron", "copper", "mercury", "plasma", "radium", "water", "ethanol", "sugar", "iodine", "bromine", "silver", "chromium") @@ -39,8 +44,8 @@ component_parts += new /obj/item/stock_parts/manipulator(null) component_parts += new /obj/item/stack/sheet/glass(null) component_parts += new cell_type(null) - RefreshParts() dispensable_reagents = sortAssoc(dispensable_reagents) + RefreshParts() /obj/machinery/chem_dispenser/upgraded/New() ..() @@ -110,8 +115,8 @@ recharge_amount *= C.rating for(var/obj/item/stock_parts/manipulator/M in component_parts) if(M.rating > 3) - dispensable_reagents |= upgrade_reagents - dispensable_reagents = sortAssoc(dispensable_reagents) + componentscheck = TRUE + update_reagents(UPDATE_TYPE_COMPONENTS) powerefficiency = round(newpowereff, 0.01) /obj/machinery/chem_dispenser/Destroy() @@ -138,12 +143,6 @@ return recharge_counter++ -/obj/machinery/chem_dispenser/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER /obj/machinery/chem_dispenser/ex_act(severity) if(severity < 3) @@ -155,7 +154,8 @@ ..() if(A == beaker) beaker = null - overlays.Cut() + update_icon(UPDATE_OVERLAYS) + /obj/machinery/chem_dispenser/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) // update the ui if it exists, returns null if no ui is passed/found @@ -220,11 +220,7 @@ atom_say("Недостаточно энергии для завершения операции!") return R.add_reagent(params["reagent"], actual) - overlays.Cut() - if(!icon_beaker) - icon_beaker = mutable_appearance('icons/obj/chemical.dmi', "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10, 5) - overlays += icon_beaker + update_icon(UPDATE_OVERLAYS) if("remove") var/amount = text2num(params["amount"]) if(!beaker || !amount) @@ -244,7 +240,7 @@ if(Adjacent(usr) && !issilicon(usr)) usr.put_in_hands(beaker, ignore_anim = FALSE) beaker = null - overlays.Cut() + update_icon(UPDATE_OVERLAYS) else return FALSE @@ -270,13 +266,10 @@ to_chat(user, "[I] is stuck to you!") return add_fingerprint(user) - beaker = I + beaker = I to_chat(user, "You set [I] on the machine.") SStgui.update_uis(src) // update all UIs attached to src - if(!icon_beaker) - icon_beaker = mutable_appearance('icons/obj/chemical.dmi', "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10, 5) - overlays += icon_beaker + update_icon(UPDATE_OVERLAYS) return return ..() @@ -296,20 +289,30 @@ return ..() +/obj/machinery/chem_dispenser/proc/update_reagents(update_type) + switch(update_type) + if(UPDATE_TYPE_HACK) + if(hackedcheck) + dispensable_reagents += hacked_reagents + else + dispensable_reagents -= hacked_reagents + if(UPDATE_TYPE_COMPONENTS) + dispensable_reagents |= upgrade_reagents + + dispensable_reagents = sortAssoc(dispensable_reagents) + + /obj/machinery/chem_dispenser/multitool_act(mob/user, obj/item/I) . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - if(!hackedcheck) - to_chat(user, hack_message) - dispensable_reagents += hacked_reagents - hackedcheck = TRUE - else - to_chat(user, unhack_message) - dispensable_reagents -= hacked_reagents - hackedcheck = FALSE + + hackedcheck = !hackedcheck + to_chat(user, hackedcheck ? hack_message : unhack_message) + update_reagents(UPDATE_TYPE_HACK) SStgui.update_uis(src) + /obj/machinery/chem_dispenser/screwdriver_act(mob/user, obj/item/I) if(default_deconstruction_screwdriver(user, "[initial(icon_state)]-o", "[initial(icon_state)]", I)) return TRUE @@ -343,6 +346,22 @@ add_fingerprint(user) ui_interact(user) + +/obj/machinery/chem_dispenser/update_overlays() + . = ..() + + if(!beaker) + return + + if(!icon_beaker) + icon_beaker = mutable_appearance(icon, "disp_beaker") + else + cut_overlay(icon_beaker) // trash overlays system. will be fixed as soon as TG style overlays are implemented + + icon_beaker.pixel_x = rand(-10, 5) // randomize beaker overlay position + . += icon_beaker + + /obj/machinery/chem_dispenser/soda icon_state = "soda_dispenser" name = "soda fountain" @@ -353,6 +372,7 @@ "watermelonjuice", "carrotjuice", "potato", "berryjuice") upgrade_reagents = list("bananahonk", "milkshake", "cafe_latte", "cafe_mocha", "triple_citrus", "icecoffe","icetea") hacked_reagents = list("thirteenloko") + var/list/hackedupgrade_reagents = list("zaza") hack_message = "You change the mode from 'McNano' to 'Pizza King'." unhack_message = "You change the mode from 'Pizza King' to 'McNano'." is_drink = TRUE @@ -381,6 +401,19 @@ component_parts += new cell_type(null) RefreshParts() + +/obj/machinery/chem_dispenser/soda/update_reagents(update_type) + if(update_type == UPDATE_TYPE_HACK && componentscheck) + if(hackedcheck) + dispensable_reagents += hackedupgrade_reagents + else + dispensable_reagents -= hackedupgrade_reagents + + else if(update_type == UPDATE_TYPE_COMPONENTS && hackedcheck) + dispensable_reagents += hackedupgrade_reagents + ..() + + /obj/machinery/chem_dispenser/beer icon_state = "booze_dispenser" name = "booze dispenser" @@ -388,7 +421,7 @@ desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." dispensable_reagents = list("ice", "cream", "cider", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequila", "vermouth", "cognac", "ale", "mead", "synthanol", "jagermeister", "bluecuracao", "sambuka", "schnaps", "sheridan") upgrade_reagents = list("iced_beer", "irishcream", "manhattan", "antihol", "synthignon", "bravebull") - hacked_reagents = list("goldschlager", "patron", "absinthe", "ethanol", "nothing", "sake", "bitter", "champagne", "aperol", "alcohol_free_beer") + hacked_reagents = list("goldschlager", "patron", "absinthe", "ethanol", "nothing", "sake", "bitter", "champagne", "aperol", "noalco_beer") hack_message = "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes." unhack_message = "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes." is_drink = TRUE @@ -472,7 +505,7 @@ cell = new(src) dispensable_reagents = sortList(dispensable_reagents) current_reagent = pick(dispensable_reagents) - update_icon() + update_icon(UPDATE_OVERLAYS) START_PROCESSING(SSobj, src) /obj/item/handheld_chem_dispenser/Destroy() @@ -496,7 +529,7 @@ cell.charge -= actual / efficiency if(actual) to_chat(user, "You dispense [amount] units of [current_reagent] into the [target].") - update_icon() + update_icon(UPDATE_OVERLAYS) if("remove") if(!target.reagents.remove_reagent(current_reagent, amount)) to_chat(user, "You remove [amount] units of [current_reagent] from the [target].") @@ -552,7 +585,7 @@ if("dispense") if(params["reagent"] in dispensable_reagents) current_reagent = params["reagent"] - update_icon() + update_icon(UPDATE_OVERLAYS) if("mode") switch(params["mode"]) if("remove") @@ -561,15 +594,15 @@ mode = "dispense" if("isolate") mode = "isolate" - update_icon() + update_icon(UPDATE_OVERLAYS) else return FALSE add_fingerprint(usr) -/obj/item/handheld_chem_dispenser/update_icon() - cut_overlays() +/obj/item/handheld_chem_dispenser/update_overlays() + . = ..() if(cell && cell.charge) var/image/power_light = image('icons/obj/chemical.dmi', src, "light_low") var/percent = round((cell.charge / cell.maxcharge) * 100) @@ -580,17 +613,17 @@ power_light.icon_state = "light_mid" if(67 to INFINITY) power_light.icon_state = "light_full" - add_overlay(power_light) + . += power_light var/image/mode_light = image('icons/obj/chemical.dmi', src, "light_remove") mode_light.icon_state = "light_[mode]" - add_overlay(mode_light) + . += mode_light var/image/chamber_contents = image('icons/obj/chemical.dmi', src, "reagent_filling") var/datum/reagent/R = GLOB.chemical_reagents_list[current_reagent] chamber_contents.icon += R.color - add_overlay(chamber_contents) - ..() + . += chamber_contents + /obj/item/handheld_chem_dispenser/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg if(isrobot(loc) && cell.charge < cell.maxcharge) @@ -600,7 +633,7 @@ R.cell.charge -= actual cell.charge += actual - update_icon() + update_icon(UPDATE_OVERLAYS) return TRUE /obj/item/handheld_chem_dispenser/attackby(obj/item/W, mob/user, params) @@ -616,7 +649,7 @@ return cell = W to_chat(user, "You install a cell in [src].") - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/handheld_chem_dispenser/screwdriver_act(mob/user, obj/item/I) if(!isrobot(loc) && cell) @@ -624,7 +657,7 @@ cell.loc = get_turf(src) cell = null to_chat(user, "You remove the cell from the [src].") - update_icon() + update_icon(UPDATE_OVERLAYS) return ..() @@ -636,7 +669,7 @@ dispensable_reagents = list("ice", "cream", "cider", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequila", "vermouth", "cognac", "ale", "mead", "synthanol", "jagermeister", "bluecuracao", "sambuka", "schnaps", "sheridan", "iced_beer", "irishcream", "manhattan", "antihol", "synthignon", "bravebull", "goldschlager", "patron", "absinthe", "ethanol", "nothing", - "sake", "bitter", "champagne", "aperol", "alcohol_free_beer") + "sake", "bitter", "champagne", "aperol", "noalco_beer") /obj/item/handheld_chem_dispenser/soda name = "handheld soda fountain" @@ -663,3 +696,6 @@ "ammonia", "ash", "diethylamine") + +#undef UPDATE_TYPE_HACK +#undef UPDATE_TYPE_COMPONENTS diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 502eca34007..c63bbea8df8 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -44,22 +44,22 @@ if(auto_eject) eject_beaker() + +/obj/machinery/chem_heater/update_icon_state() + icon_state = "mixer[beaker ? "1" : "0"]b" + + + /obj/machinery/chem_heater/proc/eject_beaker(mob/user) if(beaker) beaker.forceMove(get_turf(src)) if(user && Adjacent(user) && !issilicon(user)) user.put_in_hands(beaker, ignore_anim = FALSE) beaker = null - icon_state = "mixer0b" on = FALSE + update_icon(UPDATE_ICON_STATE) SStgui.update_uis(src) -/obj/machinery/chem_heater/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER /obj/machinery/chem_heater/attackby(obj/item/I, mob/user) if(isrobot(user)) @@ -74,7 +74,7 @@ add_fingerprint(user) beaker = I to_chat(user, "You add the beaker to the machine!") - icon_state = "mixer1b" + update_icon(UPDATE_ICON_STATE) SStgui.update_uis(src) return diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index add481a3d68..20f3c0a70ba 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -68,22 +68,23 @@ else if(A == loaded_pill_bottle) loaded_pill_bottle = null -/obj/machinery/chem_master/update_icon() - overlays.Cut() + +/obj/machinery/chem_master/update_icon_state() icon_state = "mixer[beaker ? "1" : "0"][powered() ? "" : "_nopower"]" + + +/obj/machinery/chem_master/update_overlays() + . = ..() if(powered()) - overlays += "waitlight" + . += "waitlight" /obj/machinery/chem_master/blob_act(obj/structure/blob/B) if(prob(50)) qdel(src) -/obj/machinery/chem_master/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER +/obj/machinery/chem_master/power_change(forced = FALSE) + if(!..()) + return update_icon() /obj/machinery/chem_master/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 26013cb1f57..74f33c5b4cd 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -339,7 +339,7 @@ updateUsrDialog() icon_state = "mixer1" - else if(istype(I, /obj/item/screwdriver)) + else if(I.tool_behaviour == TOOL_SCREWDRIVER) if(beaker) add_fingerprint(user) beaker.forceMove(get_turf(src)) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 30d56d3de88..d60fd19d753 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -292,3 +292,10 @@ if(M.healthdoll) M.healthdoll.cached_healthdoll_overlays.Cut() M.updatehealth("fakedeath reagent end") + + +/datum/reagent/proc/taste_amplification(mob/living/user) + . = list() + var/taste_desc = taste_description + var/taste_amount = volume * taste_mult + .[taste_desc] = taste_amount diff --git a/code/modules/reagents/chemistry/reagents/admin.dm b/code/modules/reagents/chemistry/reagents/admin.dm index 531abd930ff..95724270775 100644 --- a/code/modules/reagents/chemistry/reagents/admin.dm +++ b/code/modules/reagents/chemistry/reagents/admin.dm @@ -40,13 +40,14 @@ M.SetParalysis(0) M.SetSilence(0) M.SetHallucinate(0) + M.SetDeaf(0) REMOVE_TRAITS_NOT_IN(M, list(ROUNDSTART_TRAIT)) M.SetDizzy(0) M.SetDrowsy(0) M.SetStuttering(0) M.SetSlur(0) M.SetConfused(0) - M.SetSleeping(0, FALSE) + M.SetSleeping(0) M.SetJitter(0) for(var/thing in M.diseases) var/datum/disease/D = thing diff --git a/code/modules/reagents/chemistry/reagents/drink_cold.dm b/code/modules/reagents/chemistry/reagents/drink_cold.dm index 09502b52b8b..965277784ea 100644 --- a/code/modules/reagents/chemistry/reagents/drink_cold.dm +++ b/code/modules/reagents/chemistry/reagents/drink_cold.dm @@ -177,3 +177,44 @@ /datum/reagent/consumable/drink/cold/rewriter/on_mob_life(mob/living/M) M.Jitter(10 SECONDS) return ..() + + +/datum/reagent/consumable/drink/cold/zaza + name = "Zaza" + description = "The sharp delicious smell of cherries emanates from the drink." + id = "zaza" + color = "#b10023" // rgb:177, 0, 35 + drink_icon = "zaza" + drink_name = "Zaza" + drink_desc = "A glass filled with cherry drink, for a great Zaza Friday." + taste_description = "delicious shugary water taste" + var/alternate_taste_description = "something messing flavor of this juice... just sugary water taste" + var/healamount = 0.5 + + +/datum/reagent/consumable/drink/cold/zaza/on_mob_life(mob/living/user) + var/update_flags = STATUS_UPDATE_NONE + if(ishuman(user) && prob(40)) + update_flags |= user.adjustBruteLoss(-healamount, FALSE) + update_flags |= user.adjustFireLoss(-healamount, FALSE) + return ..() | update_flags + + +/datum/reagent/consumable/drink/cold/zaza/taste_amplification(mob/living/user) + . = list() + var/taste_desc = ismindshielded(user) ? alternate_taste_description : taste_description + var/taste_amount = volume * taste_mult + .[taste_desc] = taste_amount + + +/datum/reagent/consumable/drink/cold/zaza/fizzy + description = "The sharp delicious smell of cherries emanates from the sparkling drink." + color = "#f30028" // rgb:243, 0, 40 + id = "zazafizzy" + drink_icon = "zaza_fizzy" + drink_desc = "A glass filled with cherry drink, for a great Zaza Friday. Now with bubbles!" + taste_description = "delicious fizzy water taste" + alternate_taste_description = "something messing flavor of this drink... just fizzy water taste" + healamount = 0.25 + + diff --git a/code/modules/reagents/chemistry/reagents/drinks.dm b/code/modules/reagents/chemistry/reagents/drinks.dm index 38fdc391dcd..edb8fe5b8e7 100644 --- a/code/modules/reagents/chemistry/reagents/drinks.dm +++ b/code/modules/reagents/chemistry/reagents/drinks.dm @@ -536,7 +536,7 @@ /datum/reagent/consumable/drink/non_alcoholic_beer name = "Non-alcoholic beer" - id = "alcohol_free_beer" + id = "noalco_beer" description = "The most meaningless thing." drink_icon = "alcohol_free_beer" drink_name = "Non-alcoholic beer" diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index eed5157a877..a0376503b55 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -708,6 +708,7 @@ M.emote("laugh") return list(effect, update_flags) + /datum/reagent/rotatium //Rotatium. Fucks up your rotation and is hilarious name = "Rotatium" id = "rotatium" @@ -717,23 +718,26 @@ metabolization_rate = 0.6 * REAGENTS_METABOLISM taste_description = "spinning" + /datum/reagent/rotatium/on_mob_life(mob/living/carbon/M) if(M.hud_used) if(current_cycle >= 20 && current_cycle % 20 == 0) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) + var/atom/movable/plane_master_controller/pm_controller = M.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] var/rotation = min(round(current_cycle / 20), 89) // By this point the player is probably puking and quitting anyway - for(var/whole_screen in screens) - animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) + for(var/key in pm_controller.controlled_planes) + animate(pm_controller.controlled_planes[key], transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1) animate(transform = matrix(-rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING) return ..() + /datum/reagent/rotatium/on_mob_delete(mob/living/M) - if(M && M.hud_used) - var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"]) - for(var/whole_screen in screens) - animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING) + if(M?.hud_used) + var/atom/movable/plane_master_controller/pm_controller = M.hud_used.plane_master_controllers[PLANE_MASTERS_GAME] + for(var/key in pm_controller.controlled_planes) + animate(pm_controller.controlled_planes[key], transform = matrix(), time = 5, easing = QUAD_EASING) ..() + ////////////////////////////// // laughter // ////////////////////////////// diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index be474044f91..b4eef2c4be7 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -55,6 +55,16 @@ counterlist_normalise(taste_amounts) data = taste_amounts + +/datum/reagent/consumable/nutriment/taste_amplification(mob/living/user) + . = list() + var/list/nutriment_taste_data = data + for(var/nutriment_taste in nutriment_taste_data) + var/ratio = nutriment_taste_data[nutriment_taste] + var/amount = ratio * taste_mult * volume + .[nutriment_taste] = amount + + /datum/reagent/consumable/nutriment/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores name = "Protein" id = "protein" diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index 59fc5d732cf..2e148189797 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -209,9 +209,8 @@ if(!S.reagents) S.create_reagents(volume) S.reagents.add_reagent("thermite", volume) - S.thermite = TRUE - S.overlays.Cut() - S.overlays += image('icons/effects/effects.dmi', icon_state = "thermite") + S.melting_olay = mutable_appearance('icons/effects/effects.dmi', icon_state = "thermite") + S.add_overlay(S.melting_olay) if(S.active_hotspot) S.reagents.temperature_reagents(S.active_hotspot.temperature, 10, 300) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index a65eb53ddd3..2cfa3145972 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -1356,3 +1356,26 @@ if(prob(25)) M.fakevomit(1) return ..() | update_flags + +/datum/reagent/metalic_dust + name = "Metalic dust" + id = "metalicdust" + description = "Metal dust with large pieces of various metals and technical liquids." + reagent_state = SOLID + color = "#353434" + process_flags = ORGANIC | SYNTHETIC + metabolization_rate = 5 + taste_description = span_warning("METAL DUST OH GOD") + +/datum/reagent/metalic_dust/on_mob_life(mob/living/M) + M.emote("scream") + to_chat(M, span_warning("OH SHIT!!!!")) + M.AdjustWeakened(2 SECONDS) + M.EyeBlurry(1 SECONDS) + M.adjustBruteLoss(rand(5, 10)) + if(iscarbon(M)) + var/mob/living/carbon/C = M + for(var/obj/item/organ/internal/organ in C.get_organs_zone(BODY_ZONE_PRECISE_GROIN)) + organ.receive_damage(rand(5, 10)) + + return ..() diff --git a/code/modules/reagents/chemistry/recipes/drinks.dm b/code/modules/reagents/chemistry/recipes/drinks.dm index 53149815ad4..b1729146753 100644 --- a/code/modules/reagents/chemistry/recipes/drinks.dm +++ b/code/modules/reagents/chemistry/recipes/drinks.dm @@ -1475,3 +1475,12 @@ required_reagents = list("trinary" = 1, "codelibre" = 1, "rewriter" = 1, "irishempbomb" = 1, "synthanol" = 1 ) result_amount = 5 mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' + + +/datum/chemical_reaction/zaza_fizzy + name = "Fizzy Zaza" + id = "zazafizzy" + result = "zazafizzy" + required_reagents = list("zaza" = 1, "sodawater" = 1) + result_amount = 2 + mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' diff --git a/code/modules/reagents/chemistry/recipes/food.dm b/code/modules/reagents/chemistry/recipes/food.dm index f559864486e..b30e08272c8 100644 --- a/code/modules/reagents/chemistry/recipes/food.dm +++ b/code/modules/reagents/chemistry/recipes/food.dm @@ -56,6 +56,7 @@ for(var/i = 1, i <= created_volume, i++) new /obj/item/reagent_containers/food/snacks/sliceable/cheesewheel(location) +/* /datum/chemical_reaction/syntiflesh name = "Syntiflesh" id = "syntiflesh" @@ -67,6 +68,7 @@ var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) new /obj/item/reagent_containers/food/snacks/meat/syntiflesh(location) +*/ /datum/chemical_reaction/hot_ramen name = "Hot Ramen" diff --git a/code/modules/reagents/reagent_containers/applicator.dm b/code/modules/reagents/reagent_containers/applicator.dm index 4e5e6a2671c..dba8e549abc 100644 --- a/code/modules/reagents/reagent_containers/applicator.dm +++ b/code/modules/reagents/reagent_containers/applicator.dm @@ -44,16 +44,15 @@ visible_message("[src] identifies and removes a harmful substance.") update_icon() -/obj/item/reagent_containers/applicator/update_icon() - if(applying) - icon_state = "mender-active" - else - icon_state = "mender" - cut_overlays() + +/obj/item/reagent_containers/applicator/update_icon_state() + icon_state = "mender[applying ? "-active" : ""]" + + +/obj/item/reagent_containers/applicator/update_overlays() + . = ..() if(reagents.total_volume) - var/mutable_appearance/filling = mutable_appearance('icons/goonstation/objects/objects.dmi', "mender-fluid") - filling.color = mix_color_from_reagents(reagents.reagent_list) - add_overlay(filling) + . += mutable_appearance('icons/goonstation/objects/objects.dmi', "mender-fluid", color = mix_color_from_reagents(reagents.reagent_list)) var/reag_pct = round((reagents.total_volume / volume) * 100) var/mutable_appearance/applicator_bar = mutable_appearance('icons/goonstation/objects/objects.dmi', "app_e") switch(reag_pct) @@ -63,7 +62,8 @@ applicator_bar.icon_state = "app_he" if(0) applicator_bar.icon_state = "app_e" - add_overlay(applicator_bar) + . += applicator_bar + /obj/item/reagent_containers/applicator/attack(mob/living/M, mob/user) if(!reagents.total_volume) diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 5dc907fbd58..1daf2b9acac 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -13,12 +13,12 @@ volume = 30 /obj/item/reagent_containers/glass/bottle/on_reagent_change() - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/glass/bottle/update_icon() - overlays.Cut() - underlays.Cut() +/obj/item/reagent_containers/glass/bottle/update_overlays() + . = ..() + underlays.Cut() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") @@ -39,8 +39,8 @@ underlays += filling if(!is_open_container()) - var/image/lid = image(icon, src, "lid_bottle") - overlays += lid + . += "lid_[icon_state]" + /obj/item/reagent_containers/glass/bottle/decompile_act(obj/item/matter_decompiler/C, mob/user) if(!reagents.total_volume) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 1c9162c7280..59b3d19cfdc 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -12,11 +12,14 @@ volume = 5 pass_open_check = TRUE + +/obj/item/reagent_containers/dropper/update_icon_state() + icon_state = "[initial(icon_state)][reagents.total_volume ? "1" : ""]" + + /obj/item/reagent_containers/dropper/on_reagent_change() - if(!reagents.total_volume) - icon_state = "[initial(icon_state)]" - else - icon_state = "[initial(icon_state)]1" + update_icon(UPDATE_ICON_STATE) + /obj/item/reagent_containers/dropper/attack(mob/living/M, mob/living/user, def_zone) return diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index c2dd438a304..dd2db154c12 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -14,6 +14,7 @@ container_type = OPENCONTAINER has_lid = TRUE resistance_flags = ACID_PROOF + blocks_emissive = FALSE var/label_text = "" /obj/item/reagent_containers/glass/New() @@ -25,6 +26,8 @@ if(get_dist(user, src) <= 2 && !is_open_container()) . += "Airtight lid seals it completely." + . += "[src] can hold up to [reagents.maximum_volume] units." + /obj/item/reagent_containers/glass/attack(mob/M, mob/user, def_zone) if(!is_open_container()) return ..() @@ -115,21 +118,28 @@ /obj/item/reagent_containers/glass/beaker name = "beaker" - desc = "A beaker. Can hold up to 50 units." + desc = "A simple glass beaker, nothing special." icon = 'icons/obj/chemical.dmi' icon_state = "beaker" item_state = "beaker" belt_icon = "beaker" materials = list(MAT_GLASS=500) var/obj/item/assembly_holder/assembly = null - var/can_assembly = 1 + var/can_assembly = TRUE + + +/obj/item/reagent_containers/glass/beaker/examine(mob/user) + . = ..() + if(assembly) + . += "There is an [assembly] attached to it, use a screwdriver to remove it." + /obj/item/reagent_containers/glass/beaker/on_reagent_change() - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/glass/beaker/update_icon() - overlays.Cut() +/obj/item/reagent_containers/glass/beaker/update_overlays() + . = ..() if(reagents.total_volume) var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10") @@ -151,14 +161,16 @@ filling.icon_state = "[icon_state]100" filling.icon += mix_color_from_reagents(reagents.reagent_list) - overlays += filling + . += filling if(!is_open_container()) - var/image/lid = image(icon, src, "lid_[initial(icon_state)]") - overlays += lid + . += "lid_[initial(icon_state)]" + if(blocks_emissive == FALSE) + . += emissive_blocker(icon, "lid_[initial(icon_state)]") + if(assembly) - overlays += "assembly" - ..() + . += "assembly" + /obj/item/reagent_containers/glass/beaker/verb/remove_assembly() set name = "Remove Assembly" @@ -172,26 +184,29 @@ usr.put_in_hands(assembly, ignore_anim = FALSE) assembly = null qdel(GetComponent(/datum/component/proximity_monitor)) - update_icon() + update_icon(UPDATE_OVERLAYS) else to_chat(usr, "There is no assembly to remove.") + /obj/item/reagent_containers/glass/beaker/proc/heat_beaker() if(reagents) reagents.temperature_reagents(4000) + /obj/item/reagent_containers/glass/beaker/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/assembly_holder) && can_assembly) if(assembly) to_chat(usr, "[src] already has an assembly.") return ..() - assembly = W - user.drop_transfer_item_to_loc(W, src) - if(assembly.has_prox_sensors()) - AddComponent(/datum/component/proximity_monitor) - overlays += "assembly" - else - ..() + if(user.drop_transfer_item_to_loc(W, src)) + if(assembly.has_prox_sensors()) + AddComponent(/datum/component/proximity_monitor) + assembly = W + update_icon(UPDATE_OVERLAYS) + return ..() + return ..() + /obj/item/reagent_containers/glass/beaker/HasProximity(atom/movable/AM) if(assembly) @@ -215,7 +230,7 @@ /obj/item/reagent_containers/glass/beaker/large name = "large beaker" - desc = "A large beaker. Can hold up to 100 units." + desc = "A large glass beaker with twice the capacity of a normal beaker." icon_state = "beakerlarge" belt_icon = "large_beaker" materials = list(MAT_GLASS=2500) @@ -226,7 +241,7 @@ /obj/item/reagent_containers/glass/beaker/vial name = "vial" - desc = "A small glass vial. Can hold up to 25 units." + desc = "A small glass vial, often used by virologists of the 25th century." icon_state = "vial" belt_icon = "vial" materials = list(MAT_GLASS=250) @@ -238,7 +253,7 @@ /obj/item/reagent_containers/glass/beaker/drugs name = "baggie" - desc = "A baggie. Can hold up to 10 units." + desc = "A small plastic baggie, often used by pharmaceutical \"entrepreneurs\"." icon_state = "baggie" amount_per_transfer_from_this = 2 possible_transfer_amounts = null @@ -248,24 +263,25 @@ /obj/item/reagent_containers/glass/beaker/thermite name = "Thermite load" - desc = "A baggie. Can hold up to 20 units." + desc = "A baggie loaded with combustible chemicals." icon_state = "baggie" - amount_per_transfer_from_this = 20 + amount_per_transfer_from_this = 25 possible_transfer_amounts = null - volume = 20 + volume = 25 container_type = OPENCONTAINER can_assembly = 0 - list_reagents = list("thermite" = 20) + list_reagents = list("thermite" = 25) /obj/item/reagent_containers/glass/beaker/noreact name = "cryostasis beaker" - desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units." + desc = "A cryostasis beaker that allows for chemical storage without reactions." icon_state = "beakernoreact" materials = list(MAT_METAL=3000) volume = 50 amount_per_transfer_from_this = 10 origin_tech = "materials=2;engineering=3;plasmatech=3" container_type = OPENCONTAINER + blocks_emissive = EMISSIVE_BLOCK_GENERIC /obj/item/reagent_containers/glass/beaker/noreact/New() ..() @@ -273,13 +289,14 @@ /obj/item/reagent_containers/glass/beaker/bluespace name = "bluespace beaker" - desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." + desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete." icon_state = "beakerbluespace" materials = list(MAT_GLASS=3000) volume = 300 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25,30,50,100,300) container_type = OPENCONTAINER + blocks_emissive = EMISSIVE_BLOCK_GENERIC origin_tech = "bluespace=5;materials=4;plasmatech=4" /obj/item/reagent_containers/glass/beaker/cryoxadone @@ -311,14 +328,17 @@ armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 50) //Weak melee protection, because you can wear it on your head slot_flags = SLOT_HEAD resistance_flags = NONE + blocks_emissive = EMISSIVE_BLOCK_GENERIC container_type = OPENCONTAINER var/paintable = TRUE + /obj/item/reagent_containers/glass/bucket/Initialize(mapload) . = ..() if(!color && paintable) color = "#0085E5" - update_icon() //in case bucket's color has been changed in editor or by some deriving buckets + update_icon(UPDATE_OVERLAYS) //in case bucket's color has been changed in editor or by some deriving buckets + /obj/item/reagent_containers/glass/bucket/attackby(obj/D, mob/user, params) . = ..() @@ -326,18 +346,18 @@ var/obj/item/toy/crayon/spraycan/can = D if(!can.capped && Adjacent(can, 1)) color = can.colour - update_icon() + update_icon(UPDATE_OVERLAYS) -/obj/item/reagent_containers/glass/bucket/update_icon() + +/obj/item/reagent_containers/glass/bucket/update_overlays() . = ..() - overlays.Cut() if(color) var/mutable_appearance/bucket_mask = mutable_appearance(icon='icons/obj/janitor.dmi', icon_state = "bucket_mask") - overlays += bucket_mask + . += bucket_mask + + var/mutable_appearance/bucket_hand = mutable_appearance(icon='icons/obj/janitor.dmi', icon_state = "bucket_hand", appearance_flags = RESET_COLOR) + . += bucket_hand - var/mutable_appearance/bucket_hand = mutable_appearance(icon='icons/obj/janitor.dmi', icon_state = "bucket_hand") - bucket_hand.appearance_flags |= RESET_COLOR - overlays += bucket_hand /obj/item/reagent_containers/glass/bucket/wooden name = "wooden bucket" @@ -348,9 +368,10 @@ resistance_flags = FLAMMABLE paintable = FALSE -/obj/item/reagent_containers/glass/bucket/wooden/update_icon() - . = ..() - overlays.Cut() + +/obj/item/reagent_containers/glass/bucket/wooden/update_overlays() + return + /obj/item/reagent_containers/glass/bucket/equipped(mob/user, slot, initial) . = ..() @@ -360,6 +381,7 @@ reagents.reaction(user, REAGENT_TOUCH) reagents.clear_reagents() + /obj/item/reagent_containers/glass/bucket/attackby(obj/D, mob/user, params) if(istype(D, /obj/item/mop)) var/obj/item/mop/m = D diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 26c93c6ce4b..d1c5ca60344 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -114,6 +114,9 @@ list_reagents = list("omnizine" = 30) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF +/obj/item/reagent_containers/hypospray/CMO/empty + list_reagents = null + /obj/item/reagent_containers/hypospray/combat name = "combat stimulant injector" desc = "A modified air-needle autoinjector, used by support operatives to quickly heal injuries in combat." @@ -266,13 +269,14 @@ return ..() spent = TRUE - update_icon() + update_icon(UPDATE_ICON_STATE) return TRUE -/obj/item/reagent_containers/hypospray/autoinjector/update_icon() - if(spent) - if(icon_state != "[icon_state]0") - icon_state = "[icon_state]0" + +/obj/item/reagent_containers/hypospray/autoinjector/update_icon_state() + var/real_state = replacetext(icon_state, "0", "") // we need to do this since customization is available + icon_state = "[real_state][spent ? "0" : ""]" + /obj/item/reagent_containers/hypospray/autoinjector/examine() . = ..() diff --git a/code/modules/reagents/reagent_containers/iv_bag.dm b/code/modules/reagents/reagent_containers/iv_bag.dm index 798fb060ac1..62c181cc27f 100644 --- a/code/modules/reagents/reagent_containers/iv_bag.dm +++ b/code/modules/reagents/reagent_containers/iv_bag.dm @@ -25,24 +25,24 @@ return ..() /obj/item/reagent_containers/iv_bag/on_reagent_change() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/reagent_containers/iv_bag/pickup(mob/user) . = ..() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/reagent_containers/iv_bag/dropped(mob/user, silent = FALSE) ..() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/reagent_containers/iv_bag/attack_self(mob/user) ..() mode = !mode - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/reagent_containers/iv_bag/attack_hand() ..() - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/reagent_containers/iv_bag/proc/begin_processing(mob/target) injection_target = target @@ -74,13 +74,13 @@ var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1) //The amount of reagents we'll transfer to the person reagents.reaction(injection_target, REAGENT_INGEST, fraction) //React the amount we're transfering. reagents.trans_to(injection_target, amount_per_transfer_from_this) - update_icon() + update_icon(UPDATE_OVERLAYS) else // Drawing if(reagents.total_volume < reagents.maximum_volume) injection_target.transfer_blood_to(src, amount_per_transfer_from_this) for(var/datum/reagent/x in injection_target.reagents.reagent_list) // Pull small amounts of reagents from the person while drawing blood injection_target.reagents.trans_to(src, amount_per_transfer_from_this/10) - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/reagent_containers/iv_bag/attack(mob/living/M, mob/living/user, def_zone) return @@ -139,24 +139,24 @@ return -/obj/item/reagent_containers/iv_bag/update_icon() - overlays.Cut() - +/obj/item/reagent_containers/iv_bag/update_overlays() + . = ..() if(reagents.total_volume) var/percent = round((reagents.total_volume / volume) * 10) // We round the 1's place off of our percent for easy image processing. var/image/filling = image('icons/goonstation/objects/iv.dmi', src, "[icon_state][percent]") filling.icon += mix_color_from_reagents(reagents.reagent_list) - overlays += filling + . += filling if(ismob(loc)) switch(mode) if(IV_DRAW) - overlays += "draw" + . += "draw" if(IV_INJECT) - overlays += "inject" + . += "inject" + /obj/item/reagent_containers/iv_bag/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/pen) || istype(I, /obj/item/flashlight/pen)) + if(is_pen(I) || istype(I, /obj/item/flashlight/pen)) rename_interactive(user, I) // PRE-FILLED IV BAGS BELOW @@ -177,6 +177,7 @@ if(blood_type != null && blood_species != null) name = "[initial(name)] - [blood_type] - [blood_species]" reagents.add_reagent("blood", 200, list("donor"=null,"diseases"=null,"blood_DNA"=null,"blood_type"=blood_type,"blood_species"=blood_species,"resistances"=null,"trace_chem"=null)) + update_icon(UPDATE_OVERLAYS) . = ..() @@ -250,6 +251,8 @@ /obj/item/reagent_containers/iv_bag/bloodsynthetic/oxygenis/Initialize(mapload) if(blood_type != null && blood_species != null) reagents.add_reagent("sbloodoxy", 200, list("donor"=null,"diseases"=null,"blood_DNA"=null,"blood_type"=blood_type,"blood_species"=blood_species,"resistances"=null,"trace_chem"=null)) + update_icon(UPDATE_OVERLAYS) + . = ..() /obj/item/reagent_containers/iv_bag/bloodsynthetic/nitrogenis @@ -259,6 +262,7 @@ /obj/item/reagent_containers/iv_bag/bloodsynthetic/nitrogenis/Initialize(mapload) if(blood_type != null && blood_species != null) reagents.add_reagent("sbloodvox", 200, list("donor"=null,"diseases"=null,"blood_DNA"=null,"blood_type"=blood_type,"blood_species"=blood_species,"resistances"=null,"trace_chem"=null)) + update_icon(UPDATE_OVERLAYS) . = ..() /obj/item/reagent_containers/iv_bag/slime diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index edbe5cf42de..731929f2548 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -205,7 +205,7 @@ -/obj/item/reagent_containers/spray/chemsprayer/attack_self(var/mob/user) +/obj/item/reagent_containers/spray/chemsprayer/attack_self(mob/user) amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10) to_chat(user, "You adjust the output switch. You'll now use [amount_per_transfer_from_this] units per spray.") diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index acaf54f158e..0481068d9c0 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -148,29 +148,35 @@ mode = SYRINGE_DRAW update_icon() -/obj/item/reagent_containers/syringe/update_icon() - cut_overlays() + +/obj/item/reagent_containers/syringe/update_icon_state() var/rounded_vol - if(reagents && reagents.total_volume) + if(reagents?.total_volume) rounded_vol = clamp(round((reagents.total_volume / volume * 15), 5), 1, 15) - var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]") - filling_overlay.icon += mix_color_from_reagents(reagents.reagent_list) - add_overlay(filling_overlay) else rounded_vol = 0 icon_state = "[rounded_vol]" item_state = "syringe_[rounded_vol]" + + +/obj/item/reagent_containers/syringe/update_overlays() + . = ..() + var/rounded_vol + if(reagents && reagents.total_volume) + rounded_vol = clamp(round((reagents.total_volume / volume * 15), 5), 1, 15) + var/image/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]") + filling_overlay.icon += mix_color_from_reagents(reagents.reagent_list) + . += filling_overlay if(ismob(loc)) - var/mob/M = loc var/injoverlay switch(mode) if(SYRINGE_DRAW) injoverlay = "draw" if(SYRINGE_INJECT) injoverlay = "inject" - add_overlay(injoverlay) - M.update_inv_l_hand() - M.update_inv_r_hand() + . += injoverlay + update_equipped_item() + /obj/item/reagent_containers/syringe/antiviral name = "Syringe (spaceacillin)" diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index a5d2ebcdc65..93f1bae3e2d 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -41,8 +41,7 @@ GLOBAL_LIST_INIT(conveyor_switches, list()) update_move_direction() for(var/I in GLOB.conveyor_switches) var/obj/machinery/conveyor_switch/S = I - if(id == S.id) - S.conveyors += src + S.link_conveyers(src) /obj/machinery/conveyor/Destroy() GLOB.conveyor_belts -= src @@ -96,8 +95,7 @@ GLOBAL_LIST_INIT(conveyor_switches, list()) add_fingerprint(user) user.Move_Pulled(src) -/obj/machinery/conveyor/update_icon() - ..() +/obj/machinery/conveyor/update_icon_state() if(IS_OPERATING) icon_state = "conveyor_started_[clockwise ? "cw" : "ccw"]" if(reversed) @@ -170,10 +168,13 @@ GLOBAL_LIST_INIT(conveyor_switches, list()) dir = turn(dir, -45) clockwise = FALSE -/obj/machinery/conveyor/power_change() - ..() + +/obj/machinery/conveyor/power_change(forced = FALSE) + if(!..()) + return update_icon() + /obj/machinery/conveyor/process() if(!IS_OPERATING) return @@ -213,7 +214,7 @@ GLOBAL_LIST_INIT(conveyor_switches, list()) return var/move_time = 0 - if (slow_factor>1) // yes, 1 is special + if(slow_factor>1) // yes, 1 is special move_time=CEILING(slow_factor, 2) // yes. AM.Move(get_step(loc, forwards), forwards, move_time) @@ -265,6 +266,7 @@ GLOBAL_LIST_INIT(conveyor_switches, list()) var/reversed = TRUE // If we're in neutral, would we go forwards or backwards next? var/slow_factor = 1 // How slow the belts should go. Gets copied into connected belts slow_factor. + /obj/machinery/conveyor_switch/New(newloc, new_id) ..(newloc) GLOB.conveyor_switches += src @@ -272,27 +274,42 @@ GLOBAL_LIST_INIT(conveyor_switches, list()) id = new_id for(var/I in GLOB.conveyor_belts) var/obj/machinery/conveyor/C = I - if(C.id == id) - conveyors += C + link_conveyers(C) + + +/obj/machinery/conveyor_switch/proc/link_conveyers(obj/machinery/conveyor/C) + if(C.id != id) + return + conveyors += C + RegisterSignal(C, COMSIG_PARENT_QDELETING, PROC_REF(unlink_conveyer)) // so it GCs properly + + +/obj/machinery/conveyor_switch/proc/unlink_conveyer(obj/machinery/conveyor/C) + conveyors -= C + /obj/machinery/conveyor_switch/Destroy() GLOB.conveyor_switches -= src return ..() -// update the icon depending on the position -/obj/machinery/conveyor_switch/update_icon() - overlays.Cut() +// update the icon depending on the position +/obj/machinery/conveyor_switch/update_icon_state() if(!position) icon_state = "switch-off" else if(position == DIRECTION_REVERSED) icon_state = "switch-rev" - if(!(stat & NOPOWER)) - overlays += "redlight" else if(position == DIRECTION_FORWARDS) icon_state = "switch-fwd" - if(!(stat & NOPOWER)) - overlays += "greenlight" + + +/obj/machinery/conveyor_switch/update_overlays() + . = ..() + if(position == DIRECTION_REVERSED && !(stat & NOPOWER)) + . += "redlight" + if(position == DIRECTION_FORWARDS && !(stat & NOPOWER)) + . += "greenlight" + /obj/machinery/conveyor_switch/oneway one_way = TRUE @@ -394,8 +411,9 @@ GLOBAL_LIST_INIT(conveyor_switches, list()) return TRUE -/obj/machinery/conveyor_switch/power_change() - ..() +/obj/machinery/conveyor_switch/power_change(forced = FALSE) + if(!..()) + return update_icon() // CONVEYOR CONSTRUCTION STARTS HERE diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 1b3bad78222..9cfe8fa49f2 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -69,11 +69,16 @@ // hide called by levelupdate if turf intact status changes // change visibility status and force update of icon -/obj/structure/disposalconstruct/hide(var/intact) - invisibility = (intact && level==1) ? INVISIBILITY_ABSTRACT: 0 // hide if floor is intact +/obj/structure/disposalconstruct/hide(intact) + invisibility = (intact && level == 1) ? INVISIBILITY_MAXIMUM : 0 // hide if floor is intact update() +/obj/structure/disposalconstruct/examine(mob/user) + . = ..() + . += "Alt-Click to rotate it, Alt-Shift-Click to flip it." + + // flip and rotate verbs /obj/structure/disposalconstruct/verb/rotate() set category = "Object" diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 5c4ce23c920..8a0597259aa 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -888,8 +888,8 @@ // hide called by levelupdate if turf intact status changes // change visibility status and force update of icon -/obj/structure/disposalpipe/hide(var/intact) - invisibility = intact ? INVISIBILITY_ABSTRACT: 0 // hide if floor is intact +/obj/structure/disposalpipe/hide(intact) + invisibility = intact ? INVISIBILITY_MAXIMUM : 0 // hide if floor is intact update_icon() // update actual icon_state depending on visibility @@ -932,6 +932,7 @@ for(var/atom/movable/AM in H) AM.forceMove(T) AM.pipe_eject(direction) + SEND_SIGNAL(AM, COMSIG_MOVABLE_EXIT_DISPOSALS) spawn(1) if(AM) AM.throw_at(target, 100, 1) @@ -947,6 +948,7 @@ AM.forceMove(T) AM.pipe_eject(0) + SEND_SIGNAL(AM, COMSIG_MOVABLE_EXIT_DISPOSALS) spawn(1) if(AM) AM.throw_at(target, 5, 1) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index a3bc26e3e2f..f75ec7d3502 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -8,8 +8,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). name = "Circuit Imprinter" desc = "Manufactures circuit boards for the construction of machines." icon_state = "circuit_imprinter" - icon_open = "circuit_imprinter_t" - icon_closed = "circuit_imprinter" + base_icon_state = "circuit_imprinter" container_type = OPENCONTAINER categories = list( @@ -38,8 +37,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). RefreshParts() if(is_taipan(z)) icon_state = "syndie_circuit_imprinter" - icon_open = "syndie_circuit_imprinter_t" - icon_closed = "syndie_circuit_imprinter" + base_icon_state = "syndie_circuit_imprinter" reagents.my_atom = src /obj/machinery/r_n_d/circuit_imprinter/upgraded/New() @@ -53,8 +51,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). RefreshParts() if(is_taipan(z)) icon_state = "syndie_circuit_imprinter" - icon_open = "syndie_circuit_imprinter_t" - icon_closed = "syndie_circuit_imprinter" + base_icon_state = "syndie_circuit_imprinter" reagents.my_atom = src /obj/machinery/r_n_d/circuit_imprinter/RefreshParts() @@ -73,7 +70,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). T = clamp(T, 1, 4) efficiency_coeff = 1 / (2 ** (T - 1)) -/obj/machinery/r_n_d/circuit_imprinter/check_mat(datum/design/being_built, var/M) +/obj/machinery/r_n_d/circuit_imprinter/check_mat(datum/design/being_built, M) var/list/all_materials = being_built.reagents_list + being_built.materials var/A = materials.amount(M) @@ -82,12 +79,12 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). return round(A / max(1, (all_materials[M] * efficiency_coeff))) -/obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/r_n_d/circuit_imprinter/attackby(obj/item/O, mob/user, params) if(shocked) add_fingerprint(user) if(shock(user,50)) return TRUE - if(default_deconstruction_screwdriver(user, icon_open, icon_closed, O)) + if(default_deconstruction_screwdriver(user, "[base_icon_state]_t", base_icon_state, O)) add_fingerprint(user) if(linked_console) linked_console.linked_imprinter = null @@ -98,7 +95,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). return if(panel_open) - if(istype(O, /obj/item/crowbar)) + if(O.tool_behaviour == TOOL_CROWBAR) for(var/obj/I in component_parts) if(istype(I, /obj/item/reagent_containers/glass/beaker)) reagents.trans_to(I, reagents.total_volume) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index bf8ae888b1d..930ce67eaf9 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -532,7 +532,7 @@ name = "Speed Loader (.38 Hollow-Point)" id = "c38hp" build_type = AUTOLATHE - materials = list(MAT_METAL = 30000) + materials = list(MAT_METAL = 30500) build_path = /obj/item/ammo_box/speedloader/c38/hp category = list("hacked", "Security") @@ -901,7 +901,7 @@ name = "Ammo Box (.357)" id = "a357" build_type = AUTOLATHE - materials = list(MAT_METAL = 75000) + materials = list(MAT_METAL = 75500) build_path = /obj/item/ammo_box/a357 category = list("hacked", "Security") diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index f03d2c09ddb..3e1bdf8f173 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -55,7 +55,7 @@ name = "Monkey cube" id = "mcube" build_type = BIOGENERATOR - materials = list(MAT_BIOMASS = 250) + materials = list(MAT_BIOMASS = 500) build_path = /obj/item/reagent_containers/food/snacks/monkeycube category = list("initial", "Food") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 85d8782586e..12d07bc4a29 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1868,6 +1868,16 @@ construction_time = 10 SECONDS category = list("Exosuit Paintkits") +/datum/design/paint_ripley_nt + name = "Ripley, Firefighter \"NT Special\"" + id = "p_ripleynt" + build_type = MECHFAB + req_tech = list("combat" = 5, "engineering" = 5, "materials" = 5, "programming" = 5) + build_path = /obj/item/paintkit/ripley_nt + materials = list(MAT_METAL=20000, MAT_PLASMA=2000, MAT_GLASS= 2000) + construction_time = 10 SECONDS + category = list("Exosuit Paintkits") + /datum/design/paint_clarke_orangey name = "Clarke \"Orangey\"" id = "p_orangey" @@ -1998,6 +2008,16 @@ construction_time = 30 SECONDS category = list("Exosuit Paintkits") +/datum/design/paint_durand_nt + name = "Durand \"NT Special\"" + id = "p_durandnt" + build_type = MECHFAB + req_tech = list("combat" = 6, "engineering" = 6, "materials" = 6, "programming" = 6) + build_path = /obj/item/paintkit/durand_nt + materials = list(MAT_METAL=40000, MAT_DIAMOND=4000, MAT_URANIUM= 4000) + construction_time = 30 SECONDS + category = list("Exosuit Paintkits") + /datum/design/paint_durand_soviet name = "Durand \"Dollhouse\"" id = "p_soviet" @@ -2057,3 +2077,13 @@ materials = list(MAT_METAL=50000, MAT_DIAMOND=4000, MAT_BLUESPACE=4000) construction_time = 40 SECONDS category = list("Exosuit Paintkits") + +/datum/design/paint_phazon_nt + name = "Phazon \"NT Special\"" + id = "p_phazonnt" + build_type = MECHFAB + req_tech = list("bluespace" = 7, "engineering" = 7, "materials" = 7, "toxins" = 6) + build_path = /obj/item/paintkit/phazon_nt + materials = list(MAT_METAL=50000, MAT_DIAMOND=4000, MAT_BLUESPACE=4000) + construction_time = 40 SECONDS + category = list("Exosuit Paintkits") diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index a63f0e1f375..9af31f879fa 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -139,7 +139,7 @@ id = "mag_oldsmg" req_tech = list("combat" = 1, "materials" = 1) build_type = PROTOLATHE | AUTOLATHE - materials = list(MAT_METAL = 11000) + materials = list(MAT_METAL = 12000) build_path = /obj/item/ammo_box/magazine/wt550m9 category = list("Weapons", "hacked", "Security") diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index ab51b4b564c..ec83697314c 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -126,7 +126,7 @@ if(exchange_parts(user, O)) return - if(panel_open && istype(O, /obj/item/crowbar)) + if(panel_open && O.tool_behaviour == TOOL_CROWBAR) default_deconstruction_crowbar(user, O) return diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index c07f91c72ce..c4feb19dd11 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -102,7 +102,7 @@ Note: Must be placed west/left of and R&D console to function. return if(panel_open) - if(istype(O, /obj/item/crowbar)) + if(O.tool_behaviour == TOOL_CROWBAR) for(var/obj/I in component_parts) if(istype(I, /obj/item/reagent_containers/glass/beaker)) reagents.trans_to(I, reagents.total_volume) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index 6a789ffa579..bd13c544029 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -152,7 +152,7 @@ add_fingerprint(user) shock(user,50) - if(istype(O, /obj/item/screwdriver)) + if(O.tool_behaviour == TOOL_SCREWDRIVER) add_fingerprint(user) default_deconstruction_screwdriver(user, icon_open, icon_closed, O) return 1 @@ -161,7 +161,7 @@ return 1 if(panel_open) - if(istype(O, /obj/item/crowbar)) + if(O.tool_behaviour == TOOL_CROWBAR) griefProtection() default_deconstruction_crowbar(user, O) return 1 diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 6f30df3b131..b5288e9b610 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -514,19 +514,19 @@ qdel(src) -/obj/item/slimepotion/speed/MouseDrop(atom/over) +/obj/item/slimepotion/speed/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() if(!.) return FALSE var/mob/user = usr - if(istype(over, /obj/screen)) + if(istype(over_object, /obj/screen)) return FALSE - if(over == user || loc != user || user.incapacitated() || !ishuman(user)) + if(over_object == user || loc != user || user.incapacitated() || !ishuman(user)) return FALSE - afterattack(over, user, TRUE, drop = TRUE) + afterattack(over_object, user, TRUE, drop = TRUE) return TRUE @@ -581,20 +581,19 @@ qdel(src) -/obj/item/slimepotion/clothing/MouseDrop(atom/over) +/obj/item/slimepotion/clothing/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() if(!.) return FALSE var/mob/user = usr - if(istype(over, /obj/screen)) + if(istype(over_object, /obj/screen)) return FALSE - if(over == user || loc != user || user.incapacitated() || !ishuman(user)) + if(over_object == user || loc != user || user.incapacitated() || !ishuman(user)) return FALSE - afterattack(over, user, TRUE) - return TRUE + afterattack(over_object, user, TRUE) /obj/item/slimepotion/clothing/fireproof diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm index 33d2550f6fd..b0a9979cf68 100644 --- a/code/modules/response_team/ert_outfits.dm +++ b/code/modules/response_team/ert_outfits.dm @@ -35,7 +35,7 @@ rt_assignment = "Emergency Response Team Leader" rt_job = "Emergency Response Team Leader" rt_mob_job = "ERT Commander" - special_message = "За обычных условий вы подчиняетесь старшим по рангу офицерам Защиты Активов. \n Впрочем, на время проведения операции вы подчиняетесь Офицеру Специальных Операций. \n Исключениями являются случаи, когда его приказания прямо противоречат интересам Отдела Защиты Активов или приказаниям членов ОЗА в более высоком звании, чем вы. \n Вы имеете абсолютную власть в рамках вашего отряда, и практически абсолютную в рамках зоны проведения операции. Пресекайте прямое неподчинение, но не забывайте прислушиваться к мнению специалистов." + special_message = "В обычных условий вы подчиняетесь старшим по рангу офицерам Защиты Активов. \n Впрочем, на время проведения операции вы подчиняетесь Офицеру Специальных Операций. \n Исключениями являются случаи, когда его приказания прямо противоречат интересам Отдела Защиты Активов или приказаниям членов ОЗА в более высоком звании, чем вы. \n Вы имеете абсолютную власть в рамках вашего отряда, и практически абсолютную в рамках зоны проведения операции. Пресекайте прямое неподчинение, но не забывайте прислушиваться к мнению специалистов." exp_type = EXP_TYPE_COMMAND uniform = /obj/item/clothing/under/rank/centcom_officer/sensor @@ -66,7 +66,7 @@ "Max" = "Мастер-сержант") backpack_contents = list( /obj/item/restraints/handcuffs = 1, - /obj/item/storage/lockbox/mindshield = 1, + /obj/item/storage/lockbox/mindshield/ert = 1, /obj/item/flashlight/seclite = 1 ) @@ -79,7 +79,7 @@ glasses = /obj/item/clothing/glasses/sunglasses mask = /obj/item/clothing/mask/gas/sechailer/swat suit_store = /obj/item/gun/energy/gun/pdw9/ert - belt = /obj/item/gun/projectile/automatic/pistol/sp8t + belt = /obj/item/gun/projectile/automatic/pistol/sp8/sp8t hours_dif = 250 ranks = list("Min" = "Мастер-сержант", @@ -90,7 +90,7 @@ /obj/item/camera_bug/ert = 1, /obj/item/door_remote/omni = 1, /obj/item/restraints/handcuffs = 1, - /obj/item/storage/lockbox/mindshield = 1 + /obj/item/storage/lockbox/mindshield/ert = 1 ) cybernetic_implants = list( @@ -112,7 +112,7 @@ glasses = /obj/item/clothing/glasses/night mask = /obj/item/clothing/mask/gas/sechailer/swat suit_store = /obj/item/gun/energy/gun/pdw9/ert - belt = /obj/item/gun/projectile/automatic/pistol/sp8t + belt = /obj/item/gun/projectile/automatic/pistol/sp8/sp8t hours_dif = 300 ranks = list("Min" = "Лейтенант", @@ -121,12 +121,13 @@ backpack_contents = list( /obj/item/ammo_box/magazine/sp8 = 4, /obj/item/restraints/handcuffs = 1, - /obj/item/storage/lockbox/mindshield = 1, + /obj/item/storage/lockbox/mindshield/ert = 1, /obj/item/camera_bug/ert = 1, /obj/item/door_remote/omni = 1, ) cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/thermals/empproof, /obj/item/organ/internal/cyberimp/chest/nutriment_old/plus, /obj/item/organ/internal/cyberimp/eyes/hud/security, /obj/item/organ/internal/cyberimp/brain/anti_stun/hardened, @@ -146,7 +147,7 @@ rt_mob_job = "ERT Security" uniform = /obj/item/clothing/under/rank/security/sensor back = /obj/item/storage/backpack/ert/security - belt = /obj/item/storage/belt/security/response_team + belt = /obj/item/storage/belt/security/sec pda = /obj/item/pda/heads/ert/security id = /obj/item/card/id/ert/security exp_type = EXP_TYPE_SECURITY @@ -184,7 +185,7 @@ "Max" = "Специалист") backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 3, /obj/item/storage/box/handcuffs = 1, /obj/item/grenade/flashbang = 2, @@ -209,7 +210,7 @@ shoes = /obj/item/clothing/shoes/magboots/advance gloves = /obj/item/clothing/gloves/combat suit = /obj/item/clothing/suit/space/hardsuit/ert/gamma/security - belt = /obj/item/storage/belt/security/response_team_gamma + belt = /obj/item/storage/belt/military/assault/gammaert/full suit_store = /obj/item/gun/energy/immolator/multi/sibyl glasses = /obj/item/clothing/glasses/night mask = /obj/item/clothing/mask/gas/sechailer/swat @@ -222,7 +223,7 @@ "Max" = "Старший специалист") backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 3, /obj/item/storage/box/handcuffs = 1, /obj/item/storage/box/flashbangs = 1, @@ -232,6 +233,7 @@ ) cybernetic_implants = list( + /obj/item/organ/internal/cyberimp/eyes/thermals/empproof, /obj/item/organ/internal/cyberimp/chest/nutriment_old/plus, /obj/item/organ/internal/cyberimp/eyes/hud/security, /obj/item/organ/internal/cyberimp/brain/anti_stun/hardened, @@ -300,7 +302,7 @@ "Max" = "Специалист") backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 2, /obj/item/rcd/preloaded = 1, /obj/item/rcd_ammo = 3, @@ -336,7 +338,7 @@ "Max" = "Старший специалист") backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 2, /obj/item/rcd/combat = 1, /obj/item/rcd_ammo/large = 3, @@ -418,7 +420,7 @@ "Max" = "Специалист") backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 2, /obj/item/storage/firstaid/ertm = 1, /obj/item/storage/box/autoinjectors = 1, @@ -460,7 +462,7 @@ "Max" = "Старший специалист") backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 2, /obj/item/storage/firstaid/ertm = 1, /obj/item/bodyanalyzer/advanced = 1, @@ -495,14 +497,15 @@ l_ear = /obj/item/radio/headset/ert/alt glasses = /obj/item/clothing/glasses/hud/security/sunglasses mask = /obj/item/clothing/mask/gas/sechailer/swat - belt = /obj/item/storage/belt/security/response_team + belt = /obj/item/storage/belt/security/sec id = /obj/item/card/id/centcom pda = /obj/item/pda/centcom special_message = "Вы подчиняетесь непосредственно назначенному корпорацией командиру. \n Хоть вы и можете возражать ему, прямое подчинение крайне нежелательно. Исключениями являются случаи, когда ваш командир открыто действует против интересов НТ, или случаи, когда это требуется согласно приказаниям членов вашего Ордена с высшим саном. \n В случае его отсутствия или недееспособности, вам стоит прислушиваться к мнению члена отряда с самым высоким званием." backpack_contents = list( /obj/item/storage/box/zipties = 1, - /obj/item/flashlight/seclite = 1 + /obj/item/flashlight/seclite = 1, + /obj/item/reagent_containers/food/drinks/bottle/holywater = 1 ) /datum/outfit/job/centcom/response_team/paranormal/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -538,8 +541,9 @@ "Max" = "Инквизитор") backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 2, + /obj/item/reagent_containers/food/drinks/bottle/holywater = 1 ) @@ -569,8 +573,9 @@ "Max" = "Инквизитор") backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 2, + /obj/item/reagent_containers/food/drinks/bottle/holywater = 1 ) cybernetic_implants = list( @@ -633,7 +638,7 @@ mask = /obj/item/clothing/mask/gas/sechailer backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 2, ) @@ -656,7 +661,7 @@ r_pocket = /obj/item/scythe/tele backpack_contents = list( - /obj/item/gun/projectile/automatic/pistol/sp8t = 1, + /obj/item/gun/projectile/automatic/pistol/sp8/sp8t = 1, /obj/item/ammo_box/magazine/sp8 = 2, /obj/item/grenade/chem_grenade/antiweed = 2, /obj/item/storage/box/lights/mixed = 1, diff --git a/code/modules/ruins/lavalandruin_code/fountain_hall.dm b/code/modules/ruins/lavalandruin_code/fountain_hall.dm index 4f4dfa5c10b..484e0d2c3fd 100644 --- a/code/modules/ruins/lavalandruin_code/fountain_hall.dm +++ b/code/modules/ruins/lavalandruin_code/fountain_hall.dm @@ -41,9 +41,10 @@ to_chat(user, "The water feels warm and soothing as you touch it. The fountain immediately dries up shortly afterwards.") user.reagents.add_reagent("godblood", 20) update_icon() - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon)), time_between_uses) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_icon), UPDATE_ICON_STATE), time_between_uses) -/obj/structure/healingfountain/update_icon() + +/obj/structure/healingfountain/update_icon_state() if(last_process + time_between_uses > world.time) icon_state = "fountain" else diff --git a/code/modules/ruins/lavalandruin_code/necropolis_lavalend.dm b/code/modules/ruins/lavalandruin_code/necropolis_lavalend.dm index 40a28b31568..3b4c0de09ba 100644 --- a/code/modules/ruins/lavalandruin_code/necropolis_lavalend.dm +++ b/code/modules/ruins/lavalandruin_code/necropolis_lavalend.dm @@ -68,7 +68,7 @@ /obj/machinery/door/poddoor/impassable/necropolisdoor name = "necropolis door" - desc = "Древние двери которые откроются только только избранным" + desc = "Древние двери которые откроются только избранным." icon = 'icons/obj/lavaland/necrdoor.dmi' icon_state = "necr" diff --git a/code/modules/ruins/syndicate_space_base.dm b/code/modules/ruins/syndicate_space_base.dm index 1da15dd1097..a1455f56d7e 100644 --- a/code/modules/ruins/syndicate_space_base.dm +++ b/code/modules/ruins/syndicate_space_base.dm @@ -1,8 +1,8 @@ /obj/item/paper/syndicate/code_words name = "Code Words" -/obj/item/paper/syndicate/code_words/New() - ..() +/obj/item/paper/syndicate/code_words/Initialize(mapload) + . = ..() var/phrases = jointext(GLOB.syndicate_code_phrase, ", ") var/responses = jointext(GLOB.syndicate_code_response, ", ") @@ -11,7 +11,8 @@ info += "Кодовые ответы: [responses]
    \n" info += "Используйте слова при общении с потенциальными агентами. В тоже время будьте осторожны, ибо кто угодно может оказаться потенциальным врагом." info_links = info - overlays += "paper_words" + update_icon() + // Space Base Spawners. Исспользуется переделанная копия спавнеров лавалендовских. /obj/effect/mob_spawn/human/space_base_syndicate @@ -22,9 +23,9 @@ id_job = "Syndicate Scientist" icon = 'icons/obj/machines/cryogenic2.dmi' icon_state = "cryo_s" - important_info = "Не мешайте другим оперативникам синдиката (Таким как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и её сохранность является для вас высшим приоритетом!" - description = "Эксперементируйте со смертельными химикатами, растениями, генами и вирусами. Наслаждайтесь спокойной жизнью зная, что ваша работа так или иначе насолит НТ в будущем!" - flavour_text = "Вы агент синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания Нанотрэйзен, имеет собственную массивную научную базу в вашем секторе. Продолжайте свои исследования на сколько можете и постарайтесь не высовываться. \ + important_info = "Не мешайте другим оперативникам Синдиката (таким, как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с Синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и сохранность является для вас высшим приоритетом!" + description = "Экспериментируйте со смертельными химикатами, растениями, генами и вирусами. Наслаждайтесь спокойной жизнью, зная, что ваша работа так или иначе насолит НТ в будущем!" + flavour_text = "Вы — агент Синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания НаноТрейзен, имеет собственную массивную научную базу в вашем секторе. Продолжайте свои исследования насколько можете и постарайтесь не высовываться. \ Вам дали ясно понять, что синдикат заставит вас очень сильно пожалеть если вы разочаруете их!" outfit = /datum/outfit/space_base_syndicate assignedrole = TAIPAN_SCIENTIST @@ -108,9 +109,9 @@ name = "Syndicate Medic sleeper" mob_name = "Syndicate Medic" id_job = "Syndicate Medic" - important_info = "Не мешайте другим оперативникам синдиката (Таким как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и её сохранность является для вас высшим приоритетом!" - description = "Проводите медицинские опыты сомнительного содержания. Вылечивайте своих коллег, которые опять поссорились с генералом Синди, или оживляйте неудачных космических путников, для допросов или боргизации. Даже Синдикату нужны врачи!" - flavour_text = "Вы агент синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания Нанотрэйзен, имеет собственную массивную научную базу в вашем секторе. Продолжайте свои исследования на сколько можете и постарайтесь не высовываться. \ + important_info = "Не мешайте другим оперативникам Синдиката (таким, как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с Синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и сохранность является для вас высшим приоритетом!" + description = "Проводите медицинские опыты сомнительного содержания. Вылечивайте своих коллег, которые опять поссорились с генералом Синди, или оживляйте неудачливых космических путников, для допросов или киборгизации. Даже Синдикату нужны врачи!" + flavour_text = "Вы — агент Синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания НаноТрейзен, имеет собственную массивную научную базу в вашем секторе. Продолжайте свои исследования насколько можете и постарайтесь не высовываться. \ Вам дали ясно понять, что синдикат заставит вас очень сильно пожалеть если вы разочаруете их!" outfit = /datum/outfit/space_base_syndicate/medic assignedrole = TAIPAN_MEDIC @@ -142,9 +143,9 @@ name = "Syndicate Botanist sleeper" mob_name = "Syndicate Botanist" id_job = "Syndicate Botanist" - important_info = "Не мешайте другим оперативникам синдиката (Таким как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и её сохранность является для вас высшим приоритетом!" - description = "Выращивайте сомнительные растения. Помогите повару накормить экипаж, а учёным создать опаснейшие растения! Наслаждайтесь силой природы в руках Синдиката!" - flavour_text = "Вы агент синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания Нанотрэйзен, имеет собственную массивную научную базу в вашем секторе. Продолжайте свои исследования на сколько можете и постарайтесь не высовываться. \ + important_info = "Не мешайте другим оперативникам Синдиката (таким, как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с Синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и сохранность является для вас высшим приоритетом!" + description = "Выращивайте сомнительные растения. Помогите повару накормить экипаж, а учёным — создать опаснейшие растения! Наслаждайтесь силой природы в руках Синдиката!" + flavour_text = "Вы — агент Синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания НаноТрейзен, имеет собственную массивную научную базу в вашем секторе. Продолжайте свои исследования насколько можете и постарайтесь не высовываться. \ Вам дали ясно понять, что синдикат заставит вас очень сильно пожалеть если вы разочаруете их!" outfit = /datum/outfit/space_base_syndicate/botanist assignedrole = TAIPAN_BOTANIST @@ -169,9 +170,9 @@ name = "Syndicate Cargo Technician sleeper" mob_name = "Syndicate Cargo Technician" id_job = "Syndicate Cargo Technician" - important_info = "Не мешайте другим оперативникам синдиката (Таким как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и её сохранность является для вас высшим приоритетом!" - description = "Даже синдикату нужны рабочие руки, приносите людям их посылки, заказывайте и продавайте, наслаждайтесь простой работой среди всех этих учёных. Здесь всё равно платят в разы лучше!" - flavour_text = "Вы Грузчик синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания Нанотрэйзен, имеет собственную массивную научную базу в вашем секторе. Работайте с грузами, заказывайте всё что может потребоваться станции или вам и зарабатывайте реальные деньги, а не виртуальные очки!" + important_info = "Не мешайте другим оперативникам Синдиката (таким, как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с Синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и сохранность является для вас высшим приоритетом!" + description = "Даже Синдикату нужны рабочие руки, приносите людям их посылки, заказывайте и продавайте, наслаждайтесь простой работой среди всех этих учёных. Здесь всё равно платят в разы лучше!" + flavour_text = "Вы — грузчик Синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания НаноТрейзен, имеет собственную массивную научную базу в вашем секторе. Работайте с грузами, заказывайте всё, что может потребоваться станции или вам и зарабатывайте реальные деньги, а не виртуальные очки!" outfit = /datum/outfit/space_base_syndicate/cargotech assignedrole = TAIPAN_CARGO min_hours = 10 @@ -190,9 +191,9 @@ name = "Syndicate Chef Sleeper" mob_name = "Syndicate Chef" id_job = "Syndicate Chef" - important_info = "Не мешайте другим оперативникам синдиката (Таким как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и её сохранность является для вас высшим приоритетом!" - description = "Даже синдикату нужны рабочие руки! У вас в распоряжении свой бар, кухня и ботаника. Накормите этих голодных учёных или помогите им создать последнее блюдо для ваших врагов. Здесь всё равно платят в разы лучше!" - flavour_text = "Вы Повар синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания Нанотрэйзен, имеет собственную массивную научную базу в вашем секторе. Готовьте еду и напитки экипажу и постарайтесь не высовываться!" + important_info = "Не мешайте другим оперативникам Синдиката (таким, как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с Синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и сохранность является для вас высшим приоритетом!" + description = "Даже Синдикату нужны рабочие руки! У вас в распоряжении свой бар, кухня и ботаника. Накормите этих голодных учёных или помогите им создать последнее блюдо для ваших врагов. Здесь всё равно платят в разы лучше!" + flavour_text = "Вы — повар Синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания НаноТрейзен, имеет собственную массивную научную базу в вашем секторе. Готовьте еду и напитки экипажу и постарайтесь не высовываться!" outfit = /datum/outfit/space_base_syndicate/chef assignedrole = TAIPAN_CHEF min_hours = 10 @@ -217,9 +218,9 @@ name = "Syndicate Atmos Engineer Sleeper" mob_name = "Syndicate Atmos Engineer" id_job = "Syndicate Atmos Engineer" - important_info = "Не мешайте другим оперативникам синдиката (Таким как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и её сохранность является для вас высшим приоритетом!" - description = "Там где есть космическая станция, есть и двигатели с трубами которым нужно своё техобслуживание. Обеспечьте станцию энергией, чините повреждения после неудачных опытов учёных и отдыхайте в баре пока снова что-нибудь не взорвут. " - flavour_text = "Вы Инженер атмосферник синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания Нанотрэйзен, имеет собственную массивную научную базу в вашем секторе. Запустите двигатель, убедитесь, что на станцию подаётся достаточно электричества и воздуха, а так же чините отделы которые неприменно сломают." + important_info = "Не мешайте другим оперативникам Синдиката (таким, как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с Синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и сохранность является для вас высшим приоритетом!" + description = "Там, где есть космическая станция, есть и двигатели с трубами, которым нужно своё техобслуживание. Обеспечьте станцию энергией, чините повреждения после неудачных опытов учёных и отдыхайте в баре, пока снова что-нибудь не взорвут. " + flavour_text = "Вы — инженер-атмосферник Синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания НаноТрейзен, имеет собственную массивную научную базу в вашем секторе. Запустите двигатель, убедитесь, что на станцию подаётся достаточно электричества и воздуха, а также чините отделы, которые непременно сломают." outfit = /datum/outfit/space_base_syndicate/engineer assignedrole = TAIPAN_ENGINEER min_hours = 10 @@ -238,9 +239,9 @@ name = "Syndicate Comms Officer sleeper" mob_name = "Syndicate Comms Officer" id_job = "Syndicate Comms Officer" - important_info = "Не мешайте другим оперативникам синдиката (Таким как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и её сохранность является для вас высшим приоритетом!" - description = "Проверяйте камеры и коммуникации, руководите станцией в случае ЧП, старайтесь помогать любым агентам синдиката на станции при этом сохраняя свою базу секретом от НТ. Вы являетесь единственным агентом с доступом в хранилище и оружейную." - flavour_text = "Вы Офицер синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания Нанотрэйзен, имеет собственную массивную научную базу в вашем секторе. Наблюдайте за станцией НТ, руководите вверенной вам базой и постарайтесь не высовываться. \ + important_info = "Не мешайте другим оперативникам Синдиката (таким, как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с Синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и сохранность является для вас высшим приоритетом!" + description = "Проверяйте камеры и коммуникации, руководите станцией в случае ЧП, старайтесь помогать любым агентам Синдиката на станции, при этом сохраняя свою базу в секрете от НТ. Вы являетесь единственным агентом с доступом в хранилище и оружейную." + flavour_text = "Вы — офицер Синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания НаноТрейзен, имеет собственную массивную научную базу в вашем секторе. Наблюдайте за станцией НТ, руководите вверенной вам базой и постарайтесь не высовываться. \ Синдикат ясно дал вам понять, что не стоит подводить их доверие. Не разочаруйте их!" outfit = /datum/outfit/space_base_syndicate/comms assignedrole = TAIPAN_COMMS @@ -265,9 +266,9 @@ name = "Syndicate Research Director sleeper" mob_name = "Syndicate Research Director" id_job = "Syndicate Research Director" - important_info = "Не мешайте другим оперативникам синдиката (Таким как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и её сохранность является для вас высшим приоритетом!" - description = "Следите за тем чтобы учёные занимались исследованиями и не подорвали всю станцию, предоставьте синдикату результаты своих исследований через карго и помните, смерть Нанотрейзен!" - flavour_text = "Вы Директор Исследований синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания Нанотрэйзен, имеет собственную массивную научную базу в вашем секторе. Продолжайте свои исследования на сколько можете и постарайтесь не высовываться. \ + important_info = "Не мешайте другим оперативникам Синдиката (таким, как предатели или ядерные оперативники). Вы можете работать вместе или против не связанных с Синдикатом антагонистов в индивидуальном порядке. Не покидайте свою базу без разрешения администрации! Ваша база, её секретность и сохранность является для вас высшим приоритетом!" + description = "Следите за тем, чтобы учёные занимались исследованиями и не подорвали всю станцию, предоставьте Синдикату результаты своих исследований через карго и помните: смерть НаноТрейзен!" + flavour_text = "Вы Директор Исследований Синдиката, работающий на сверхсекретной научно-наблюдательной станции Тайпан, занимающейся созданием биооружия и взаимодействием с чёрным рынком. К несчастью, ваш самый главный враг, компания НаноТрейзен, имеет собственную массивную научную базу в вашем секторе. Продолжайте свои исследования насколько сможете и постарайтесь не высовываться. \ Вам дали ясно понять, что синдикат заставит вас очень сильно пожалеть если вы разочаруете их!" outfit = /datum/outfit/space_base_syndicate/rd assignedrole = TAIPAN_RD diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index 9505ac475e2..6fbe302523c 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -10,7 +10,7 @@ return ..() -/obj/docking_port/mobile/assault_pod/dock(obj/docking_port/stationary/S1) +/obj/docking_port/mobile/assault_pod/dock(obj/docking_port/stationary/S1, force, transit) ..() if(!istype(S1, /obj/docking_port/stationary/transit)) playsound(get_turf(src.loc), 'sound/effects/explosion1.ogg',50,1) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index c68305f07e2..8ba53824fc9 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -364,16 +364,16 @@ mode = SHUTTLE_RECALL /obj/docking_port/mobile/proc/enterTransit() + . = FALSE previous = null -// if(!destination) -// return var/obj/docking_port/stationary/S0 = get_docked() var/obj/docking_port/stationary/S1 = findTransitDock() if(S1) - if(dock(S1, , TRUE)) + if(dock(S1, transit = TRUE)) WARNING("shuttle \"[id]\" could not enter transit space. Docked at [S0 ? S0.id : "null"]. Transit dock [S1 ? S1.id : "null"].") else previous = S0 + return TRUE else WARNING("shuttle \"[id]\" could not enter transit space. S0=[S0 ? S0.id : "null"] S1=[S1 ? S1.id : "null"]") @@ -441,7 +441,7 @@ //this is the main proc. It instantly moves our mobile port to stationary port S1 //it handles all the generic behaviour, such as sanity checks, closing doors on the shuttle, stunning mobs, etc -/obj/docking_port/mobile/proc/dock(obj/docking_port/stationary/S1, force=FALSE, transit=FALSE) +/obj/docking_port/mobile/proc/dock(obj/docking_port/stationary/S1, force = FALSE, transit = FALSE) // Crashing this ship with NO SURVIVORS if(S1.get_docked() == src) remove_ripples() @@ -665,10 +665,10 @@ setTimer(20) //can't dock for some reason, try again in 2 seconds return if(SHUTTLE_IGNITING) - mode = SHUTTLE_CALL - setTimer(callTime) - enterTransit() - return + if(enterTransit()) + mode = SHUTTLE_CALL + setTimer(callTime) + return mode = SHUTTLE_IDLE timer = 0 destination = null diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 2a38ae3a320..6db49911b9d 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -16,6 +16,41 @@ height = 7 roundstart_move = "supply_away" +/obj/docking_port/mobile/supply/proc/forbidden_atoms_check(atom/A) + var/static/list/cargo_blacklist = list( + /obj/structure/blob, + /obj/structure/spider/spiderling, + /obj/item/disk/nuclear, + /obj/machinery/nuclearbomb, + /obj/item/radio/beacon, + /obj/machinery/the_singularitygen, + /obj/singularity, + /obj/machinery/teleport/station, + /obj/machinery/teleport/hub, + /obj/machinery/telepad, + /obj/machinery/telepad_cargo, + /obj/machinery/clonepod, + /obj/effect/hierophant, + /obj/item/warp_cube, + /obj/machinery/quantumpad, + /obj/structure/extraction_point, + /obj/item/paicard + ) + if(A) + if(isliving(A)) + if(!istype(A.loc, /obj/item/mobcapsule)) + return TRUE + var/mob/living/living = A + if(living.client) //You cannot get out of the capsule and you will be destroyed. Saving clients + return TRUE + if(is_type_in_list(A, cargo_blacklist)) + return TRUE + for(var/thing in A) + if(.(thing)) + return TRUE + + return FALSE + /obj/docking_port/mobile/supply/register() if(!..()) return 0 @@ -32,7 +67,7 @@ return 2 return ..() -/obj/docking_port/mobile/supply/dock() +/obj/docking_port/mobile/supply/dock(obj/docking_port/stationary/S1, force, transit) . = ..() if(.) return . @@ -180,7 +215,7 @@ objective.unit_completed(cost) msg += "[tech.name] - new data.
    " - qdel(MA) + qdel(MA, force = TRUE) SSshuttle.sold_atoms += "." @@ -200,35 +235,6 @@ SSshuttle.centcom_message += "[msg]
    " -/proc/forbidden_atoms_check(atom/A) - var/list/blacklist = list( - /mob/living, - /obj/structure/blob, - /obj/structure/spider/spiderling, - /obj/item/disk/nuclear, - /obj/machinery/nuclearbomb, - /obj/item/radio/beacon, - /obj/machinery/the_singularitygen, - /obj/singularity, - /obj/machinery/teleport/station, - /obj/machinery/teleport/hub, - /obj/machinery/telepad, - /obj/machinery/telepad_cargo, - /obj/machinery/clonepod, - /obj/effect/hierophant, - /obj/item/warp_cube, - /obj/machinery/quantumpad, - /obj/structure/extraction_point - ) - if(A) - if(is_type_in_list(A, blacklist)) - return 1 - for(var/thing in A) - if(.(thing)) - return 1 - - return 0 - /******************** SUPPLY ORDER ********************/ @@ -335,12 +341,12 @@ if(istype(Crate, /obj/structure/closet/crate)) var/obj/structure/closet/crate/CR = Crate CR.manifest = slip - CR.update_icon() + CR.update_icon(UPDATE_OVERLAYS) CR.announce_beacons = object.announce_beacons.Copy() if(istype(Crate, /obj/structure/largecrate)) var/obj/structure/largecrate/LC = Crate LC.manifest = slip - LC.update_icon() + LC.update_icon(UPDATE_OVERLAYS) return Crate @@ -409,10 +415,11 @@ if(SO) if(!SO.comment) SO.comment = "No comment." - var/pack_techs - for(var/tech_id in SO.object.required_tech) - pack_techs += "[CallTechName(tech_id)]: [SO.object.required_tech[tech_id]]; " - requests_list.Add(list(list("ordernum" = SO.ordernum, "supply_type" = SO.object.name, "orderedby" = SO.orderedby, "comment" = SO.comment, "command1" = list("confirmorder" = SO.ordernum), "command2" = list("rreq" = SO.ordernum), "pack_techs" = pack_techs))) + var/list/pack_techs = list() + if(length(SO.object.required_tech)) + for(var/tech_id in SO.object.required_tech) + pack_techs += "[CallTechName(tech_id)]: [SO.object.required_tech[tech_id]]; " + requests_list.Add(list(list("ordernum" = SO.ordernum, "supply_type" = SO.object.name, "orderedby" = SO.orderedby, "comment" = SO.comment, "command1" = list("confirmorder" = SO.ordernum), "command2" = list("rreq" = SO.ordernum), "pack_techs" = pack_techs.Join("")))) data["requests"] = requests_list var/list/orders_list = list() @@ -426,6 +433,7 @@ data["canapprove"] = (SSshuttle.supply.getDockedId() == "supply_away") && !(SSshuttle.supply.mode != SHUTTLE_IDLE) && !is_public data["points"] = round(SSshuttle.points) + data["credits"] = SSshuttle.cargo_money_account.money data["moving"] = SSshuttle.supply.mode != SHUTTLE_IDLE data["at_station"] = SSshuttle.supply.getDockedId() == "supply_home" @@ -442,7 +450,7 @@ var/datum/supply_packs/pack = SSshuttle.supply_packs[set_name] var/has_sale = pack.cost < initial(pack.cost) if((pack.hidden && hacked) || (pack.contraband && can_order_contraband) || (pack.special && pack.special_enabled) || (!pack.contraband && !pack.hidden && !pack.special)) - packs_list.Add(list(list("name" = pack.name, "cost" = pack.cost, "ref" = "[pack.UID()]", "contents" = pack.ui_manifest, "cat" = pack.group, "has_sale" = has_sale))) + packs_list.Add(list(list("name" = pack.name, "cost" = pack.cost, "creditsCost" = pack.credits_cost, "ref" = "[pack.UID()]", "contents" = pack.ui_manifest, "cat" = pack.group, "has_sale" = has_sale))) data["supply_packs"] = packs_list @@ -561,6 +569,8 @@ else if(P.can_approve(usr)) SSshuttle.requestlist.Cut(i,i+1) SSshuttle.points -= P.cost + if(P.credits_cost) + SSshuttle.cargo_money_account.money -= P.credits_cost SSshuttle.shoppinglist += O P.times_ordered += 1 investigate_log("[key_name_log(usr)] has authorized an order for [P.name]. Remaining points: [SSshuttle.points].", INVESTIGATE_CARGO) diff --git a/code/modules/spacepods/lock_buster.dm b/code/modules/spacepods/lock_buster.dm index 8a83315ce3d..57ff9030524 100644 --- a/code/modules/spacepods/lock_buster.dm +++ b/code/modules/spacepods/lock_buster.dm @@ -3,12 +3,15 @@ desc = "Destroys a podlock in mere seconds once applied. Waranty void if used." icon = 'icons/obj/device.dmi' icon_state = "lock_buster_off" - var/on = 0 + var/on = FALSE -/obj/item/lock_buster/attack_self(mob/user as mob) + +/obj/item/lock_buster/update_icon_state() + icon_state = "lock_buster_[on ? "on" : "off"]" + + +/obj/item/lock_buster/attack_self(mob/user = usr) on = !on - if(on) - icon_state = "lock_buster_on" - else - icon_state = "lock_buster_off" - to_chat(usr, "You turn the [src] [on ? "on" : "off"].") + update_icon(UPDATE_ICON_STATE) + to_chat(user, span_notice("You turn the [src] [on ? "on" : "off"].")) + diff --git a/code/modules/spacepods/parts.dm b/code/modules/spacepods/parts.dm index ec1d8665023..6d5553aafe7 100644 --- a/code/modules/spacepods/parts.dm +++ b/code/modules/spacepods/parts.dm @@ -74,7 +74,7 @@ pod.loc = F.loc qdel(F) playsound(get_turf(src), O.usesound, 50, 1) - if(istype(O, /obj/item/wrench)) + if(O.tool_behaviour == TOOL_WRENCH) to_chat(user, "You [!anchored ? "secure \the [src] in place." : "remove the securing bolts."]") anchored = !anchored density = anchored diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index cd1eaef4c68..ce20a992167 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -726,7 +726,7 @@ playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) return 1 -/obj/spacepod/MouseDrop_T(atom/A, mob/user) +/obj/spacepod/MouseDrop_T(atom/A, mob/user, params) if(user == pilot || (user in passengers)) return diff --git a/code/modules/station_goals/brs/brs_reward.dm b/code/modules/station_goals/brs/brs_reward.dm index 819a5118965..e5e4a010c62 100644 --- a/code/modules/station_goals/brs/brs_reward.dm +++ b/code/modules/station_goals/brs/brs_reward.dm @@ -4,7 +4,7 @@ origin_tech = "bluespace=9;magnets=8" icon_state = "docs_part" -/obj/item/paper/researchnotes_brs/update_icon() +/obj/item/paper/researchnotes_brs/update_icon_state() return /obj/structure/toilet/bluespace @@ -14,13 +14,18 @@ var/teleport_sound = 'sound/magic/lightning_chargeup.ogg' var/teleport_sound_cooldown = FALSE -/obj/structure/toilet/bluespace/update_icon() + +/obj/structure/toilet/bluespace/update_icon_state() . = ..() icon_state = "bluespace_toilet[open][cistern]" - overlays.Cut() + + +/obj/structure/toilet/bluespace/update_overlays() + . = ..() if(open) overlays += image(icon, "bluespace_toilet_singularity") + /obj/structure/toilet/bluespace/attack_hand(mob/living/user) . = ..() if(open) @@ -47,8 +52,8 @@ /obj/structure/toilet/bluespace/nt icon_state = "bluespace_toilet00-NT" -/obj/structure/toilet/bluespace/nt/update_icon() - . = ..() +/obj/structure/toilet/bluespace/nt/update_icon_state() + ..() icon_state = "bluespace_toilet[open][cistern]-NT" /obj/effect/spawner/lootdrop/bluespace_rift diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 95f96c26a58..ca5e56d8928 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -44,7 +44,7 @@ var/obj/item/multitool/M = W M.buffer = src to_chat(user, "You store linkage information in [W]'s buffer.") - else if(istype(W, /obj/item/wrench)) + else if(W.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) default_unfasten_wrench(user, W, 10) return TRUE @@ -62,7 +62,7 @@ var/obj/item/multitool/M = W M.buffer = src to_chat(user, "You store linkage information in [W]'s buffer.") - else if(istype(W, /obj/item/wrench)) + else if(W.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) default_unfasten_wrench(user, W, 10) return TRUE @@ -89,7 +89,7 @@ front = M.buffer M.buffer = null to_chat(user, "You link [src] with [front].") - else if(istype(W, /obj/item/wrench)) + else if(W.tool_behaviour == TOOL_WRENCH) add_fingerprint(user) default_unfasten_wrench(user, W, 10) return TRUE diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index da3020e486b..db0bf822685 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -192,19 +192,16 @@ GLOBAL_LIST_INIT(non_simple_animals, typecacheof(list(/mob/living/carbon/human/l ..() -/obj/machinery/dna_vault/update_icon() - ..() +/obj/machinery/dna_vault/update_icon_state() if(stat & NOPOWER) icon_state = "vaultoff" return icon_state = "vault" -/obj/machinery/dna_vault/power_change() - if(powered(power_channel)) - stat &= ~NOPOWER - else - stat |= NOPOWER - update_icon() +/obj/machinery/dna_vault/power_change(forced = FALSE) + if(!..()) + return + update_icon(UPDATE_ICON_STATE) /obj/machinery/dna_vault/Destroy() diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 35d0aca8532..e5bacfad02c 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -143,7 +143,7 @@ icon_state = active ? "sat_active" : "sat_inactive" /obj/machinery/satellite/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/multitool)) + if(I.tool_behaviour == TOOL_MULTITOOL) add_fingerprint(user) to_chat(user, "// NTSAT-[id] // Режим : [active ? "ОСНОВНОЙ" : "ОЖИДАНИЕ"] //[emagged ? "ОТЛАДКА //" : ""]") else diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index bc507c66e79..1b1d65f5a98 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -78,25 +78,28 @@ origin_tech = "materials=5;programming=4;biotech=4;magnets=4" aug_message = "You see prey everywhere you look..." +/obj/item/organ/internal/cyberimp/eyes/thermals/empproof/emp_act(severity) + return + // HUD implants /obj/item/organ/internal/cyberimp/eyes/hud name = "HUD implant" desc = "These cybernetic eyes will display a HUD over everything you see. Maybe." slot = INTERNAL_ORGAN_EYE_HUD_DEVICE - var/HUD_type = 0 + var/HUDType = 0 /// A list of extension kinds added to the examine text. Things like medical or security records. - var/list/examine_extensions = null + var/examine_extensions = 0 /obj/item/organ/internal/cyberimp/eyes/hud/insert(mob/living/carbon/M, special = ORGAN_MANIPULATION_DEFAULT) . = ..() - if(HUD_type) - var/datum/atom_hud/H = GLOB.huds[HUD_type] + if(HUDType) + var/datum/atom_hud/H = GLOB.huds[HUDType] H.add_hud_to(M) /obj/item/organ/internal/cyberimp/eyes/hud/remove(mob/living/carbon/M, special = ORGAN_MANIPULATION_DEFAULT) . = ..() - if(HUD_type) - var/datum/atom_hud/H = GLOB.huds[HUD_type] + if(HUDType) + var/datum/atom_hud/H = GLOB.huds[HUDType] H.remove_hud_from(M) /obj/item/organ/internal/cyberimp/eyes/hud/medical @@ -106,8 +109,8 @@ implant_color = "#00FFFF" origin_tech = "materials=4;programming=4;biotech=4" aug_message = "You suddenly see health bars floating above people's heads..." - HUD_type = DATA_HUD_MEDICAL_ADVANCED - examine_extensions = list(EXAMINE_HUD_MEDICAL) + HUDType = DATA_HUD_MEDICAL_ADVANCED + examine_extensions = EXAMINE_HUD_MEDICAL /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic name = "Diagnostic HUD implant" @@ -116,7 +119,7 @@ implant_color = "#ff9000" origin_tech = "materials=4;engineering=4;biotech=4" aug_message = "You see the diagnostic information of the synthetics around you..." - HUD_type = DATA_HUD_DIAGNOSTIC + HUDType = DATA_HUD_DIAGNOSTIC /obj/item/organ/internal/cyberimp/eyes/hud/security name = "Security HUD implant" @@ -125,8 +128,8 @@ implant_color = "#CC0000" origin_tech = "materials=4;programming=4;biotech=3;combat=3" aug_message = "Job indicator icons pop up in your vision. That is not a certified surgeon..." - HUD_type = DATA_HUD_SECURITY_ADVANCED - examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE) + HUDType = DATA_HUD_SECURITY_ADVANCED + examine_extensions = EXAMINE_HUD_SECURITY_READ | EXAMINE_HUD_SECURITY_WRITE // Welding shield implant /obj/item/organ/internal/cyberimp/eyes/shield diff --git a/code/modules/surgery/organs/autoimplanter.dm b/code/modules/surgery/organs/autoimplanter.dm index 4a8df60e841..35fef61759c 100644 --- a/code/modules/surgery/organs/autoimplanter.dm +++ b/code/modules/surgery/organs/autoimplanter.dm @@ -31,7 +31,7 @@ I.forceMove(src) storedorgan = I to_chat(user, "You insert the [I] into [src].") - else if(istype(I, /obj/item/screwdriver)) + else if(I.tool_behaviour == TOOL_SCREWDRIVER) if(!storedorgan) to_chat(user, "There's no implant in [src] for you to remove.") else @@ -51,7 +51,7 @@ qdel(src) /obj/item/autoimplanter/oneuse/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/screwdriver)) + if(I.tool_behaviour == TOOL_SCREWDRIVER) storedorgan.forceMove(get_turf(user)) storedorgan = null to_chat(user, "You remove the [storedorgan] from [src].") diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 9399e1d36ad..005ac0c47cf 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -8,7 +8,7 @@ dead_icon = "heart-off" var/icon_base = "heart" -/obj/item/organ/internal/heart/update_icon() +/obj/item/organ/internal/heart/update_icon_state() if(beating) icon_state = "[icon_base]-on" else diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index 3820587dfb1..407616ce36e 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -131,14 +131,15 @@ GLOBAL_LIST_EMPTY(limb_icon_cache) add_overlay(head_accessory_s) if(f_style) - var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[f_style] - if(facial_hair_style && ((facial_hair_style.species_allowed && (dna.species.name in facial_hair_style.species_allowed)) || (dna.species.bodyflags & ALL_RPARTS))) - var/icon/facial_s = new /icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - if(istype(dna.species, /datum/species/slime)) // I am el worstos - facial_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha. - else if(facial_hair_style.do_colouration) - facial_s.Blend(facial_colour, ICON_ADD) - add_overlay(facial_s) + if(!ismachineperson(owner) || (ismachineperson(owner) && ((owner.head && (owner.head.flags & BLOCKFACIALHAIR)) || (owner.wear_mask && (owner.wear_mask.flags & BLOCKFACIALHAIR))))) + var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[f_style] + if(facial_hair_style && ((facial_hair_style.species_allowed && (dna.species.name in facial_hair_style.species_allowed)) || (dna.species.bodyflags & ALL_RPARTS))) + var/icon/facial_s = new /icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") + if(istype(dna.species, /datum/species/slime)) // I am el worstos + facial_s.Blend("[owner.skin_colour]A0", ICON_AND) //A0 = 160 alpha. + else if(facial_hair_style.do_colouration) + facial_s.Blend(facial_colour, ICON_ADD) + add_overlay(facial_s) if(h_style) if(!ismachineperson(owner) || (ismachineperson(owner) && ((owner.head && (owner.head.flags & BLOCKHEADHAIR)) || (owner.wear_mask && (owner.wear_mask.flags & BLOCKHEADHAIR))))) @@ -189,7 +190,7 @@ GLOBAL_LIST_EMPTY(limb_icon_cache) // new damage icon system // adjusted to set damage_state to brute/burn code only (without r_name0 as before) -/obj/item/organ/external/update_icon() +/obj/item/organ/external/update_icon_state() var/n_is = damage_state_text() if(n_is != damage_state) damage_state = n_is diff --git a/code/modules/surgery/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm index e56e1805f4b..f7f79630138 100644 --- a/code/modules/surgery/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -148,7 +148,7 @@ icon_state = "nymph" parent_organ_zone = BODY_ZONE_PRECISE_GROIN -/obj/item/organ/internal/heart/diona/update_icon() +/obj/item/organ/internal/heart/diona/update_icon_state() return /obj/item/organ/internal/eyes/diona diff --git a/code/modules/surgery/organs/subtypes/slime.dm b/code/modules/surgery/organs/subtypes/slime.dm index 19eccc1bdb9..04f86b4afd2 100644 --- a/code/modules/surgery/organs/subtypes/slime.dm +++ b/code/modules/surgery/organs/subtypes/slime.dm @@ -6,7 +6,7 @@ desc = "This is a slime's osmotic pressure regulator, it appears to be some kind of biological pump that uses osmotic pressure to regulate water flow. It seems to work similar to a heart." dead_icon = null -/obj/item/organ/internal/heart/slime/update_icon() +/obj/item/organ/internal/heart/slime/update_icon_state() return /obj/item/organ/internal/lungs/slime diff --git a/code/modules/surgery/organs/subtypes/xenos.dm b/code/modules/surgery/organs/subtypes/xenos.dm index e1311ed00da..c3eb12b9ff4 100644 --- a/code/modules/surgery/organs/subtypes/xenos.dm +++ b/code/modules/surgery/organs/subtypes/xenos.dm @@ -196,7 +196,7 @@ /obj/item/organ/internal/xenos/neurotoxin - name = "xeno neurotoxin gland" + name = "large xeno neurotoxin gland" icon_state = "neurotox" parent_organ_zone = BODY_ZONE_HEAD slot = INTERNAL_ORGAN_NEUROTOXIN_GLAND @@ -204,6 +204,7 @@ alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/neurotoxin) /obj/item/organ/internal/xenos/neurotoxin/sentinel + name = "medium xeno neurotoxin gland" alien_powers = list(/obj/effect/proc_holder/spell/alien_spell/neurotoxin/sentinel) /obj/item/organ/internal/xenos/resinspinner diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index cf1530b24fb..fe74a36e94a 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -35,23 +35,23 @@ GLOBAL_LIST_EMPTY(GPS_list) GLOB.poi_list.Add(src) if(name == initial(name)) name = "global positioning system ([gpstag])" - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/gps/Destroy() GLOB.GPS_list.Remove(src) GLOB.poi_list.Remove(src) return ..() -/obj/item/gps/update_icon() - cut_overlays() +/obj/item/gps/update_overlays() + . = ..() if(emped) - add_overlay("emp") + . += "emp" else if(tracking) - add_overlay("working") + . += "working" /obj/item/gps/emp_act(severity) emped = TRUE - update_icon() + update_icon(UPDATE_OVERLAYS) addtimer(CALLBACK(src, PROC_REF(reboot)), EMP_DISABLE_TIME) /obj/item/gps/AltClick(mob/living/user) @@ -67,7 +67,7 @@ GLOBAL_LIST_EMPTY(GPS_list) return tracking = !tracking - update_icon() + update_icon(UPDATE_OVERLAYS) if(tracking) to_chat(user, "[src] is now tracking, and visible to other GPS devices.") else @@ -120,7 +120,7 @@ GLOBAL_LIST_EMPTY(GPS_list) ui_interact(user) -/obj/item/gps/MouseDrop(atom/over) +/obj/item/gps/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) . = ..() var/mob/user = usr @@ -163,7 +163,7 @@ GLOBAL_LIST_EMPTY(GPS_list) */ /obj/item/gps/proc/reboot() emped = FALSE - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/gps/science icon_state = "gps-s" @@ -179,6 +179,12 @@ GLOBAL_LIST_EMPTY(GPS_list) desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life." tracking = FALSE +/obj/item/gps/security + icon_state = "gps-r" + gpstag = "SEC0" + desc = "A positioning system helpful for monitoring prisoners that are implanted with a tracking implant." + local = TRUE + /obj/item/gps/cyborg icon_state = "gps-b" gpstag = "BORG0" @@ -201,7 +207,7 @@ GLOBAL_LIST_EMPTY(GPS_list) local = TRUE gpstag = "Eerie Signal" desc = "Report to a coder immediately." - invisibility = INVISIBILITY_MAXIMUM + invisibility = INVISIBILITY_ABSTRACT /obj/item/gps/internal/mining icon_state = "gps-m" diff --git a/code/modules/vehicle/ambulance.dm b/code/modules/vehicle/ambulance.dm index fd4a5904fd1..d1a86817085 100644 --- a/code/modules/vehicle/ambulance.dm +++ b/code/modules/vehicle/ambulance.dm @@ -112,13 +112,15 @@ . = ..() . += "Drag [src]'s sprite over the ambulance to (de)attach it." -/obj/structure/bed/amb_trolley/MouseDrop(obj/over_object as obj) - ..() - if(istype(over_object, /obj/vehicle/ambulance)) - var/obj/vehicle/ambulance/amb = over_object - if(amb.bed) - amb.bed = null - to_chat(usr, "You unhook the bed to the ambulance.") - else - amb.bed = src - to_chat(usr, "You hook the bed to the ambulance.") +/obj/structure/bed/amb_trolley/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params) + . = ..() + if(!. || !istype(over_object, /obj/vehicle/ambulance)) + return FALSE + + var/obj/vehicle/ambulance/amb = over_object + if(amb.bed) + amb.bed = null + to_chat(usr, "You unhook the bed to the ambulance.") + else + amb.bed = src + to_chat(usr, "You hook the bed to the ambulance.") diff --git a/code/modules/vehicle/janicart.dm b/code/modules/vehicle/janicart.dm index b0b28c7f4d7..3e61fc16851 100644 --- a/code/modules/vehicle/janicart.dm +++ b/code/modules/vehicle/janicart.dm @@ -55,7 +55,7 @@ I.forceMove(src) to_chat(user, "") trash_bag = I - update_icon() + update_icon(UPDATE_OVERLAYS) else if(istype(I, /obj/item/janiupgrade)) if(floorbuffer) to_chat(user, "[src] already has an upgrade installed! Use a screwdriver to remove it.") @@ -63,18 +63,20 @@ floorbuffer = TRUE qdel(I) to_chat(user,"You upgrade [src] with [I].") - update_icon() + update_icon(UPDATE_OVERLAYS) else if(trash_bag && (!is_key(I) || is_key(inserted_key))) // don't put a key in the trash when we need it trash_bag.attackby(I, user) else return ..() -/obj/vehicle/janicart/update_icon() - cut_overlays() + +/obj/vehicle/janicart/update_overlays() + . = ..() if(trash_bag) - add_overlay("cart_garbage") + . += "cart_garbage" if(floorbuffer) - add_overlay("cart_buffer") + . += "cart_buffer" + /obj/vehicle/janicart/attack_hand(mob/user) if(..()) @@ -83,7 +85,7 @@ trash_bag.forceMove_turf() user.put_in_hands(trash_bag, ignore_anim = FALSE) trash_bag = null - update_icon() + update_icon(UPDATE_OVERLAYS) /obj/item/key/janitor desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." diff --git a/code/modules/vehicle/vehicle.dm b/code/modules/vehicle/vehicle.dm index c035cd89244..7ce0f7371d1 100644 --- a/code/modules/vehicle/vehicle.dm +++ b/code/modules/vehicle/vehicle.dm @@ -113,10 +113,6 @@ buckled_mob.pixel_y = generic_pixel_y -/obj/vehicle/update_icon() - return - - /obj/item/key name = "key" desc = "A small grey key." diff --git a/config/example/dbconfig.txt b/config/example/dbconfig.txt index e64d877ec4a..0315c714374 100644 --- a/config/example/dbconfig.txt +++ b/config/example/dbconfig.txt @@ -9,7 +9,7 @@ ## This value must be set to the version of the paradise schema in use. ## If this value does not match, the SQL database will not be loaded and an error will be generated. ## Roundstart will be delayed. -DB_VERSION 31 +DB_VERSION 32 ## Server the MySQL database can be found at. # Examples: localhost, 200.135.5.43, www.mysqldb.com, etc. diff --git a/goon/browserassets/css/browserOutput-dark.css b/goon/browserassets/css/browserOutput-dark.css index 6f5272afe53..1fc0d8ec93e 100644 --- a/goon/browserassets/css/browserOutput-dark.css +++ b/goon/browserassets/css/browserOutput-dark.css @@ -21,6 +21,7 @@ body { scrollbar-face-color:#1A1A1A; scrollbar-track-color:#171717; scrollbar-highlight-color:#171717; + scrollbar-arrow-color: #a4bad6; } h1, h2, h3, h4, h5, h6 {color: #06f; font-family: Georgia, Verdana, sans-serif;} @@ -266,7 +267,7 @@ em {font-style: normal;font-weight: bold;} .ooc {font-weight: bold;} .looc {color: #6699CC;} .adminobserverooc {color: #0099cc;font-weight: bold;} -.adminooc {color: #b82e00;font-weight: bold;} +.adminooc {color: #a0320e;font-weight: bold;} .adminobserver {color: #996600;font-weight: bold;} .admin {color: #386aff;font-weight: bold;} .adminsay {color: #9611D4;font-weight: bold;} @@ -292,7 +293,7 @@ em {font-style: normal;font-weight: bold;} .event_gamma {color: #d46549;} .dsquadradio {color: #998599;} .resteamradio {color: #18BC46;} -.airadio {color: #ff5ed7;} +.airadio {color: #de4fbb;} .centradio {color: #2681a5;} .secradio {color: #CF0000;} /* .engradio {color: #FEAC20;} */ @@ -300,7 +301,7 @@ em {font-style: normal;font-weight: bold;} .sciradio {color: #c68cfa;} .supradio {color: #9F8545;} .srvradio {color: #bbd164;} -.proradio {color: #b84f92;} +/* .proradio {color: #b84f92;} */ .admin_channel {color: #fcba03;} .all_admin_ping {color: #12A5F4; font-weight: bold; font-size: 120%; text-align: center;} .mentor_channel {color: #775BFF;font-weight: bold;} @@ -314,8 +315,8 @@ h1.alert, h2.alert {color: #a4bad6;} .emote {font-style: italic;} .selecteddna {color: #a4bad6; background-color: #001B1B} -.attack {color: #ff0000;} -.moderate {color: #CC0000;} +.attack {color: #be2020;} +.moderate {color: #a91b1b;} .disarm {color: #990000;} .passive {color: #660000;} @@ -328,26 +329,35 @@ h1.alert, h2.alert {color: #a4bad6;} .info {color: #9ab0ff;} .notice {color: #6685f5;} .boldnotice {color: #6685f5;font-weight: bold;} -.suicide {color: #ff5050;font-style: italic;} +.suicide {color: #d33838;font-style: italic;} .green {color: #03bb39;} .pr_announce {color: #c51e1e;font-weight: bold;} .boldannounce {color: #c51e1e;font-weight: bold;} .greenannounce {color: #059223;font-weight: bold;} -.alien {color: #543354;} -.noticealien {color: #00c000;} -.alertalien {color: #00c000; font-weight: bold;} -.terrorspider {color: #822382;} +.alien {color: #923492;} +.noticealien {color: #00a000;} +.alertalien {color: #00a000; font-weight: bold;} +.terrorspider {color: #7d0284;} .dantalion {color: #1a7d5b;} .sinister {color: #800080;font-weight: bold;font-style: italic;} /* /vg/ */ -.blob {color: #006221;font-weight: bold;font-style: italic;} -.confirm {color: #00af3b;} +.blob {color: #006221;font-weight: bold;font-style: italic;} +.blobteslium_paste {color: #512e89;font-weight: bold;font-style: italic;} +.blobradioactive_gel {color: #2476f0;font-weight: bold;font-style: italic;} +.blobb_sorium {color: #808000;font-weight: bold;font-style: italic;} +.blobcryogenic_liquid {color: #8BA6E9;font-weight: bold;font-style: italic;} +.blobkinetic {color: #FFA500;font-weight: bold;font-style: italic;} +.bloblexorin_jelly {color: #00FFC5;font-weight: bold;font-style: italic;} +.blobenvenomed_filaments {color: #9ACD32;font-weight: bold;font-style: italic;} +.blobboiling_oil {color: #B68D00;font-weight: bold;font-style: italic;} +.blobripping_tendrils {color: #7F0000;font-weight: bold;font-style: italic;} +.confirm {color: #00af3b;} .rose {color: #ff5050;} .sans {font-family: 'Comic Sans MS', cursive, sans-serif;} .wingdings {font-family: Wingdings, Webdings;} .robot {font-family: 'PxPlus IBM MDA'; font-size: 1.15em;} -.ancient {color: #008B8B;font-style: italic;} +.ancient {color: #008B8B;font-style: italic;} .newscaster {color: #CC0000;} .mod {color: #735638;font-weight: bold;} .modooc {color: #184880;font-weight: bold;} diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css index 0a4be213cdc..897423cb6cb 100644 --- a/goon/browserassets/css/browserOutput.css +++ b/goon/browserassets/css/browserOutput.css @@ -334,7 +334,16 @@ h1.alert, h2.alert {color: #000000;} .sinister {color: #800080; font-weight: bold; font-style: italic;} /* /vg/ */ -.blob {color: #006221; font-weight: bold; font-style: italic;} +.blob {color: #006221;font-weight: bold;font-style: italic;} +.blobteslium_paste {color: #412968;font-weight: bold;font-style: italic;} +.blobradioactive_gel {color: #2476f0;font-weight: bold;font-style: italic;} +.blobb_sorium {color: #808000;font-weight: bold;font-style: italic;} +.blobcryogenic_liquid {color: #8BA6E9;font-weight: bold;font-style: italic;} +.blobkinetic {color: #FFA500;font-weight: bold;font-style: italic;} +.bloblexorin_jelly {color: #00FFC5;font-weight: bold;font-style: italic;} +.blobenvenomed_filaments {color: #9ACD32;font-weight: bold;font-style: italic;} +.blobboiling_oil {color: #B68D00;font-weight: bold;font-style: italic;} +.blobripping_tendrils {color: #7F0000;font-weight: bold;font-style: italic;} .confirm {color: #00af3b;} .rose {color: #ff5050;} .sans {font-family: 'Comic Sans MS', cursive, sans-serif;} diff --git a/html/browser/bootstrap.min.css b/html/browser/bootstrap.min.css new file mode 100644 index 00000000000..840cf2b504f --- /dev/null +++ b/html/browser/bootstrap.min.css @@ -0,0 +1,2131 @@ +/*! + * Bootstrap v4.6.2 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px} +*,::after,::before{box-sizing:border-box} +html{line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent} +article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block} +[tabindex="-1"]:focus:not(:focus-visible){outline:0!important} +hr{box-sizing:content-box;height:0;overflow:visible} +h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem} +p{margin-top:0;margin-bottom:1rem} +abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none} +address{margin-bottom:1rem;font-style:normal;line-height:inherit} +dl,ol,ul{margin-top:0;margin-bottom:1rem} +ol ol,ol ul,ul ol,ul ul{margin-bottom:0} +dt{font-weight:700} +dd{margin-bottom:.5rem;margin-left:0} +blockquote{margin:0 0 1rem} +b,strong{font-weight:bolder} +small{font-size:80%} +sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline} +sub{bottom:-.25em} +sup{top:-.5em} +a{color:#007bff;text-decoration:none;background-color:transparent} +a:hover{color:#0056b3;text-decoration:underline} +a:not([href]):not([class]){color:inherit;text-decoration:none} +a:not([href]):not([class]):hover{color:inherit;text-decoration:none} +code,kbd,pre,samp{font-size:1em} +pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar} +figure{margin:0 0 1rem} +img{vertical-align:middle;border-style:none} +svg{overflow:hidden;vertical-align:middle} +table{border-collapse:collapse} +caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom} +th{text-align:inherit;text-align:-webkit-match-parent} +label{display:inline-block;margin-bottom:.5rem} +button{border-radius:0} +button:focus:not(:focus-visible){outline:0} +button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit} +button,input{overflow:visible} +button,select{text-transform:none} +[role=button]{cursor:pointer} +select{word-wrap:normal} +[type=button],[type=reset],[type=submit],button{-webkit-appearance:button} +[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer} +[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none} +input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0} +textarea{overflow:auto;resize:vertical} +fieldset{min-width:0;padding:0;margin:0;border:0} +legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5em;line-height:inherit;color:inherit;white-space:normal} +progress{vertical-align:baseline} +[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto} +[type=search]{outline-offset:-2px;-webkit-appearance:none} +[type=search]::-webkit-search-decoration{-webkit-appearance:none} +::-webkit-file-upload-button{font:inherit;-webkit-appearance:button} +output{display:inline-block} +summary{display:list-item;cursor:pointer} +template{display:none} +[hidden]{display:none!important} +.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2} +.h1,h1{font-size:2.5em} +.h2,h2{font-size:2em} +.h3,h3{font-size:1.75em} +.h4,h4{font-size:1.5em} +.h5,h5{font-size:1.25em} +.h6,h6{font-size:1em} +.lead{font-size:1.25em;font-weight:300} +.display-1{font-size:6em;font-weight:300;line-height:1.2} +.display-2{font-size:5.5em;font-weight:300;line-height:1.2} +.display-3{font-size:4.5em;font-weight:300;line-height:1.2} +.display-4{font-size:3.5em;font-weight:300;line-height:1.2} +hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)} +.small,small{font-size:.875em;font-weight:400} +.mark,mark{padding:.2em;background-color:#fcf8e3} +.list-unstyled{padding-left:0;list-style:none} +.list-inline{padding-left:0;list-style:none} +.list-inline-item{display:inline-block} +.list-inline-item:not(:last-child){margin-right:.5rem} +.initialism{font-size:90%;text-transform:uppercase} +.blockquote{margin-bottom:1rem;font-size:1.25em} +.blockquote-footer{display:block;font-size:.875em;color:#6c757d} +.blockquote-footer::before{content:"\2014\00A0"} +.img-fluid{max-width:100%;height:auto} +.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto} +.figure{display:inline-block} +.figure-img{margin-bottom:.5rem;line-height:1} +.figure-caption{font-size:90%;color:#6c757d} +code{font-size:87.5%;color:#e83e8c;word-wrap:break-word} +a>code{color:inherit} +kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem} +kbd kbd{padding:0;font-size:100%;font-weight:700} +pre{display:block;font-size:87.5%;color:#212529} +pre code{font-size:inherit;color:inherit;word-break:normal} +.pre-scrollable{max-height:340px;overflow-y:scroll} +.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto} +@media (min-width:576px){.container,.container-sm{max-width:540px} +} +@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px} +} +@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px} +} +@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px} +} +.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px} +.no-gutters{margin-right:0;margin-left:0} +.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0} +.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px} +.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%} +.row-cols-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.row-cols-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.row-cols-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.row-cols-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.row-cols-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%} +.row-cols-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%} +.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%} +.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%} +.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%} +.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%} +.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%} +.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%} +.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%} +.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.order-first{-ms-flex-order:-1;order:-1} +.order-last{-ms-flex-order:13;order:13} +.order-0{-ms-flex-order:0;order:0} +.order-1{-ms-flex-order:1;order:1} +.order-2{-ms-flex-order:2;order:2} +.order-3{-ms-flex-order:3;order:3} +.order-4{-ms-flex-order:4;order:4} +.order-5{-ms-flex-order:5;order:5} +.order-6{-ms-flex-order:6;order:6} +.order-7{-ms-flex-order:7;order:7} +.order-8{-ms-flex-order:8;order:8} +.order-9{-ms-flex-order:9;order:9} +.order-10{-ms-flex-order:10;order:10} +.order-11{-ms-flex-order:11;order:11} +.order-12{-ms-flex-order:12;order:12} +.offset-1{margin-left:8.333333%} +.offset-2{margin-left:16.666667%} +.offset-3{margin-left:25%} +.offset-4{margin-left:33.333333%} +.offset-5{margin-left:41.666667%} +.offset-6{margin-left:50%} +.offset-7{margin-left:58.333333%} +.offset-8{margin-left:66.666667%} +.offset-9{margin-left:75%} +.offset-10{margin-left:83.333333%} +.offset-11{margin-left:91.666667%} +@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%} +.row-cols-sm-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.row-cols-sm-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.row-cols-sm-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.row-cols-sm-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.row-cols-sm-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%} +.row-cols-sm-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%} +.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%} +.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%} +.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%} +.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%} +.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%} +.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%} +.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%} +.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.order-sm-first{-ms-flex-order:-1;order:-1} +.order-sm-last{-ms-flex-order:13;order:13} +.order-sm-0{-ms-flex-order:0;order:0} +.order-sm-1{-ms-flex-order:1;order:1} +.order-sm-2{-ms-flex-order:2;order:2} +.order-sm-3{-ms-flex-order:3;order:3} +.order-sm-4{-ms-flex-order:4;order:4} +.order-sm-5{-ms-flex-order:5;order:5} +.order-sm-6{-ms-flex-order:6;order:6} +.order-sm-7{-ms-flex-order:7;order:7} +.order-sm-8{-ms-flex-order:8;order:8} +.order-sm-9{-ms-flex-order:9;order:9} +.order-sm-10{-ms-flex-order:10;order:10} +.order-sm-11{-ms-flex-order:11;order:11} +.order-sm-12{-ms-flex-order:12;order:12} +.offset-sm-0{margin-left:0} +.offset-sm-1{margin-left:8.333333%} +.offset-sm-2{margin-left:16.666667%} +.offset-sm-3{margin-left:25%} +.offset-sm-4{margin-left:33.333333%} +.offset-sm-5{margin-left:41.666667%} +.offset-sm-6{margin-left:50%} +.offset-sm-7{margin-left:58.333333%} +.offset-sm-8{margin-left:66.666667%} +.offset-sm-9{margin-left:75%} +.offset-sm-10{margin-left:83.333333%} +.offset-sm-11{margin-left:91.666667%} +} +@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%} +.row-cols-md-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.row-cols-md-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.row-cols-md-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.row-cols-md-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.row-cols-md-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%} +.row-cols-md-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%} +.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%} +.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%} +.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%} +.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%} +.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%} +.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%} +.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%} +.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.order-md-first{-ms-flex-order:-1;order:-1} +.order-md-last{-ms-flex-order:13;order:13} +.order-md-0{-ms-flex-order:0;order:0} +.order-md-1{-ms-flex-order:1;order:1} +.order-md-2{-ms-flex-order:2;order:2} +.order-md-3{-ms-flex-order:3;order:3} +.order-md-4{-ms-flex-order:4;order:4} +.order-md-5{-ms-flex-order:5;order:5} +.order-md-6{-ms-flex-order:6;order:6} +.order-md-7{-ms-flex-order:7;order:7} +.order-md-8{-ms-flex-order:8;order:8} +.order-md-9{-ms-flex-order:9;order:9} +.order-md-10{-ms-flex-order:10;order:10} +.order-md-11{-ms-flex-order:11;order:11} +.order-md-12{-ms-flex-order:12;order:12} +.offset-md-0{margin-left:0} +.offset-md-1{margin-left:8.333333%} +.offset-md-2{margin-left:16.666667%} +.offset-md-3{margin-left:25%} +.offset-md-4{margin-left:33.333333%} +.offset-md-5{margin-left:41.666667%} +.offset-md-6{margin-left:50%} +.offset-md-7{margin-left:58.333333%} +.offset-md-8{margin-left:66.666667%} +.offset-md-9{margin-left:75%} +.offset-md-10{margin-left:83.333333%} +.offset-md-11{margin-left:91.666667%} +} +@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%} +.row-cols-lg-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.row-cols-lg-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.row-cols-lg-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.row-cols-lg-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.row-cols-lg-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%} +.row-cols-lg-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%} +.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%} +.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%} +.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%} +.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%} +.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%} +.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%} +.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%} +.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.order-lg-first{-ms-flex-order:-1;order:-1} +.order-lg-last{-ms-flex-order:13;order:13} +.order-lg-0{-ms-flex-order:0;order:0} +.order-lg-1{-ms-flex-order:1;order:1} +.order-lg-2{-ms-flex-order:2;order:2} +.order-lg-3{-ms-flex-order:3;order:3} +.order-lg-4{-ms-flex-order:4;order:4} +.order-lg-5{-ms-flex-order:5;order:5} +.order-lg-6{-ms-flex-order:6;order:6} +.order-lg-7{-ms-flex-order:7;order:7} +.order-lg-8{-ms-flex-order:8;order:8} +.order-lg-9{-ms-flex-order:9;order:9} +.order-lg-10{-ms-flex-order:10;order:10} +.order-lg-11{-ms-flex-order:11;order:11} +.order-lg-12{-ms-flex-order:12;order:12} +.offset-lg-0{margin-left:0} +.offset-lg-1{margin-left:8.333333%} +.offset-lg-2{margin-left:16.666667%} +.offset-lg-3{margin-left:25%} +.offset-lg-4{margin-left:33.333333%} +.offset-lg-5{margin-left:41.666667%} +.offset-lg-6{margin-left:50%} +.offset-lg-7{margin-left:58.333333%} +.offset-lg-8{margin-left:66.666667%} +.offset-lg-9{margin-left:75%} +.offset-lg-10{margin-left:83.333333%} +.offset-lg-11{margin-left:91.666667%} +} +@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%} +.row-cols-xl-1>*{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.row-cols-xl-2>*{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.row-cols-xl-3>*{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.row-cols-xl-4>*{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.row-cols-xl-5>*{-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%} +.row-cols-xl-6>*{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%} +.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%} +.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%} +.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%} +.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%} +.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%} +.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%} +.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%} +.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%} +.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%} +.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%} +.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%} +.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%} +.order-xl-first{-ms-flex-order:-1;order:-1} +.order-xl-last{-ms-flex-order:13;order:13} +.order-xl-0{-ms-flex-order:0;order:0} +.order-xl-1{-ms-flex-order:1;order:1} +.order-xl-2{-ms-flex-order:2;order:2} +.order-xl-3{-ms-flex-order:3;order:3} +.order-xl-4{-ms-flex-order:4;order:4} +.order-xl-5{-ms-flex-order:5;order:5} +.order-xl-6{-ms-flex-order:6;order:6} +.order-xl-7{-ms-flex-order:7;order:7} +.order-xl-8{-ms-flex-order:8;order:8} +.order-xl-9{-ms-flex-order:9;order:9} +.order-xl-10{-ms-flex-order:10;order:10} +.order-xl-11{-ms-flex-order:11;order:11} +.order-xl-12{-ms-flex-order:12;order:12} +.offset-xl-0{margin-left:0} +.offset-xl-1{margin-left:8.333333%} +.offset-xl-2{margin-left:16.666667%} +.offset-xl-3{margin-left:25%} +.offset-xl-4{margin-left:33.333333%} +.offset-xl-5{margin-left:41.666667%} +.offset-xl-6{margin-left:50%} +.offset-xl-7{margin-left:58.333333%} +.offset-xl-8{margin-left:66.666667%} +.offset-xl-9{margin-left:75%} +.offset-xl-10{margin-left:83.333333%} +.offset-xl-11{margin-left:91.666667%} +} +.table{width:100%;margin-bottom:1rem;color:#212529} +.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6} +.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6} +.table tbody+tbody{border-top:2px solid #dee2e6} +.table-sm td,.table-sm th{padding:.3rem} +.table-bordered{border:1px solid #dee2e6} +.table-bordered td,.table-bordered th{border:1px solid #dee2e6} +.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px} +.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0} +.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)} +.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)} +.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff} +.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff} +.table-hover .table-primary:hover{background-color:#9fcdff} +.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff} +.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db} +.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb} +.table-hover .table-secondary:hover{background-color:#c8cbcf} +.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf} +.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb} +.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e} +.table-hover .table-success:hover{background-color:#b1dfbb} +.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb} +.table-info,.table-info>td,.table-info>th{background-color:#bee5eb} +.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda} +.table-hover .table-info:hover{background-color:#abdde5} +.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5} +.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba} +.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e} +.table-hover .table-warning:hover{background-color:#ffe8a1} +.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1} +.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb} +.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e} +.table-hover .table-danger:hover{background-color:#f1b0b7} +.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7} +.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe} +.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc} +.table-hover .table-light:hover{background-color:#ececf6} +.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6} +.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca} +.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c} +.table-hover .table-dark:hover{background-color:#b9bbbe} +.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe} +.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)} +.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)} +.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)} +.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55} +.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6} +.table-dark{color:#fff;background-color:#343a40} +.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55} +.table-dark.table-bordered{border:0} +.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)} +.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)} +@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} +.table-responsive-sm>.table-bordered{border:0} +} +@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} +.table-responsive-md>.table-bordered{border:0} +} +@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} +.table-responsive-lg>.table-bordered{border:0} +} +@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} +.table-responsive-xl>.table-bordered{border:0} +} +.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch} +.table-responsive>.table-bordered{border:0} +.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1em;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out} +@media (prefers-reduced-motion:reduce){.form-control{transition:none} +} +.form-control::-ms-expand{background-color:transparent;border:0} +.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)} +.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1} +.form-control::-moz-placeholder{color:#6c757d;opacity:1} +.form-control:-ms-input-placeholder{color:#6c757d;opacity:1} +.form-control::-ms-input-placeholder{color:#6c757d;opacity:1} +.form-control::placeholder{color:#6c757d;opacity:1} +.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1} +input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none} +select.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057} +select.form-control:focus::-ms-value{color:#495057;background-color:#fff} +.form-control-file,.form-control-range{display:block;width:100%} +.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5} +.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25em;line-height:1.5} +.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875em;line-height:1.5} +.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1em;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0} +.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0} +.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875em;line-height:1.5;border-radius:.2rem} +.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25em;line-height:1.5;border-radius:.3rem} +select.form-control[multiple],select.form-control[size]{height:auto} +textarea.form-control{height:auto} +.form-group{margin-bottom:1rem} +.form-text{display:block;margin-top:.25rem} +.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px} +.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px} +.form-check{position:relative;display:block;padding-left:1.25rem} +.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem} +.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d} +.form-check-label{margin-bottom:0} +.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem} +.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0} +.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#28a745} +.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875em;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem} +.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px} +.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block} +.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem)!important;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)} +.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)} +.was-validated select.form-control:valid,select.form-control.is-valid{padding-right:3rem!important;background-position:right 1.5rem center} +.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)} +.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem)!important;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat} +.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)} +.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745} +.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block} +.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745} +.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745} +.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57} +.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)} +.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745} +.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745} +.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)} +.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545} +.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875em;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem} +.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px} +.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block} +.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem)!important;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)} +.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)} +.was-validated select.form-control:invalid,select.form-control.is-invalid{padding-right:3rem!important;background-position:right 1.5rem center} +.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)} +.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem)!important;background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat} +.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)} +.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545} +.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block} +.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545} +.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545} +.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d} +.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)} +.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545} +.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545} +.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)} +.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center} +.form-inline .form-check{width:100%} +@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0} +.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0} +.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle} +.form-inline .form-control-plaintext{display:inline-block} +.form-inline .custom-select,.form-inline .input-group{width:auto} +.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0} +.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0} +.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center} +.form-inline .custom-control-label{margin-bottom:0} +} +.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1em;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out} +@media (prefers-reduced-motion:reduce){.btn{transition:none} +} +.btn:hover{color:#212529;text-decoration:none} +.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)} +.btn.disabled,.btn:disabled{opacity:.65} +.btn:not(:disabled):not(.disabled){cursor:pointer} +a.btn.disabled,fieldset:disabled a.btn{pointer-events:none} +.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff} +.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc} +.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#0069d9;border-color:#0062cc;box-shadow:0 0 0 .2rem rgba(38,143,255,.5)} +.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff} +.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf} +.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)} +.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d} +.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62} +.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)} +.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d} +.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b} +.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)} +.btn-success{color:#fff;background-color:#28a745;border-color:#28a745} +.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34} +.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)} +.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745} +.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430} +.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)} +.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8} +.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b} +.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)} +.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8} +.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f} +.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)} +.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107} +.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00} +.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)} +.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107} +.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500} +.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)} +.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545} +.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130} +.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)} +.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545} +.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d} +.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)} +.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa} +.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5} +.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)} +.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa} +.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df} +.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)} +.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40} +.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124} +.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)} +.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40} +.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d} +.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)} +.btn-outline-primary{color:#007bff;border-color:#007bff} +.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff} +.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)} +.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent} +.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff} +.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)} +.btn-outline-secondary{color:#6c757d;border-color:#6c757d} +.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d} +.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)} +.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent} +.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d} +.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)} +.btn-outline-success{color:#28a745;border-color:#28a745} +.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745} +.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)} +.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent} +.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745} +.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)} +.btn-outline-info{color:#17a2b8;border-color:#17a2b8} +.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8} +.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)} +.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent} +.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8} +.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)} +.btn-outline-warning{color:#ffc107;border-color:#ffc107} +.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107} +.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)} +.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent} +.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107} +.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)} +.btn-outline-danger{color:#dc3545;border-color:#dc3545} +.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545} +.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)} +.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent} +.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545} +.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)} +.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa} +.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa} +.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)} +.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent} +.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa} +.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)} +.btn-outline-dark{color:#343a40;border-color:#343a40} +.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40} +.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)} +.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent} +.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40} +.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)} +.btn-link{font-weight:400;color:#007bff;text-decoration:none} +.btn-link:hover{color:#0056b3;text-decoration:underline} +.btn-link.focus,.btn-link:focus{text-decoration:underline} +.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none} +.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25em;line-height:1.5;border-radius:.3rem} +.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875em;line-height:1.5;border-radius:.2rem} +.btn-block{display:block;width:100%} +.btn-block+.btn-block{margin-top:.5rem} +input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%} +.fade{transition:opacity .15s linear} +@media (prefers-reduced-motion:reduce){.fade{transition:none} +} +.fade:not(.show){opacity:0} +.collapse:not(.show){display:none} +.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease} +@media (prefers-reduced-motion:reduce){.collapsing{transition:none} +} +.collapsing.width{width:0;height:auto;transition:width .35s ease} +@media (prefers-reduced-motion:reduce){.collapsing.width{transition:none} +} +.dropdown,.dropleft,.dropright,.dropup{position:relative} +.dropdown-toggle{white-space:nowrap} +.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent} +.dropdown-toggle:empty::after{margin-left:0} +.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1em;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem} +.dropdown-menu-left{right:auto;left:0} +.dropdown-menu-right{right:0;left:auto} +@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0} +.dropdown-menu-sm-right{right:0;left:auto} +} +@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0} +.dropdown-menu-md-right{right:0;left:auto} +} +@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0} +.dropdown-menu-lg-right{right:0;left:auto} +} +@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0} +.dropdown-menu-xl-right{right:0;left:auto} +} +.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem} +.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent} +.dropup .dropdown-toggle:empty::after{margin-left:0} +.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem} +.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid} +.dropright .dropdown-toggle:empty::after{margin-left:0} +.dropright .dropdown-toggle::after{vertical-align:0} +.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem} +.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""} +.dropleft .dropdown-toggle::after{display:none} +.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent} +.dropleft .dropdown-toggle:empty::after{margin-left:0} +.dropleft .dropdown-toggle::before{vertical-align:0} +.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto} +.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef} +.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0} +.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef} +.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff} +.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent} +.dropdown-menu.show{display:block} +.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875em;color:#6c757d;white-space:nowrap} +.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529} +.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle} +.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto} +.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1} +.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1} +.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start} +.btn-toolbar .input-group{width:auto} +.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px} +.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0} +.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0} +.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem} +.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0} +.dropleft .dropdown-toggle-split::before{margin-right:0} +.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem} +.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem} +.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center} +.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%} +.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px} +.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0} +.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0} +.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0} +.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none} +.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%} +.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0} +.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px} +.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3} +.input-group>.custom-file .custom-file-input:focus{z-index:4} +.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0} +.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center} +.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0} +.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0} +.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label,.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label::after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0} +.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label,.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label::after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0} +.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex} +.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2} +.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3} +.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px} +.input-group-prepend{margin-right:-1px} +.input-group-append{margin-left:-1px} +.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1em;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem} +.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0} +.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)} +.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25em;line-height:1.5;border-radius:.3rem} +.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)} +.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875em;line-height:1.5;border-radius:.2rem} +.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem} +.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0} +.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0} +.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact} +.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem} +.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0} +.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff} +.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)} +.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff} +.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff} +.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d} +.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef} +.custom-control-label{position:relative;margin-bottom:0;vertical-align:top} +.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:1px solid #adb5bd} +.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:50%/50% 50% no-repeat} +.custom-checkbox .custom-control-label::before{border-radius:.25rem} +.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")} +.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff} +.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")} +.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)} +.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)} +.custom-radio .custom-control-label::before{border-radius:50%} +.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")} +.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)} +.custom-switch{padding-left:2.25rem} +.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem} +.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out} +@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none} +} +.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)} +.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)} +.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1em;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none} +.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)} +.custom-select:focus::-ms-value{color:#495057;background-color:#fff} +.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none} +.custom-select:disabled{color:#6c757d;background-color:#e9ecef} +.custom-select::-ms-expand{display:none} +.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057} +.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem} +.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem} +.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0} +.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;overflow:hidden;opacity:0} +.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)} +.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef} +.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"} +.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)} +.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;overflow:hidden;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem} +.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0} +.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none} +.custom-range:focus{outline:0} +.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)} +.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)} +.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)} +.custom-range::-moz-focus-outer{border:0} +.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none} +@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none} +} +.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff} +.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem} +.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none} +@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none} +} +.custom-range::-moz-range-thumb:active{background-color:#b3d7ff} +.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem} +.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none} +@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none} +} +.custom-range::-ms-thumb:active{background-color:#b3d7ff} +.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem} +.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem} +.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem} +.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd} +.custom-range:disabled::-webkit-slider-runnable-track{cursor:default} +.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd} +.custom-range:disabled::-moz-range-track{cursor:default} +.custom-range:disabled::-ms-thumb{background-color:#adb5bd} +.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out} +@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none} +} +.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none} +.nav-link{display:block;padding:.5rem 1rem} +.nav-link:focus,.nav-link:hover{text-decoration:none} +.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default} +.nav-tabs{border-bottom:1px solid #dee2e6} +.nav-tabs .nav-link{margin-bottom:-1px;background-color:transparent;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem} +.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:#e9ecef #e9ecef #dee2e6} +.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent} +.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff} +.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0} +.nav-pills .nav-link{background:0 0;border:0;border-radius:.25rem} +.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff} +.nav-fill .nav-item,.nav-fill>.nav-link{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center} +.nav-justified .nav-item,.nav-justified>.nav-link{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center} +.tab-content>.tab-pane{display:none} +.tab-content>.active{display:block} +.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem} +.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between} +.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25em;line-height:inherit;white-space:nowrap} +.navbar-brand:focus,.navbar-brand:hover{text-decoration:none} +.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none} +.navbar-nav .nav-link{padding-right:0;padding-left:0} +.navbar-nav .dropdown-menu{position:static;float:none} +.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem} +.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center} +.navbar-toggler{padding:.25rem .75rem;font-size:1.25em;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem} +.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none} +.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat} +.navbar-nav-scroll{max-height:75vh;overflow-y:auto} +@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0} +} +@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start} +.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row} +.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute} +.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} +.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap} +.navbar-expand-sm .navbar-nav-scroll{overflow:visible} +.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto} +.navbar-expand-sm .navbar-toggler{display:none} +} +@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0} +} +@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start} +.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row} +.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute} +.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} +.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap} +.navbar-expand-md .navbar-nav-scroll{overflow:visible} +.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto} +.navbar-expand-md .navbar-toggler{display:none} +} +@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0} +} +@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start} +.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row} +.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute} +.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} +.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap} +.navbar-expand-lg .navbar-nav-scroll{overflow:visible} +.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto} +.navbar-expand-lg .navbar-toggler{display:none} +} +@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0} +} +@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start} +.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row} +.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute} +.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} +.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap} +.navbar-expand-xl .navbar-nav-scroll{overflow:visible} +.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto} +.navbar-expand-xl .navbar-toggler{display:none} +} +.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start} +.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0} +.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row} +.navbar-expand .navbar-nav .dropdown-menu{position:absolute} +.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem} +.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap} +.navbar-expand .navbar-nav-scroll{overflow:visible} +.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto} +.navbar-expand .navbar-toggler{display:none} +.navbar-light .navbar-brand{color:rgba(0,0,0,.9)} +.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)} +.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)} +.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)} +.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)} +.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)} +.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)} +.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")} +.navbar-light .navbar-text{color:rgba(0,0,0,.5)} +.navbar-light .navbar-text a{color:rgba(0,0,0,.9)} +.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)} +.navbar-dark .navbar-brand{color:#fff} +.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff} +.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)} +.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)} +.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)} +.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff} +.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)} +.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")} +.navbar-dark .navbar-text{color:rgba(255,255,255,.5)} +.navbar-dark .navbar-text a{color:#fff} +.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff} +.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem} +.card>hr{margin-right:0;margin-left:0} +.card>.list-group{border-top:inherit;border-bottom:inherit} +.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)} +.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)} +.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0} +.card-body{-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem} +.card-title{margin-bottom:.75rem} +.card-subtitle{margin-top:-.375rem;margin-bottom:0} +.card-text:last-child{margin-bottom:0} +.card-link:hover{text-decoration:none} +.card-link+.card-link{margin-left:1.25rem} +.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)} +.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0} +.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)} +.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)} +.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0} +.card-header-pills{margin-right:-.625rem;margin-left:-.625rem} +.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)} +.card-img,.card-img-bottom,.card-img-top{-ms-flex-negative:0;flex-shrink:0;width:100%} +.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)} +.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)} +.card-deck .card{margin-bottom:15px} +@media (min-width:576px){.card-deck{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px} +.card-deck .card{-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px} +} +.card-group>.card{margin-bottom:15px} +@media (min-width:576px){.card-group{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap} +.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0} +.card-group>.card+.card{margin-left:0;border-left:0} +.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0} +.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0} +.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0} +.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0} +.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0} +.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0} +} +.card-columns .card{margin-bottom:.75rem} +@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1} +.card-columns .card{display:inline-block;width:100%} +} +.accordion{overflow-anchor:none} +.accordion>.card{overflow:hidden} +.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0} +.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0} +.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px} +.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem} +.breadcrumb-item+.breadcrumb-item{padding-left:.5rem} +.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:"/"} +.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline} +.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none} +.breadcrumb-item.active{color:#6c757d} +.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem} +.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6} +.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6} +.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)} +.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem} +.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem} +.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff} +.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6} +.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25em;line-height:1.5} +.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem} +.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem} +.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875em;line-height:1.5} +.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem} +.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem} +.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out} +@media (prefers-reduced-motion:reduce){.badge{transition:none} +} +a.badge:focus,a.badge:hover{text-decoration:none} +.badge:empty{display:none} +.btn .badge{position:relative;top:-1px} +.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem} +.badge-primary{color:#fff;background-color:#007bff} +a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc} +a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)} +.badge-secondary{color:#fff;background-color:#6c757d} +a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62} +a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)} +.badge-success{color:#fff;background-color:#28a745} +a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34} +a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)} +.badge-info{color:#fff;background-color:#17a2b8} +a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b} +a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)} +.badge-warning{color:#212529;background-color:#ffc107} +a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00} +a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)} +.badge-danger{color:#fff;background-color:#dc3545} +a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130} +a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)} +.badge-light{color:#212529;background-color:#f8f9fa} +a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5} +a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)} +.badge-dark{color:#fff;background-color:#343a40} +a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124} +a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)} +.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem} +@media (min-width:576px){.jumbotron{padding:4rem 2rem} +} +.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0} +.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem} +.alert-heading{color:inherit} +.alert-link{font-weight:700} +.alert-dismissible{padding-right:4rem} +.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit} +.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff} +.alert-primary hr{border-top-color:#9fcdff} +.alert-primary .alert-link{color:#002752} +.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db} +.alert-secondary hr{border-top-color:#c8cbcf} +.alert-secondary .alert-link{color:#202326} +.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb} +.alert-success hr{border-top-color:#b1dfbb} +.alert-success .alert-link{color:#0b2e13} +.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb} +.alert-info hr{border-top-color:#abdde5} +.alert-info .alert-link{color:#062c33} +.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba} +.alert-warning hr{border-top-color:#ffe8a1} +.alert-warning .alert-link{color:#533f03} +.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb} +.alert-danger hr{border-top-color:#f1b0b7} +.alert-danger .alert-link{color:#491217} +.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe} +.alert-light hr{border-top-color:#ececf6} +.alert-light .alert-link{color:#686868} +.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca} +.alert-dark hr{border-top-color:#b9bbbe} +.alert-dark .alert-link{color:#040505} +@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0} +to{background-position:0 0} +} +@keyframes progress-bar-stripes{from{background-position:1rem 0} +to{background-position:0 0} +} +.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75em;background-color:#e9ecef;border-radius:.25rem} +.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease} +@media (prefers-reduced-motion:reduce){.progress-bar{transition:none} +} +.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem} +.progress-bar-animated{-webkit-animation:1s linear infinite progress-bar-stripes;animation:1s linear infinite progress-bar-stripes} +@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none} +} +.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start} +.media-body{-ms-flex:1;flex:1} +.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem} +.list-group-item-action{width:100%;color:#495057;text-align:inherit} +.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa} +.list-group-item-action:active{color:#212529;background-color:#e9ecef} +.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)} +.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit} +.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit} +.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff} +.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff} +.list-group-item+.list-group-item{border-top-width:0} +.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px} +.list-group-horizontal{-ms-flex-direction:row;flex-direction:row} +.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} +.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} +.list-group-horizontal>.list-group-item.active{margin-top:0} +.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} +.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} +@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row} +.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} +.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} +.list-group-horizontal-sm>.list-group-item.active{margin-top:0} +.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} +.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} +} +@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row} +.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} +.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} +.list-group-horizontal-md>.list-group-item.active{margin-top:0} +.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} +.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} +} +@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row} +.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} +.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} +.list-group-horizontal-lg>.list-group-item.active{margin-top:0} +.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} +.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} +} +@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row} +.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0} +.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0} +.list-group-horizontal-xl>.list-group-item.active{margin-top:0} +.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0} +.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px} +} +.list-group-flush{border-radius:0} +.list-group-flush>.list-group-item{border-width:0 0 1px} +.list-group-flush>.list-group-item:last-child{border-bottom-width:0} +.list-group-item-primary{color:#004085;background-color:#b8daff} +.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff} +.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085} +.list-group-item-secondary{color:#383d41;background-color:#d6d8db} +.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf} +.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41} +.list-group-item-success{color:#155724;background-color:#c3e6cb} +.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb} +.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724} +.list-group-item-info{color:#0c5460;background-color:#bee5eb} +.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5} +.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460} +.list-group-item-warning{color:#856404;background-color:#ffeeba} +.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1} +.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404} +.list-group-item-danger{color:#721c24;background-color:#f5c6cb} +.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7} +.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24} +.list-group-item-light{color:#818182;background-color:#fdfdfe} +.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6} +.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182} +.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca} +.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe} +.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21} +.close{float:right;font-size:1.5em;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5} +.close:hover{color:#000;text-decoration:none} +.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75} +button.close{padding:0;background-color:transparent;border:0} +a.close.disabled{pointer-events:none} +.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:.875em;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem} +.toast:not(:last-child){margin-bottom:.75rem} +.toast.showing{opacity:1} +.toast.show{display:block;opacity:1} +.toast.hide{display:none} +.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)} +.toast-body{padding:.75rem} +.modal-open{overflow:hidden} +.modal-open .modal{overflow-x:hidden;overflow-y:auto} +.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0} +.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none} +.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)} +@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none} +} +.modal.show .modal-dialog{-webkit-transform:none;transform:none} +.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)} +.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)} +.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden} +.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0} +.modal-dialog-scrollable .modal-body{overflow-y:auto} +.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)} +.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""} +.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%} +.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none} +.modal-dialog-centered.modal-dialog-scrollable::before{content:none} +.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0} +.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000} +.modal-backdrop.fade{opacity:0} +.modal-backdrop.show{opacity:.5} +.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)} +.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto} +.modal-title{margin-bottom:0;line-height:1.5} +.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem} +.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)} +.modal-footer>*{margin:.25rem} +.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll} +@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto} +.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)} +.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)} +.modal-dialog-centered{min-height:calc(100% - 3.5rem)} +.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content} +.modal-sm{max-width:300px} +} +@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px} +} +@media (min-width:1200px){.modal-xl{max-width:1140px} +} +.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:.875em;word-wrap:break-word;opacity:0} +.tooltip.show{opacity:.9} +.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem} +.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid} +.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0} +.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0} +.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000} +.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem} +.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem} +.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000} +.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0} +.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0} +.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000} +.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem} +.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem} +.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000} +.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem} +.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:.875em;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem} +.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem} +.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid} +.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem} +.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)} +.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)} +.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff} +.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem} +.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0} +.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)} +.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff} +.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem} +.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)} +.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)} +.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff} +.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7} +.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem} +.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0} +.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)} +.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff} +.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1em;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)} +.popover-header:empty{display:none} +.popover-body{padding:.5rem .75rem;color:#212529} +.carousel{position:relative} +.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y} +.carousel-inner{position:relative;width:100%;overflow:hidden} +.carousel-inner::after{display:block;clear:both;content:""} +.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out} +@media (prefers-reduced-motion:reduce){.carousel-item{transition:none} +} +.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block} +.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)} +.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)} +.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none} +.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1} +.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s} +@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none} +} +.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease} +@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none} +} +.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9} +.carousel-control-prev{left:0} +.carousel-control-next{right:0} +.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat} +.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")} +.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")} +.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none} +.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease} +@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none} +} +.carousel-indicators .active{opacity:1} +.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center} +@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)} +} +@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)} +} +.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentcolor;border-right-color:transparent;border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border} +.spinner-border-sm{width:1rem;height:1rem;border-width:.2em} +@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)} +50%{opacity:1;-webkit-transform:none;transform:none} +} +@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)} +50%{opacity:1;-webkit-transform:none;transform:none} +} +.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentcolor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow} +.spinner-grow-sm{width:1rem;height:1rem} +@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s} +} +.align-baseline{vertical-align:baseline!important} +.align-top{vertical-align:top!important} +.align-middle{vertical-align:middle!important} +.align-bottom{vertical-align:bottom!important} +.align-text-bottom{vertical-align:text-bottom!important} +.align-text-top{vertical-align:text-top!important} +.bg-primary{background-color:#007bff!important} +a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important} +.bg-secondary{background-color:#6c757d!important} +a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important} +.bg-success{background-color:#28a745!important} +a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important} +.bg-info{background-color:#17a2b8!important} +a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important} +.bg-warning{background-color:#ffc107!important} +a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important} +.bg-danger{background-color:#dc3545!important} +a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important} +.bg-light{background-color:#f8f9fa!important} +a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important} +.bg-dark{background-color:#343a40!important} +a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important} +.bg-white{background-color:#fff!important} +.bg-transparent{background-color:transparent!important} +.border{border:1px solid #dee2e6!important} +.border-top{border-top:1px solid #dee2e6!important} +.border-right{border-right:1px solid #dee2e6!important} +.border-bottom{border-bottom:1px solid #dee2e6!important} +.border-left{border-left:1px solid #dee2e6!important} +.border-0{border:0!important} +.border-top-0{border-top:0!important} +.border-right-0{border-right:0!important} +.border-bottom-0{border-bottom:0!important} +.border-left-0{border-left:0!important} +.border-primary{border-color:#007bff!important} +.border-secondary{border-color:#6c757d!important} +.border-success{border-color:#28a745!important} +.border-info{border-color:#17a2b8!important} +.border-warning{border-color:#ffc107!important} +.border-danger{border-color:#dc3545!important} +.border-light{border-color:#f8f9fa!important} +.border-dark{border-color:#343a40!important} +.border-white{border-color:#fff!important} +.rounded-sm{border-radius:.2rem!important} +.rounded{border-radius:.25rem!important} +.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important} +.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important} +.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important} +.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important} +.rounded-lg{border-radius:.3rem!important} +.rounded-circle{border-radius:50%!important} +.rounded-pill{border-radius:50rem!important} +.rounded-0{border-radius:0!important} +.clearfix::after{display:block;clear:both;content:""} +.d-none{display:none!important} +.d-inline{display:inline!important} +.d-inline-block{display:inline-block!important} +.d-block{display:block!important} +.d-table{display:table!important} +.d-table-row{display:table-row!important} +.d-table-cell{display:table-cell!important} +.d-flex{display:-ms-flexbox!important;display:flex!important} +.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important} +@media (min-width:576px){.d-sm-none{display:none!important} +.d-sm-inline{display:inline!important} +.d-sm-inline-block{display:inline-block!important} +.d-sm-block{display:block!important} +.d-sm-table{display:table!important} +.d-sm-table-row{display:table-row!important} +.d-sm-table-cell{display:table-cell!important} +.d-sm-flex{display:-ms-flexbox!important;display:flex!important} +.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important} +} +@media (min-width:768px){.d-md-none{display:none!important} +.d-md-inline{display:inline!important} +.d-md-inline-block{display:inline-block!important} +.d-md-block{display:block!important} +.d-md-table{display:table!important} +.d-md-table-row{display:table-row!important} +.d-md-table-cell{display:table-cell!important} +.d-md-flex{display:-ms-flexbox!important;display:flex!important} +.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important} +} +@media (min-width:992px){.d-lg-none{display:none!important} +.d-lg-inline{display:inline!important} +.d-lg-inline-block{display:inline-block!important} +.d-lg-block{display:block!important} +.d-lg-table{display:table!important} +.d-lg-table-row{display:table-row!important} +.d-lg-table-cell{display:table-cell!important} +.d-lg-flex{display:-ms-flexbox!important;display:flex!important} +.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important} +} +@media (min-width:1200px){.d-xl-none{display:none!important} +.d-xl-inline{display:inline!important} +.d-xl-inline-block{display:inline-block!important} +.d-xl-block{display:block!important} +.d-xl-table{display:table!important} +.d-xl-table-row{display:table-row!important} +.d-xl-table-cell{display:table-cell!important} +.d-xl-flex{display:-ms-flexbox!important;display:flex!important} +.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important} +} +@media print{.d-print-none{display:none!important} +.d-print-inline{display:inline!important} +.d-print-inline-block{display:inline-block!important} +.d-print-block{display:block!important} +.d-print-table{display:table!important} +.d-print-table-row{display:table-row!important} +.d-print-table-cell{display:table-cell!important} +.d-print-flex{display:-ms-flexbox!important;display:flex!important} +.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important} +} +.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden} +.embed-responsive::before{display:block;content:""} +.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0} +.embed-responsive-21by9::before{padding-top:42.857143%} +.embed-responsive-16by9::before{padding-top:56.25%} +.embed-responsive-4by3::before{padding-top:75%} +.embed-responsive-1by1::before{padding-top:100%} +.flex-row{-ms-flex-direction:row!important;flex-direction:row!important} +.flex-column{-ms-flex-direction:column!important;flex-direction:column!important} +.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important} +.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important} +.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important} +.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important} +.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important} +.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important} +.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important} +.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important} +.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important} +.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important} +.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important} +.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important} +.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important} +.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important} +.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important} +.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important} +.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important} +.align-items-center{-ms-flex-align:center!important;align-items:center!important} +.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important} +.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important} +.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important} +.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important} +.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important} +.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important} +.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important} +.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important} +.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important} +.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important} +.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important} +.align-self-center{-ms-flex-item-align:center!important;align-self:center!important} +.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important} +.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important} +@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important} +.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important} +.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important} +.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important} +.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important} +.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important} +.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important} +.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important} +.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important} +.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important} +.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important} +.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important} +.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important} +.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important} +.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important} +.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important} +.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important} +.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important} +.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important} +.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important} +.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important} +.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important} +.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important} +.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important} +.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important} +.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important} +.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important} +.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important} +.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important} +.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important} +.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important} +.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important} +.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important} +.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important} +} +@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important} +.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important} +.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important} +.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important} +.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important} +.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important} +.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important} +.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important} +.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important} +.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important} +.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important} +.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important} +.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important} +.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important} +.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important} +.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important} +.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important} +.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important} +.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important} +.align-items-md-center{-ms-flex-align:center!important;align-items:center!important} +.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important} +.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important} +.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important} +.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important} +.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important} +.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important} +.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important} +.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important} +.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important} +.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important} +.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important} +.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important} +.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important} +.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important} +} +@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important} +.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important} +.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important} +.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important} +.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important} +.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important} +.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important} +.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important} +.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important} +.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important} +.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important} +.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important} +.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important} +.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important} +.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important} +.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important} +.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important} +.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important} +.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important} +.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important} +.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important} +.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important} +.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important} +.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important} +.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important} +.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important} +.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important} +.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important} +.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important} +.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important} +.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important} +.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important} +.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important} +.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important} +} +@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important} +.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important} +.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important} +.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important} +.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important} +.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important} +.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important} +.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important} +.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important} +.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important} +.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important} +.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important} +.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important} +.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important} +.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important} +.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important} +.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important} +.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important} +.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important} +.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important} +.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important} +.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important} +.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important} +.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important} +.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important} +.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important} +.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important} +.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important} +.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important} +.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important} +.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important} +.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important} +.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important} +.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important} +} +.float-left{float:left!important} +.float-right{float:right!important} +.float-none{float:none!important} +@media (min-width:576px){.float-sm-left{float:left!important} +.float-sm-right{float:right!important} +.float-sm-none{float:none!important} +} +@media (min-width:768px){.float-md-left{float:left!important} +.float-md-right{float:right!important} +.float-md-none{float:none!important} +} +@media (min-width:992px){.float-lg-left{float:left!important} +.float-lg-right{float:right!important} +.float-lg-none{float:none!important} +} +@media (min-width:1200px){.float-xl-left{float:left!important} +.float-xl-right{float:right!important} +.float-xl-none{float:none!important} +} +.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important} +.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important} +.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important} +.overflow-auto{overflow:auto!important} +.overflow-hidden{overflow:hidden!important} +.position-static{position:static!important} +.position-relative{position:relative!important} +.position-absolute{position:absolute!important} +.position-fixed{position:fixed!important} +.position-sticky{position:-webkit-sticky!important;position:sticky!important} +.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030} +.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030} +@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020} +} +.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0} +.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal} +.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important} +.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important} +.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important} +.shadow-none{box-shadow:none!important} +.w-25{width:25%!important} +.w-50{width:50%!important} +.w-75{width:75%!important} +.w-100{width:100%!important} +.w-auto{width:auto!important} +.h-25{height:25%!important} +.h-50{height:50%!important} +.h-75{height:75%!important} +.h-100{height:100%!important} +.h-auto{height:auto!important} +.mw-100{max-width:100%!important} +.mh-100{max-height:100%!important} +.min-vw-100{min-width:100vw!important} +.min-vh-100{min-height:100vh!important} +.vw-100{width:100vw!important} +.vh-100{height:100vh!important} +.m-0{margin:0!important} +.mt-0,.my-0{margin-top:0!important} +.mr-0,.mx-0{margin-right:0!important} +.mb-0,.my-0{margin-bottom:0!important} +.ml-0,.mx-0{margin-left:0!important} +.m-1{margin:.25rem!important} +.mt-1,.my-1{margin-top:.25rem!important} +.mr-1,.mx-1{margin-right:.25rem!important} +.mb-1,.my-1{margin-bottom:.25rem!important} +.ml-1,.mx-1{margin-left:.25rem!important} +.m-2{margin:.5rem!important} +.mt-2,.my-2{margin-top:.5rem!important} +.mr-2,.mx-2{margin-right:.5rem!important} +.mb-2,.my-2{margin-bottom:.5rem!important} +.ml-2,.mx-2{margin-left:.5rem!important} +.m-3{margin:1rem!important} +.mt-3,.my-3{margin-top:1rem!important} +.mr-3,.mx-3{margin-right:1rem!important} +.mb-3,.my-3{margin-bottom:1rem!important} +.ml-3,.mx-3{margin-left:1rem!important} +.m-4{margin:1.5rem!important} +.mt-4,.my-4{margin-top:1.5rem!important} +.mr-4,.mx-4{margin-right:1.5rem!important} +.mb-4,.my-4{margin-bottom:1.5rem!important} +.ml-4,.mx-4{margin-left:1.5rem!important} +.m-5{margin:3rem!important} +.mt-5,.my-5{margin-top:3rem!important} +.mr-5,.mx-5{margin-right:3rem!important} +.mb-5,.my-5{margin-bottom:3rem!important} +.ml-5,.mx-5{margin-left:3rem!important} +.p-0{padding:0!important} +.pt-0,.py-0{padding-top:0!important} +.pr-0,.px-0{padding-right:0!important} +.pb-0,.py-0{padding-bottom:0!important} +.pl-0,.px-0{padding-left:0!important} +.p-1{padding:.25rem!important} +.pt-1,.py-1{padding-top:.25rem!important} +.pr-1,.px-1{padding-right:.25rem!important} +.pb-1,.py-1{padding-bottom:.25rem!important} +.pl-1,.px-1{padding-left:.25rem!important} +.p-2{padding:.5rem!important} +.pt-2,.py-2{padding-top:.5rem!important} +.pr-2,.px-2{padding-right:.5rem!important} +.pb-2,.py-2{padding-bottom:.5rem!important} +.pl-2,.px-2{padding-left:.5rem!important} +.p-3{padding:1rem!important} +.pt-3,.py-3{padding-top:1rem!important} +.pr-3,.px-3{padding-right:1rem!important} +.pb-3,.py-3{padding-bottom:1rem!important} +.pl-3,.px-3{padding-left:1rem!important} +.p-4{padding:1.5rem!important} +.pt-4,.py-4{padding-top:1.5rem!important} +.pr-4,.px-4{padding-right:1.5rem!important} +.pb-4,.py-4{padding-bottom:1.5rem!important} +.pl-4,.px-4{padding-left:1.5rem!important} +.p-5{padding:3rem!important} +.pt-5,.py-5{padding-top:3rem!important} +.pr-5,.px-5{padding-right:3rem!important} +.pb-5,.py-5{padding-bottom:3rem!important} +.pl-5,.px-5{padding-left:3rem!important} +.m-n1{margin:-.25rem!important} +.mt-n1,.my-n1{margin-top:-.25rem!important} +.mr-n1,.mx-n1{margin-right:-.25rem!important} +.mb-n1,.my-n1{margin-bottom:-.25rem!important} +.ml-n1,.mx-n1{margin-left:-.25rem!important} +.m-n2{margin:-.5rem!important} +.mt-n2,.my-n2{margin-top:-.5rem!important} +.mr-n2,.mx-n2{margin-right:-.5rem!important} +.mb-n2,.my-n2{margin-bottom:-.5rem!important} +.ml-n2,.mx-n2{margin-left:-.5rem!important} +.m-n3{margin:-1rem!important} +.mt-n3,.my-n3{margin-top:-1rem!important} +.mr-n3,.mx-n3{margin-right:-1rem!important} +.mb-n3,.my-n3{margin-bottom:-1rem!important} +.ml-n3,.mx-n3{margin-left:-1rem!important} +.m-n4{margin:-1.5rem!important} +.mt-n4,.my-n4{margin-top:-1.5rem!important} +.mr-n4,.mx-n4{margin-right:-1.5rem!important} +.mb-n4,.my-n4{margin-bottom:-1.5rem!important} +.ml-n4,.mx-n4{margin-left:-1.5rem!important} +.m-n5{margin:-3rem!important} +.mt-n5,.my-n5{margin-top:-3rem!important} +.mr-n5,.mx-n5{margin-right:-3rem!important} +.mb-n5,.my-n5{margin-bottom:-3rem!important} +.ml-n5,.mx-n5{margin-left:-3rem!important} +.m-auto{margin:auto!important} +.mt-auto,.my-auto{margin-top:auto!important} +.mr-auto,.mx-auto{margin-right:auto!important} +.mb-auto,.my-auto{margin-bottom:auto!important} +.ml-auto,.mx-auto{margin-left:auto!important} +@media (min-width:576px){.m-sm-0{margin:0!important} +.mt-sm-0,.my-sm-0{margin-top:0!important} +.mr-sm-0,.mx-sm-0{margin-right:0!important} +.mb-sm-0,.my-sm-0{margin-bottom:0!important} +.ml-sm-0,.mx-sm-0{margin-left:0!important} +.m-sm-1{margin:.25rem!important} +.mt-sm-1,.my-sm-1{margin-top:.25rem!important} +.mr-sm-1,.mx-sm-1{margin-right:.25rem!important} +.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important} +.ml-sm-1,.mx-sm-1{margin-left:.25rem!important} +.m-sm-2{margin:.5rem!important} +.mt-sm-2,.my-sm-2{margin-top:.5rem!important} +.mr-sm-2,.mx-sm-2{margin-right:.5rem!important} +.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important} +.ml-sm-2,.mx-sm-2{margin-left:.5rem!important} +.m-sm-3{margin:1rem!important} +.mt-sm-3,.my-sm-3{margin-top:1rem!important} +.mr-sm-3,.mx-sm-3{margin-right:1rem!important} +.mb-sm-3,.my-sm-3{margin-bottom:1rem!important} +.ml-sm-3,.mx-sm-3{margin-left:1rem!important} +.m-sm-4{margin:1.5rem!important} +.mt-sm-4,.my-sm-4{margin-top:1.5rem!important} +.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important} +.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important} +.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important} +.m-sm-5{margin:3rem!important} +.mt-sm-5,.my-sm-5{margin-top:3rem!important} +.mr-sm-5,.mx-sm-5{margin-right:3rem!important} +.mb-sm-5,.my-sm-5{margin-bottom:3rem!important} +.ml-sm-5,.mx-sm-5{margin-left:3rem!important} +.p-sm-0{padding:0!important} +.pt-sm-0,.py-sm-0{padding-top:0!important} +.pr-sm-0,.px-sm-0{padding-right:0!important} +.pb-sm-0,.py-sm-0{padding-bottom:0!important} +.pl-sm-0,.px-sm-0{padding-left:0!important} +.p-sm-1{padding:.25rem!important} +.pt-sm-1,.py-sm-1{padding-top:.25rem!important} +.pr-sm-1,.px-sm-1{padding-right:.25rem!important} +.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important} +.pl-sm-1,.px-sm-1{padding-left:.25rem!important} +.p-sm-2{padding:.5rem!important} +.pt-sm-2,.py-sm-2{padding-top:.5rem!important} +.pr-sm-2,.px-sm-2{padding-right:.5rem!important} +.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important} +.pl-sm-2,.px-sm-2{padding-left:.5rem!important} +.p-sm-3{padding:1rem!important} +.pt-sm-3,.py-sm-3{padding-top:1rem!important} +.pr-sm-3,.px-sm-3{padding-right:1rem!important} +.pb-sm-3,.py-sm-3{padding-bottom:1rem!important} +.pl-sm-3,.px-sm-3{padding-left:1rem!important} +.p-sm-4{padding:1.5rem!important} +.pt-sm-4,.py-sm-4{padding-top:1.5rem!important} +.pr-sm-4,.px-sm-4{padding-right:1.5rem!important} +.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important} +.pl-sm-4,.px-sm-4{padding-left:1.5rem!important} +.p-sm-5{padding:3rem!important} +.pt-sm-5,.py-sm-5{padding-top:3rem!important} +.pr-sm-5,.px-sm-5{padding-right:3rem!important} +.pb-sm-5,.py-sm-5{padding-bottom:3rem!important} +.pl-sm-5,.px-sm-5{padding-left:3rem!important} +.m-sm-n1{margin:-.25rem!important} +.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important} +.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important} +.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important} +.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important} +.m-sm-n2{margin:-.5rem!important} +.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important} +.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important} +.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important} +.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important} +.m-sm-n3{margin:-1rem!important} +.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important} +.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important} +.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important} +.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important} +.m-sm-n4{margin:-1.5rem!important} +.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important} +.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important} +.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important} +.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important} +.m-sm-n5{margin:-3rem!important} +.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important} +.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important} +.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important} +.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important} +.m-sm-auto{margin:auto!important} +.mt-sm-auto,.my-sm-auto{margin-top:auto!important} +.mr-sm-auto,.mx-sm-auto{margin-right:auto!important} +.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important} +.ml-sm-auto,.mx-sm-auto{margin-left:auto!important} +} +@media (min-width:768px){.m-md-0{margin:0!important} +.mt-md-0,.my-md-0{margin-top:0!important} +.mr-md-0,.mx-md-0{margin-right:0!important} +.mb-md-0,.my-md-0{margin-bottom:0!important} +.ml-md-0,.mx-md-0{margin-left:0!important} +.m-md-1{margin:.25rem!important} +.mt-md-1,.my-md-1{margin-top:.25rem!important} +.mr-md-1,.mx-md-1{margin-right:.25rem!important} +.mb-md-1,.my-md-1{margin-bottom:.25rem!important} +.ml-md-1,.mx-md-1{margin-left:.25rem!important} +.m-md-2{margin:.5rem!important} +.mt-md-2,.my-md-2{margin-top:.5rem!important} +.mr-md-2,.mx-md-2{margin-right:.5rem!important} +.mb-md-2,.my-md-2{margin-bottom:.5rem!important} +.ml-md-2,.mx-md-2{margin-left:.5rem!important} +.m-md-3{margin:1rem!important} +.mt-md-3,.my-md-3{margin-top:1rem!important} +.mr-md-3,.mx-md-3{margin-right:1rem!important} +.mb-md-3,.my-md-3{margin-bottom:1rem!important} +.ml-md-3,.mx-md-3{margin-left:1rem!important} +.m-md-4{margin:1.5rem!important} +.mt-md-4,.my-md-4{margin-top:1.5rem!important} +.mr-md-4,.mx-md-4{margin-right:1.5rem!important} +.mb-md-4,.my-md-4{margin-bottom:1.5rem!important} +.ml-md-4,.mx-md-4{margin-left:1.5rem!important} +.m-md-5{margin:3rem!important} +.mt-md-5,.my-md-5{margin-top:3rem!important} +.mr-md-5,.mx-md-5{margin-right:3rem!important} +.mb-md-5,.my-md-5{margin-bottom:3rem!important} +.ml-md-5,.mx-md-5{margin-left:3rem!important} +.p-md-0{padding:0!important} +.pt-md-0,.py-md-0{padding-top:0!important} +.pr-md-0,.px-md-0{padding-right:0!important} +.pb-md-0,.py-md-0{padding-bottom:0!important} +.pl-md-0,.px-md-0{padding-left:0!important} +.p-md-1{padding:.25rem!important} +.pt-md-1,.py-md-1{padding-top:.25rem!important} +.pr-md-1,.px-md-1{padding-right:.25rem!important} +.pb-md-1,.py-md-1{padding-bottom:.25rem!important} +.pl-md-1,.px-md-1{padding-left:.25rem!important} +.p-md-2{padding:.5rem!important} +.pt-md-2,.py-md-2{padding-top:.5rem!important} +.pr-md-2,.px-md-2{padding-right:.5rem!important} +.pb-md-2,.py-md-2{padding-bottom:.5rem!important} +.pl-md-2,.px-md-2{padding-left:.5rem!important} +.p-md-3{padding:1rem!important} +.pt-md-3,.py-md-3{padding-top:1rem!important} +.pr-md-3,.px-md-3{padding-right:1rem!important} +.pb-md-3,.py-md-3{padding-bottom:1rem!important} +.pl-md-3,.px-md-3{padding-left:1rem!important} +.p-md-4{padding:1.5rem!important} +.pt-md-4,.py-md-4{padding-top:1.5rem!important} +.pr-md-4,.px-md-4{padding-right:1.5rem!important} +.pb-md-4,.py-md-4{padding-bottom:1.5rem!important} +.pl-md-4,.px-md-4{padding-left:1.5rem!important} +.p-md-5{padding:3rem!important} +.pt-md-5,.py-md-5{padding-top:3rem!important} +.pr-md-5,.px-md-5{padding-right:3rem!important} +.pb-md-5,.py-md-5{padding-bottom:3rem!important} +.pl-md-5,.px-md-5{padding-left:3rem!important} +.m-md-n1{margin:-.25rem!important} +.mt-md-n1,.my-md-n1{margin-top:-.25rem!important} +.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important} +.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important} +.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important} +.m-md-n2{margin:-.5rem!important} +.mt-md-n2,.my-md-n2{margin-top:-.5rem!important} +.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important} +.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important} +.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important} +.m-md-n3{margin:-1rem!important} +.mt-md-n3,.my-md-n3{margin-top:-1rem!important} +.mr-md-n3,.mx-md-n3{margin-right:-1rem!important} +.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important} +.ml-md-n3,.mx-md-n3{margin-left:-1rem!important} +.m-md-n4{margin:-1.5rem!important} +.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important} +.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important} +.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important} +.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important} +.m-md-n5{margin:-3rem!important} +.mt-md-n5,.my-md-n5{margin-top:-3rem!important} +.mr-md-n5,.mx-md-n5{margin-right:-3rem!important} +.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important} +.ml-md-n5,.mx-md-n5{margin-left:-3rem!important} +.m-md-auto{margin:auto!important} +.mt-md-auto,.my-md-auto{margin-top:auto!important} +.mr-md-auto,.mx-md-auto{margin-right:auto!important} +.mb-md-auto,.my-md-auto{margin-bottom:auto!important} +.ml-md-auto,.mx-md-auto{margin-left:auto!important} +} +@media (min-width:992px){.m-lg-0{margin:0!important} +.mt-lg-0,.my-lg-0{margin-top:0!important} +.mr-lg-0,.mx-lg-0{margin-right:0!important} +.mb-lg-0,.my-lg-0{margin-bottom:0!important} +.ml-lg-0,.mx-lg-0{margin-left:0!important} +.m-lg-1{margin:.25rem!important} +.mt-lg-1,.my-lg-1{margin-top:.25rem!important} +.mr-lg-1,.mx-lg-1{margin-right:.25rem!important} +.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important} +.ml-lg-1,.mx-lg-1{margin-left:.25rem!important} +.m-lg-2{margin:.5rem!important} +.mt-lg-2,.my-lg-2{margin-top:.5rem!important} +.mr-lg-2,.mx-lg-2{margin-right:.5rem!important} +.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important} +.ml-lg-2,.mx-lg-2{margin-left:.5rem!important} +.m-lg-3{margin:1rem!important} +.mt-lg-3,.my-lg-3{margin-top:1rem!important} +.mr-lg-3,.mx-lg-3{margin-right:1rem!important} +.mb-lg-3,.my-lg-3{margin-bottom:1rem!important} +.ml-lg-3,.mx-lg-3{margin-left:1rem!important} +.m-lg-4{margin:1.5rem!important} +.mt-lg-4,.my-lg-4{margin-top:1.5rem!important} +.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important} +.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important} +.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important} +.m-lg-5{margin:3rem!important} +.mt-lg-5,.my-lg-5{margin-top:3rem!important} +.mr-lg-5,.mx-lg-5{margin-right:3rem!important} +.mb-lg-5,.my-lg-5{margin-bottom:3rem!important} +.ml-lg-5,.mx-lg-5{margin-left:3rem!important} +.p-lg-0{padding:0!important} +.pt-lg-0,.py-lg-0{padding-top:0!important} +.pr-lg-0,.px-lg-0{padding-right:0!important} +.pb-lg-0,.py-lg-0{padding-bottom:0!important} +.pl-lg-0,.px-lg-0{padding-left:0!important} +.p-lg-1{padding:.25rem!important} +.pt-lg-1,.py-lg-1{padding-top:.25rem!important} +.pr-lg-1,.px-lg-1{padding-right:.25rem!important} +.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important} +.pl-lg-1,.px-lg-1{padding-left:.25rem!important} +.p-lg-2{padding:.5rem!important} +.pt-lg-2,.py-lg-2{padding-top:.5rem!important} +.pr-lg-2,.px-lg-2{padding-right:.5rem!important} +.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important} +.pl-lg-2,.px-lg-2{padding-left:.5rem!important} +.p-lg-3{padding:1rem!important} +.pt-lg-3,.py-lg-3{padding-top:1rem!important} +.pr-lg-3,.px-lg-3{padding-right:1rem!important} +.pb-lg-3,.py-lg-3{padding-bottom:1rem!important} +.pl-lg-3,.px-lg-3{padding-left:1rem!important} +.p-lg-4{padding:1.5rem!important} +.pt-lg-4,.py-lg-4{padding-top:1.5rem!important} +.pr-lg-4,.px-lg-4{padding-right:1.5rem!important} +.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important} +.pl-lg-4,.px-lg-4{padding-left:1.5rem!important} +.p-lg-5{padding:3rem!important} +.pt-lg-5,.py-lg-5{padding-top:3rem!important} +.pr-lg-5,.px-lg-5{padding-right:3rem!important} +.pb-lg-5,.py-lg-5{padding-bottom:3rem!important} +.pl-lg-5,.px-lg-5{padding-left:3rem!important} +.m-lg-n1{margin:-.25rem!important} +.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important} +.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important} +.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important} +.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important} +.m-lg-n2{margin:-.5rem!important} +.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important} +.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important} +.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important} +.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important} +.m-lg-n3{margin:-1rem!important} +.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important} +.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important} +.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important} +.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important} +.m-lg-n4{margin:-1.5rem!important} +.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important} +.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important} +.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important} +.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important} +.m-lg-n5{margin:-3rem!important} +.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important} +.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important} +.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important} +.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important} +.m-lg-auto{margin:auto!important} +.mt-lg-auto,.my-lg-auto{margin-top:auto!important} +.mr-lg-auto,.mx-lg-auto{margin-right:auto!important} +.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important} +.ml-lg-auto,.mx-lg-auto{margin-left:auto!important} +} +@media (min-width:1200px){.m-xl-0{margin:0!important} +.mt-xl-0,.my-xl-0{margin-top:0!important} +.mr-xl-0,.mx-xl-0{margin-right:0!important} +.mb-xl-0,.my-xl-0{margin-bottom:0!important} +.ml-xl-0,.mx-xl-0{margin-left:0!important} +.m-xl-1{margin:.25rem!important} +.mt-xl-1,.my-xl-1{margin-top:.25rem!important} +.mr-xl-1,.mx-xl-1{margin-right:.25rem!important} +.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important} +.ml-xl-1,.mx-xl-1{margin-left:.25rem!important} +.m-xl-2{margin:.5rem!important} +.mt-xl-2,.my-xl-2{margin-top:.5rem!important} +.mr-xl-2,.mx-xl-2{margin-right:.5rem!important} +.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important} +.ml-xl-2,.mx-xl-2{margin-left:.5rem!important} +.m-xl-3{margin:1rem!important} +.mt-xl-3,.my-xl-3{margin-top:1rem!important} +.mr-xl-3,.mx-xl-3{margin-right:1rem!important} +.mb-xl-3,.my-xl-3{margin-bottom:1rem!important} +.ml-xl-3,.mx-xl-3{margin-left:1rem!important} +.m-xl-4{margin:1.5rem!important} +.mt-xl-4,.my-xl-4{margin-top:1.5rem!important} +.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important} +.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important} +.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important} +.m-xl-5{margin:3rem!important} +.mt-xl-5,.my-xl-5{margin-top:3rem!important} +.mr-xl-5,.mx-xl-5{margin-right:3rem!important} +.mb-xl-5,.my-xl-5{margin-bottom:3rem!important} +.ml-xl-5,.mx-xl-5{margin-left:3rem!important} +.p-xl-0{padding:0!important} +.pt-xl-0,.py-xl-0{padding-top:0!important} +.pr-xl-0,.px-xl-0{padding-right:0!important} +.pb-xl-0,.py-xl-0{padding-bottom:0!important} +.pl-xl-0,.px-xl-0{padding-left:0!important} +.p-xl-1{padding:.25rem!important} +.pt-xl-1,.py-xl-1{padding-top:.25rem!important} +.pr-xl-1,.px-xl-1{padding-right:.25rem!important} +.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important} +.pl-xl-1,.px-xl-1{padding-left:.25rem!important} +.p-xl-2{padding:.5rem!important} +.pt-xl-2,.py-xl-2{padding-top:.5rem!important} +.pr-xl-2,.px-xl-2{padding-right:.5rem!important} +.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important} +.pl-xl-2,.px-xl-2{padding-left:.5rem!important} +.p-xl-3{padding:1rem!important} +.pt-xl-3,.py-xl-3{padding-top:1rem!important} +.pr-xl-3,.px-xl-3{padding-right:1rem!important} +.pb-xl-3,.py-xl-3{padding-bottom:1rem!important} +.pl-xl-3,.px-xl-3{padding-left:1rem!important} +.p-xl-4{padding:1.5rem!important} +.pt-xl-4,.py-xl-4{padding-top:1.5rem!important} +.pr-xl-4,.px-xl-4{padding-right:1.5rem!important} +.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important} +.pl-xl-4,.px-xl-4{padding-left:1.5rem!important} +.p-xl-5{padding:3rem!important} +.pt-xl-5,.py-xl-5{padding-top:3rem!important} +.pr-xl-5,.px-xl-5{padding-right:3rem!important} +.pb-xl-5,.py-xl-5{padding-bottom:3rem!important} +.pl-xl-5,.px-xl-5{padding-left:3rem!important} +.m-xl-n1{margin:-.25rem!important} +.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important} +.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important} +.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important} +.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important} +.m-xl-n2{margin:-.5rem!important} +.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important} +.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important} +.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important} +.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important} +.m-xl-n3{margin:-1rem!important} +.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important} +.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important} +.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important} +.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important} +.m-xl-n4{margin:-1.5rem!important} +.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important} +.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important} +.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important} +.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important} +.m-xl-n5{margin:-3rem!important} +.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important} +.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important} +.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important} +.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important} +.m-xl-auto{margin:auto!important} +.mt-xl-auto,.my-xl-auto{margin-top:auto!important} +.mr-xl-auto,.mx-xl-auto{margin-right:auto!important} +.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important} +.ml-xl-auto,.mx-xl-auto{margin-left:auto!important} +} +.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)} +.text-justify{text-align:justify!important} +.text-wrap{white-space:normal!important} +.text-nowrap{white-space:nowrap!important} +.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.text-left{text-align:left!important} +.text-right{text-align:right!important} +.text-center{text-align:center!important} +@media (min-width:576px){.text-sm-left{text-align:left!important} +.text-sm-right{text-align:right!important} +.text-sm-center{text-align:center!important} +} +@media (min-width:768px){.text-md-left{text-align:left!important} +.text-md-right{text-align:right!important} +.text-md-center{text-align:center!important} +} +@media (min-width:992px){.text-lg-left{text-align:left!important} +.text-lg-right{text-align:right!important} +.text-lg-center{text-align:center!important} +} +@media (min-width:1200px){.text-xl-left{text-align:left!important} +.text-xl-right{text-align:right!important} +.text-xl-center{text-align:center!important} +} +.text-lowercase{text-transform:lowercase!important} +.text-uppercase{text-transform:uppercase!important} +.text-capitalize{text-transform:capitalize!important} +.font-weight-light{font-weight:300!important} +.font-weight-lighter{font-weight:lighter!important} +.font-weight-normal{font-weight:400!important} +.font-weight-bold{font-weight:700!important} +.font-weight-bolder{font-weight:bolder!important} +.font-italic{font-style:italic!important} +.text-white{color:#fff!important} +.text-primary{color:#007bff!important} +a.text-primary:focus,a.text-primary:hover{color:#0056b3!important} +.text-secondary{color:#6c757d!important} +a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important} +.text-success{color:#28a745!important} +a.text-success:focus,a.text-success:hover{color:#19692c!important} +.text-info{color:#17a2b8!important} +a.text-info:focus,a.text-info:hover{color:#0f6674!important} +.text-warning{color:#ffc107!important} +a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important} +.text-danger{color:#dc3545!important} +a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important} +.text-light{color:#f8f9fa!important} +a.text-light:focus,a.text-light:hover{color:#cbd3da!important} +.text-dark{color:#343a40!important} +a.text-dark:focus,a.text-dark:hover{color:#121416!important} +.text-body{color:#212529!important} +.text-muted{color:#6c757d!important} +.text-black-50{color:rgba(0,0,0,.5)!important} +.text-white-50{color:rgba(255,255,255,.5)!important} +.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0} +.text-decoration-none{text-decoration:none!important} +.text-break{word-break:break-word!important;word-wrap:break-word!important} +.text-reset{color:inherit!important} +.visible{visibility:visible!important} +.invisible{visibility:hidden!important} +@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important} +a:not(.btn){text-decoration:underline} +abbr[title]::after{content:" (" attr(title) ")"} +pre{white-space:pre-wrap!important} +blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid} +img,tr{page-break-inside:avoid} +h2,h3,p{orphans:3;widows:3} +h2,h3{page-break-after:avoid} +@page{size:a3} +body{min-width:992px!important} +.container{min-width:992px!important} +.navbar{display:none} +.badge{border:1px solid #000} +.table{border-collapse:collapse!important} +.table td,.table th{background-color:#fff!important} +.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important} +.table-dark{color:inherit} +.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6} +.table .thead-dark th{color:inherit;border-color:#dee2e6} +} + +/*# sourceMappingURL=bootstrap.min.css.map */ diff --git a/html/changelogs/archive/2024-02.yml b/html/changelogs/archive/2024-02.yml index fd8d3b60ad3..6b848daaa60 100644 --- a/html/changelogs/archive/2024-02.yml +++ b/html/changelogs/archive/2024-02.yml @@ -18,3 +18,237 @@ - bugfix: Crematorium IDs (#4327) - bugfix: Temporaty Shieldgen Fix (#4330) - bugfix: HUD Zone Select Fixes (#4325) +'2024-02-06': + ArtemDerp: + - bugfix: Gorkiy17 reduced number of active turfs (#4253) + - bugfix: fixed missed floor tiles (#4368) + Daeberdir: + - bugfix: pet vanishing in pet carrier. (#4355) + - tweak: job updating for PDA messenger receiver. (#4338) + - add: Nucleation racial implant for uplink. (#4335) + - add: cucumber mask craft. (#4277) + - bugfix: AI can't see roundstart `restricted_camera_networks` and normal borg accessability + for malf hacked APC. (#4239) + - refactor: mecha `Actions` and `Radial Menu` not only for selecting modules. (#4219) + - add: delayed examine. (#4080) + Dimach: + - bugfix: fixed cqc runtime (#4363) + KriegThunder: + - add: Black ops kit and black ops coverall (#4295) + LiquidPotroh: + - bugfix: afterattacks is not called (#4356) + - tweak: Vampires can eat creatures that their race allows, but they don't get any + nutrients (#4293) + MadGRaf: + - add: add wrench action to raise bolt on unpowered airlock (#4288) + MataVsn: + - add: Kidan's Pheromones (#4043) + MeowEmiya: + - tweak: Ashwalkers guaranteed spawn (#4275) + Nerrol: + - bugfix: reload huds issues (#4367) + Pavel Poltaves: + - qol: add the ability to animals to ask to be picked up. (#4164) + ROdenFL: + - add: highlight list for ghosts (#3870) + Renascitur: + - add: New spell and suit for hardmode Blood-Drunk miner (#4262) + Rerik007: + - bugfix: circuits of mapping vendors with custom names broken (#4357) + - bugfix: cable healing roboparts runtime (#4351) + - tweak: add some cargo tweaks (#4286) + - refactor: martials now use a weight system to determine which one is active (#4265) + RuinaRuiner: + - bugfix: small-syndicate-fix (#4226) + SAAD: + - bugfix: February Delta patch (#4334) + - bugfix: delta feb patch (#4366) + TimChi: + - qol: add pestspray for jani borg (#4283) + Valtor: + - bugfix: fixed devil`s powers (#4350) + VasilevAY: + - bugfix: medical gown unathi sprite (#4353) + Vladisvell: + - refactor: Optimized announcement reciever getting (#4349) + - bugfix: Fixed meson vision for cyborgs (#4344) + - tweak: Allowed view timer's info in View Variables (#4347) + - tweak: added Show/Hide MC Tabs for people with access to runtimes view (#4348) + - add: Added pagination for View Flagged Books Admin tool (#4345) + - refactor: Optimized cables performance (#4342) + - bugfix: Fixed runtime on unequipping clothing with accessories attached (#4358) + - refactor: Optimized turrets target search algorithm (#4323) + - bugfix: Robots now can't be stunned by watcher's beam (#4364) + - bugfix: Fixed turrets runtime (#4365) + WolfLox: + - tweak: some bugfix and minor changes based on feedback (#4337) + Zwei: + - bugfix: Animate Projectile Fix (#4339) + - bugfix: Extinguish Light Fixes (#4340) +'2024-02-07': + BeebBeebBoob: + - bugfix: Corrects costs of ammo casings and ammo box itself (#4370) + - bugfix: making ai from clocked mmi + fabricator building (#4369) + dontbetank: + - bugfix: PAI HUD fix (#4360) +'2024-02-09': + Aziz Chynaliev: + - unknown: bump byond version to 515.1630 and add CI trigger on merge queue + - unknown: enable BETA byond CI + - unknown: bump dmjit version + BeebBeebBoob: + - bugfix: AI core playtime requirement (#4380) +'2024-02-10': + Aziz Chynaliev: + - unknown: bump stable byond and dmjit versions + Rerik007: + - add: (added) new cargo packs (#4383) + - bugfix: two small typo fixes (#4385) + Valtor: + - bugfix: returns mage-simplemob spells (#4378) + Vladisvell: + - bugfix: Fixed wrong machinery cache initialization (#4376) + Zwei: + - bugfix: Morgue Label Return (#4382) + - tweak: Pointing With Gun Spelling (#4374) + dontbetank: + - add: Remove Mr.Cheng Technique from melee thunderdome (#4359) + github-actions[bot]: + - server: Automatic NanoMap Update (#4372) +'2024-02-11': + ArtemDerp: + - bugfix: reconstruction of the disposal pipe system (#4375) +'2024-02-12': + ArtemDerp: + - bugfix: added missed sprites for sec bundles (#4268) + - bugfix: fixed overlap of wall objects (#4398) + - add: security drip update (#4371) + - add: Updated Wizard Clothing (#4252) + - add: laser gun reskin (#4278) + - add: new species meat (#4259) + BeebBeebBoob: + - refactor: Define bitflags (#4181) + Daeberdir: + - bugfix: correct view range calculating and examine corrections. (#4400) + - add: Zaza drink. (#4318) + Darkest08: + - imageadd: added sst hardsuit skins (#4120) + Den109G: + - add: Added adds a popup window with suggested version (#4386) + Etrnlmelancholy: + - tweak: ipc and pai wire sprite update (#4391) + Renascitur: + - add: Hierophant Talisman from hardmode Hierophant (#4314) + Rerik007: + - bugfix: fix null.len runtime (#4388) + - bugfix: mecha cargomodule for lockermech broken (#4396) + - bugfix: fix runtime to_chat called with invalid message (#4387) + SAAD: + - tweak: Remove extra atmos different turfes and useless dirs and tags (#4394) + Vladisvell: + - bugfix: Removed incorrect winsets for dark and light themes (#4392) + Zwei: + - refactor: Icon Updates Rework Part2 (#4170) + - bugfix: Paper Fix (#4407) + - add: Added Adidas Uniform (#4381) + github-actions[bot]: + - server: Automatic NanoMap Update (#4399) + xTrogwaRx: + - bugfix: show panel virology fridge after screw act (#4321) + - qol: keybinds for tail and wings (#4320) +'2024-02-13': + ArtemDerp: + - bugfix: correct naming for tasers locker (#4415) + - bugfix: fixed missed cheks for sec scarf and googles (#4409) + BeebBeebBoob: + - bugfix: inflatable barrier box could fit anything (#4408) + Daeberdir: + - bugfix: outfit inhand items disappearing. (#4401) + Valtor: + - qol: Borer QoL update (#4343) + Zwei: + - bugfix: Laser Weapons In Hands Fix (#4410) + - bugfix: ChemDispenser Overlays Fix (#4418) + github-actions[bot]: + - server: Automatic NanoMap Update (#4412) +'2024-02-14': + ArtemDerp: + - bugfix: security gas mask removed extra cover flags (#4426) + - add: new meat steak recipes (#4425) + - add: removed meatwheat mutation and syntiflesh reaction (#4417) + - add: new meat pie recipes (#4416) + BeebBeebBoob: + - refactor: Update CONTRIBUTING.md (#4402) + Daeberdir: + - tweak: progressbar for examining and possibility to examine items in storages. + (#4427) + ROdenFL: + - bugfix: pain hunter late game fix (#4424) + Rerik007: + - bugfix: glands names was the same (#4421) + - qol: bindable action buttons (#4420) + Zwei: + - bugfix: Inflatable Door Vision Fix (#4429) + - bugfix: Falsewall Opacity Fix (#4431) + - bugfix: Multicolored Pen Overlay Fix (#4430) + - bugfix: Taperecorder Fix (#4419) + - tweak: Vision And Emotes Fixes (#4233) +'2024-02-15': + ArtemDerp: + - add: Resprited Stoks (#4322) +'2024-02-16': + Den109G: + - bugfix: Construction bag from cloth craft (#4433) + Etrnlmelancholy: + - tweak: seccie webbing to sectech (#4437) +'2024-02-17': + ARZUMATA: + - bugfix: airlock electronics null fix (#4397) + ArtemDerp: + - bugfix: humans have human meat (#4457) + Aziz Chynaliev: + - server: auto review requests for maps + Mindfri: + - add: NT Mecha PaintKit (#4438) + NightDawnFox: + - refactor: moving almost all tool checks to "tool_behaviour" (#4434) + - add: frosty breath effect in low-temperature rooms (#3385) + Pavel Lysenko: + - spellcheck: Исправлены опечатки и мелкие ошибки в описаниях ролей Тайпана (#2310) + ROdenFL: + - experiment: dark theme, colors, font-awesome, blob update (#4354) + WolfLox: + - tweak: lots of small, varied and not too noticeable changes ERT loadout (#4154) + Zwei: + - bugfix: Welding Mask Overlays (#4448) + mrWhiteFox365: + - unknown: Kerberos R&D Cafeteria (#4285) + xTrogwaRx: + - qol: Recolor "Set Occupation Preferences" menu (#4428) +'2024-02-18': + ArtemDerp: + - bugfix: fixed glasses over mask layer position (#4449) + Daeberdir: + - bugfix: alphabet sorting for chem dispensers on spawn. (#4453) + - bugfix: silicon PDA UI working properly. (#4445) + - bugfix: '`update_equipped_item()` correct updating clothing sprites. (#4456)' + Den109G: + - bugfix: adds area to AI's cams (#4452) + LiquidPotroh: + - tweak: Amomaly extract cooldown & cost (#4447) + - bugfix: invincibility machinepersons to neurotoxin spit (#4225) + ROdenFL: + - bugfix: darkmode runtime (#4455) + - balance: pulse demon only shitspawn and mage pet (#4440) + - unknown: NULL crate (#4422) + Rerik007: + - add: alt-click on the damage zone will be equivalent to clicking on itself (#4384) + - bugfix: flashbangs can permanently break your hearing (#4439) + SAAD: + - refactor: Transit tubes (#4443) + Zwei: + - bugfix: Matchbox Icons Fix (#4441) + - bugfix: Barrel Icon State Fix (#4451) + - tweak: Tables Flip Hotkey Change (#4423) + github-actions[bot]: + - server: Automatic NanoMap Update (#4458) diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css index e7cdfffe751..12b385404d7 100644 --- a/html/font-awesome/css/all.min.css +++ b/html/font-awesome/css/all.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(fa-regular-400.eot);src:url(fa-regular-400.eot?#iefix) format("embedded-opentype"),url(fa-regular-400.woff) format("woff")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff) format("woff")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hive:before{content:"\e07f"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-innosoft:before{content:"\e080"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-perbyte:before{content:"\e083"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-uncharted:before{content:"\e084"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-watchman-monitoring:before{content:"\e087"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(fa-brands-400.eot);src:url(fa-brands-400.eot?#iefix) format("embedded-opentype"),url(fa-brands-400.woff2) format("woff2"),url(fa-brands-400.woff) format("woff"),url(fa-brands-400.ttf) format("truetype"),url(fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(fa-regular-400.eot);src:url(fa-regular-400.eot?#iefix) format("embedded-opentype"),url(fa-regular-400.woff2) format("woff2"),url(fa-regular-400.woff) format("woff"),url(fa-regular-400.ttf) format("truetype"),url(fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff2) format("woff2"),url(fa-solid-900.woff) format("woff"),url(fa-solid-900.ttf) format("truetype"),url(fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} diff --git a/html/font-awesome/css/v4-shims.min.css b/html/font-awesome/css/v4-shims.min.css index 5f3fdc598c8..21a0708aafa 100644 --- a/html/font-awesome/css/v4-shims.min.css +++ b/html/font-awesome/css/v4-shims.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file +.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f884"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cab:before{content:"\f1ba"} \ No newline at end of file diff --git a/html/font-awesome/webfonts/fa-regular-400.eot b/html/font-awesome/webfonts/fa-regular-400.eot index d62be2fad88..a4e598936b3 100644 Binary files a/html/font-awesome/webfonts/fa-regular-400.eot and b/html/font-awesome/webfonts/fa-regular-400.eot differ diff --git a/html/font-awesome/webfonts/fa-regular-400.woff b/html/font-awesome/webfonts/fa-regular-400.woff index 43b1a9ae49d..ad077c6bec7 100644 Binary files a/html/font-awesome/webfonts/fa-regular-400.woff and b/html/font-awesome/webfonts/fa-regular-400.woff differ diff --git a/html/font-awesome/webfonts/fa-solid-900.eot b/html/font-awesome/webfonts/fa-solid-900.eot index c77baa8d46a..e99417197e4 100644 Binary files a/html/font-awesome/webfonts/fa-solid-900.eot and b/html/font-awesome/webfonts/fa-solid-900.eot differ diff --git a/html/font-awesome/webfonts/fa-solid-900.woff b/html/font-awesome/webfonts/fa-solid-900.woff index 77c1786227f..23ee663443a 100644 Binary files a/html/font-awesome/webfonts/fa-solid-900.woff and b/html/font-awesome/webfonts/fa-solid-900.woff differ diff --git a/icons/_nanomaps/Cyberiad_nanomap_z1.png b/icons/_nanomaps/Cyberiad_nanomap_z1.png index 5ce736d1576..390f6653a8b 100644 Binary files a/icons/_nanomaps/Cyberiad_nanomap_z1.png and b/icons/_nanomaps/Cyberiad_nanomap_z1.png differ diff --git a/icons/_nanomaps/Delta_nanomap_z1.png b/icons/_nanomaps/Delta_nanomap_z1.png index 6a160deb363..6c22286a0f3 100644 Binary files a/icons/_nanomaps/Delta_nanomap_z1.png and b/icons/_nanomaps/Delta_nanomap_z1.png differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index a386dc0e9e0..37295319bb3 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi index b11a2ac75fd..8c837b0e546 100644 Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index d0439308691..8e29f8ee12e 100644 Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi index d64644b0d50..b554c709f92 100644 Binary files a/icons/mob/clothing/eyes.dmi and b/icons/mob/clothing/eyes.dmi differ diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index 1a63f700907..a54246cc501 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 62d862d5092..c2c47492f6b 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/species/drask/eyes.dmi b/icons/mob/clothing/species/drask/eyes.dmi index 7fbe4aced2f..355f5e2cf51 100644 Binary files a/icons/mob/clothing/species/drask/eyes.dmi and b/icons/mob/clothing/species/drask/eyes.dmi differ diff --git a/icons/mob/clothing/species/drask/head.dmi b/icons/mob/clothing/species/drask/head.dmi index ed7fcb3538b..6d02bb20fe6 100644 Binary files a/icons/mob/clothing/species/drask/head.dmi and b/icons/mob/clothing/species/drask/head.dmi differ diff --git a/icons/mob/clothing/species/drask/helmet.dmi b/icons/mob/clothing/species/drask/helmet.dmi index 0ab58369a0f..b0c49b3c419 100644 Binary files a/icons/mob/clothing/species/drask/helmet.dmi and b/icons/mob/clothing/species/drask/helmet.dmi differ diff --git a/icons/mob/clothing/species/drask/mask.dmi b/icons/mob/clothing/species/drask/mask.dmi index 807cec3cdea..db26ee4b53f 100644 Binary files a/icons/mob/clothing/species/drask/mask.dmi and b/icons/mob/clothing/species/drask/mask.dmi differ diff --git a/icons/mob/clothing/species/drask/suit.dmi b/icons/mob/clothing/species/drask/suit.dmi index 83b1cbc29d6..4f725b4ecf8 100644 Binary files a/icons/mob/clothing/species/drask/suit.dmi and b/icons/mob/clothing/species/drask/suit.dmi differ diff --git a/icons/mob/clothing/species/drask/uniform.dmi b/icons/mob/clothing/species/drask/uniform.dmi index ff952b86509..123d948dd41 100644 Binary files a/icons/mob/clothing/species/drask/uniform.dmi and b/icons/mob/clothing/species/drask/uniform.dmi differ diff --git a/icons/mob/clothing/species/grey/eyes.dmi b/icons/mob/clothing/species/grey/eyes.dmi index acff6dee4b9..8d1ae19391c 100644 Binary files a/icons/mob/clothing/species/grey/eyes.dmi and b/icons/mob/clothing/species/grey/eyes.dmi differ diff --git a/icons/mob/clothing/species/grey/helmet.dmi b/icons/mob/clothing/species/grey/helmet.dmi index 4f8bfc79a7b..5c0010c30c9 100644 Binary files a/icons/mob/clothing/species/grey/helmet.dmi and b/icons/mob/clothing/species/grey/helmet.dmi differ diff --git a/icons/mob/clothing/species/grey/mask.dmi b/icons/mob/clothing/species/grey/mask.dmi index d85ea5dce21..82c9d36ff3b 100644 Binary files a/icons/mob/clothing/species/grey/mask.dmi and b/icons/mob/clothing/species/grey/mask.dmi differ diff --git a/icons/mob/clothing/species/grey/uniform.dmi b/icons/mob/clothing/species/grey/uniform.dmi index 755c331c8b9..41ebec1c8a1 100644 Binary files a/icons/mob/clothing/species/grey/uniform.dmi and b/icons/mob/clothing/species/grey/uniform.dmi differ diff --git a/icons/mob/clothing/species/monkey/eyes.dmi b/icons/mob/clothing/species/monkey/eyes.dmi index b430e2e5020..7e0e44e270f 100644 Binary files a/icons/mob/clothing/species/monkey/eyes.dmi and b/icons/mob/clothing/species/monkey/eyes.dmi differ diff --git a/icons/mob/clothing/species/monkey/head.dmi b/icons/mob/clothing/species/monkey/head.dmi index 055216eaed9..95c06af67bc 100644 Binary files a/icons/mob/clothing/species/monkey/head.dmi and b/icons/mob/clothing/species/monkey/head.dmi differ diff --git a/icons/mob/clothing/species/monkey/mask.dmi b/icons/mob/clothing/species/monkey/mask.dmi index bbc13fc65d7..c37c41b35a1 100644 Binary files a/icons/mob/clothing/species/monkey/mask.dmi and b/icons/mob/clothing/species/monkey/mask.dmi differ diff --git a/icons/mob/clothing/species/monkey/uniform.dmi b/icons/mob/clothing/species/monkey/uniform.dmi index aa7ffea3268..cb8e3d0dd85 100644 Binary files a/icons/mob/clothing/species/monkey/uniform.dmi and b/icons/mob/clothing/species/monkey/uniform.dmi differ diff --git a/icons/mob/clothing/species/plasmaman/mask.dmi b/icons/mob/clothing/species/plasmaman/mask.dmi index 374c4c25aa6..0d28762d032 100644 Binary files a/icons/mob/clothing/species/plasmaman/mask.dmi and b/icons/mob/clothing/species/plasmaman/mask.dmi differ diff --git a/icons/mob/clothing/species/tajaran/head.dmi b/icons/mob/clothing/species/tajaran/head.dmi index b9e3090c037..8fb90a451d2 100644 Binary files a/icons/mob/clothing/species/tajaran/head.dmi and b/icons/mob/clothing/species/tajaran/head.dmi differ diff --git a/icons/mob/clothing/species/tajaran/helmet.dmi b/icons/mob/clothing/species/tajaran/helmet.dmi index 48521b0bfda..7340c8c9db1 100644 Binary files a/icons/mob/clothing/species/tajaran/helmet.dmi and b/icons/mob/clothing/species/tajaran/helmet.dmi differ diff --git a/icons/mob/clothing/species/tajaran/mask.dmi b/icons/mob/clothing/species/tajaran/mask.dmi index a433e44f240..90b55d2fb79 100644 Binary files a/icons/mob/clothing/species/tajaran/mask.dmi and b/icons/mob/clothing/species/tajaran/mask.dmi differ diff --git a/icons/mob/clothing/species/tajaran/suit.dmi b/icons/mob/clothing/species/tajaran/suit.dmi index 6bbc8c52e0e..05cb40b48f5 100644 Binary files a/icons/mob/clothing/species/tajaran/suit.dmi and b/icons/mob/clothing/species/tajaran/suit.dmi differ diff --git a/icons/mob/clothing/species/unathi/head.dmi b/icons/mob/clothing/species/unathi/head.dmi index 3c7a9aee3c3..bc7498ef90f 100644 Binary files a/icons/mob/clothing/species/unathi/head.dmi and b/icons/mob/clothing/species/unathi/head.dmi differ diff --git a/icons/mob/clothing/species/unathi/helmet.dmi b/icons/mob/clothing/species/unathi/helmet.dmi index 8ddf7d08395..13ffdaab528 100644 Binary files a/icons/mob/clothing/species/unathi/helmet.dmi and b/icons/mob/clothing/species/unathi/helmet.dmi differ diff --git a/icons/mob/clothing/species/unathi/mask.dmi b/icons/mob/clothing/species/unathi/mask.dmi index f76cae2d357..9802caa3ac1 100644 Binary files a/icons/mob/clothing/species/unathi/mask.dmi and b/icons/mob/clothing/species/unathi/mask.dmi differ diff --git a/icons/mob/clothing/species/unathi/suit.dmi b/icons/mob/clothing/species/unathi/suit.dmi index 9c34852f8ce..edecf31cba7 100644 Binary files a/icons/mob/clothing/species/unathi/suit.dmi and b/icons/mob/clothing/species/unathi/suit.dmi differ diff --git a/icons/mob/clothing/species/unathi/uniform.dmi b/icons/mob/clothing/species/unathi/uniform.dmi index ed9232aa63c..7756dbf128a 100644 Binary files a/icons/mob/clothing/species/unathi/uniform.dmi and b/icons/mob/clothing/species/unathi/uniform.dmi differ diff --git a/icons/mob/clothing/species/vox/eyes.dmi b/icons/mob/clothing/species/vox/eyes.dmi index d39ec8fadae..482199a45f4 100644 Binary files a/icons/mob/clothing/species/vox/eyes.dmi and b/icons/mob/clothing/species/vox/eyes.dmi differ diff --git a/icons/mob/clothing/species/vox/head.dmi b/icons/mob/clothing/species/vox/head.dmi index 0300c275c49..53e1be9486b 100644 Binary files a/icons/mob/clothing/species/vox/head.dmi and b/icons/mob/clothing/species/vox/head.dmi differ diff --git a/icons/mob/clothing/species/vox/helmet.dmi b/icons/mob/clothing/species/vox/helmet.dmi index 321a41a2cc5..c34f0f63950 100644 Binary files a/icons/mob/clothing/species/vox/helmet.dmi and b/icons/mob/clothing/species/vox/helmet.dmi differ diff --git a/icons/mob/clothing/species/vox/mask.dmi b/icons/mob/clothing/species/vox/mask.dmi index a23a8637fbe..173b80e41df 100644 Binary files a/icons/mob/clothing/species/vox/mask.dmi and b/icons/mob/clothing/species/vox/mask.dmi differ diff --git a/icons/mob/clothing/species/vox/suit.dmi b/icons/mob/clothing/species/vox/suit.dmi index 441cbf306d0..76a40146137 100644 Binary files a/icons/mob/clothing/species/vox/suit.dmi and b/icons/mob/clothing/species/vox/suit.dmi differ diff --git a/icons/mob/clothing/species/vox/uniform.dmi b/icons/mob/clothing/species/vox/uniform.dmi index aa7cf2c899e..911a291a18b 100644 Binary files a/icons/mob/clothing/species/vox/uniform.dmi and b/icons/mob/clothing/species/vox/uniform.dmi differ diff --git a/icons/mob/clothing/species/vulpkanin/head.dmi b/icons/mob/clothing/species/vulpkanin/head.dmi index 7273ff2892f..0296d04a8e4 100644 Binary files a/icons/mob/clothing/species/vulpkanin/head.dmi and b/icons/mob/clothing/species/vulpkanin/head.dmi differ diff --git a/icons/mob/clothing/species/vulpkanin/helmet.dmi b/icons/mob/clothing/species/vulpkanin/helmet.dmi index 23fd7e15162..14113ae663e 100644 Binary files a/icons/mob/clothing/species/vulpkanin/helmet.dmi and b/icons/mob/clothing/species/vulpkanin/helmet.dmi differ diff --git a/icons/mob/clothing/species/vulpkanin/mask.dmi b/icons/mob/clothing/species/vulpkanin/mask.dmi index 83c3999a622..802d3b337a5 100644 Binary files a/icons/mob/clothing/species/vulpkanin/mask.dmi and b/icons/mob/clothing/species/vulpkanin/mask.dmi differ diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi index d307193378e..539a5a9a6c8 100644 Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ diff --git a/icons/mob/clothing/ties.dmi b/icons/mob/clothing/ties.dmi index 671083841eb..62ac2879d78 100644 Binary files a/icons/mob/clothing/ties.dmi and b/icons/mob/clothing/ties.dmi differ diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi index 73426a9361f..f748c37e23f 100644 Binary files a/icons/mob/clothing/uniform.dmi and b/icons/mob/clothing/uniform.dmi differ diff --git a/icons/mob/human_races/monkeys/r_stok.dmi b/icons/mob/human_races/monkeys/r_stok.dmi index 69c6c3538d6..d844e1d2439 100644 Binary files a/icons/mob/human_races/monkeys/r_stok.dmi and b/icons/mob/human_races/monkeys/r_stok.dmi differ diff --git a/icons/mob/human_races/monkeys/r_stok_old.dmi b/icons/mob/human_races/monkeys/r_stok_old.dmi new file mode 100644 index 00000000000..69c6c3538d6 Binary files /dev/null and b/icons/mob/human_races/monkeys/r_stok_old.dmi differ diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index f03dc3a3c93..969efe2a696 100644 Binary files a/icons/mob/inhands/clothing_lefthand.dmi and b/icons/mob/inhands/clothing_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi index 6c31d017974..1fcce3b1128 100644 Binary files a/icons/mob/inhands/clothing_righthand.dmi and b/icons/mob/inhands/clothing_righthand.dmi differ diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi index b233633759c..be360ac2613 100644 Binary files a/icons/mob/inhands/guns_lefthand.dmi and b/icons/mob/inhands/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index 8c24a10827d..1f606ac529c 100644 Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 71186ba1370..73edd66b4c3 100755 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 481a0213806..a2e82d6bd2e 100755 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 438b8e20018..7017d61798b 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/candle.dmi b/icons/obj/candle.dmi index eac8464b282..cf79a083197 100644 Binary files a/icons/obj/candle.dmi and b/icons/obj/candle.dmi differ diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index cf27889017c..4d790c73929 100644 Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index 686c80ddbed..5aa7095a37b 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index 0564edd3a27..b2ee708721d 100644 Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 62e8ecf7ac1..4d8bd11d56e 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 3d7a16a75aa..1aed2bdf3c1 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 774e3bd2e6a..8682da10e4a 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/ties_overlay.dmi b/icons/obj/clothing/ties_overlay.dmi index 91cd0410475..67271752f82 100644 Binary files a/icons/obj/clothing/ties_overlay.dmi and b/icons/obj/clothing/ties_overlay.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 72347f30963..6675b289799 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index a99b07743d7..284415e32b2 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 4673770391d..f6287575a15 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 189df1f4852..f1c80e3c584 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/engines_and_power/power.dmi b/icons/obj/engines_and_power/power.dmi index 69ed1d29db8..79af17d1e89 100644 Binary files a/icons/obj/engines_and_power/power.dmi and b/icons/obj/engines_and_power/power.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 1917b2ce215..a3b3ada8e00 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/guncabinet.dmi b/icons/obj/guncabinet.dmi index 977a03e63b7..4ef6077b690 100644 Binary files a/icons/obj/guncabinet.dmi and b/icons/obj/guncabinet.dmi differ diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index 10809b14177..be50ea56c49 100644 Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 41ac5232d52..ce029b72ac6 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/lavaland/artefacts.dmi b/icons/obj/lavaland/artefacts.dmi index c90fe002a7a..178610b7424 100644 Binary files a/icons/obj/lavaland/artefacts.dmi and b/icons/obj/lavaland/artefacts.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 01274806dec..eaa9c366fc2 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/machines/vending.dmi b/icons/obj/machines/vending.dmi index 34a31642bc3..62cb9f08817 100644 Binary files a/icons/obj/machines/vending.dmi and b/icons/obj/machines/vending.dmi differ diff --git a/icons/obj/mecha/lockermech.dmi b/icons/obj/mecha/lockermech.dmi index ac7688d5ce4..ea99827ee41 100644 Binary files a/icons/obj/mecha/lockermech.dmi and b/icons/obj/mecha/lockermech.dmi differ diff --git a/icons/obj/mecha/mecha.dmi b/icons/obj/mecha/mecha.dmi index 582b559b043..1eff9ee63d0 100644 Binary files a/icons/obj/mecha/mecha.dmi and b/icons/obj/mecha/mecha.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 4b6e186348d..ce6fb34a070 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/paintkit.dmi b/icons/obj/paintkit.dmi index 8f7e2048e2f..3b24583010d 100644 Binary files a/icons/obj/paintkit.dmi and b/icons/obj/paintkit.dmi differ diff --git a/icons/obj/pipes_and_stuff/not_atmos/transit_tube.dmi b/icons/obj/pipes_and_stuff/not_atmos/transit_tube.dmi index bdb1608a313..aca65d502fd 100644 Binary files a/icons/obj/pipes_and_stuff/not_atmos/transit_tube.dmi and b/icons/obj/pipes_and_stuff/not_atmos/transit_tube.dmi differ diff --git a/icons/obj/pipes_and_stuff/not_atmos/transit_tube_pod.dmi b/icons/obj/pipes_and_stuff/not_atmos/transit_tube_pod.dmi index 86070b8ce59..a0bdb36ec22 100644 Binary files a/icons/obj/pipes_and_stuff/not_atmos/transit_tube_pod.dmi and b/icons/obj/pipes_and_stuff/not_atmos/transit_tube_pod.dmi differ diff --git a/icons/obj/pipes_and_stuff/not_atmos/transit_tube_station.dmi b/icons/obj/pipes_and_stuff/not_atmos/transit_tube_station.dmi index 6f59f5e0084..348f6d29561 100644 Binary files a/icons/obj/pipes_and_stuff/not_atmos/transit_tube_station.dmi and b/icons/obj/pipes_and_stuff/not_atmos/transit_tube_station.dmi differ diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi index 728e109587b..5e0abf22d74 100644 Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi index 4158ae4087b..8904316e1e4 100644 Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index dd368906187..df063d05152 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index f21a36b69c0..32136d7295c 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/telescience.dmi b/icons/obj/telescience.dmi index bfbd41bc081..81471202dc2 100644 Binary files a/icons/obj/telescience.dmi and b/icons/obj/telescience.dmi differ diff --git a/icons/obj/walllocker.dmi b/icons/obj/walllocker.dmi index 8495e00ff83..1b133f04ad3 100644 Binary files a/icons/obj/walllocker.dmi and b/icons/obj/walllocker.dmi differ diff --git a/icons/obj/weapons/energy.dmi b/icons/obj/weapons/energy.dmi index 10b9725b96f..e198fb60ac3 100644 Binary files a/icons/obj/weapons/energy.dmi and b/icons/obj/weapons/energy.dmi differ diff --git a/icons/obj/weapons/projectile.dmi b/icons/obj/weapons/projectile.dmi index 72887c007d2..dec468709ff 100644 Binary files a/icons/obj/weapons/projectile.dmi and b/icons/obj/weapons/projectile.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 2a99ddbb4c2..421506da67e 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 4d4e6e833ca..dde8b2cf92c 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -191,44 +191,42 @@ window "outputwindow" elem "outputwindow" type = MAIN pos = 0,0 - size = 640x500 + size = 637x480 anchor1 = 0,0 anchor2 = 100,100 is-pane = true elem "input" type = INPUT - pos = 0,480 - size = 539x18 + pos = 3,456 + size = 467x20 anchor1 = 0,100 anchor2 = 100,100 background-color = #d3b5b5 is-default = true - border = sunken + border = line saved-params = "command" elem "saybutton" type = BUTTON - pos = 541,480 - size = 48x16 + pos = 474,456 + size = 80x20 anchor1 = 100,100 anchor2 = -1,-1 - background-color = #d4d4d4 text = "Say" command = ".winset \"saybutton.is-checked=true?input.command=\"!say \\\"\" macrobutton.is-checked=false:input.command=\"\"saybutton.is-checked=true?mebutton.is-checked=false\"" button-type = pushbox elem "mebutton" type = BUTTON - pos = 590,480 - size = 48x16 + pos = 553,456 + size = 80x20 anchor1 = 100,100 anchor2 = -1,-1 - background-color = #d4d4d4 text = "Me" command = ".winset \"mebutton.is-checked=true ? input.command=\"!me \\\"\" : input.command=\"\"mebutton.is-checked=true ? saybutton.is-checked=false\"\"mebutton.is-checked=true ? oocbutton.is-checked=false\"" button-type = pushbox elem "browseroutput" type = BROWSER pos = 0,0 - size = 638x479 + size = 633x452 anchor1 = 0,0 anchor2 = 100,100 background-color = #ffffff diff --git a/paradise.dme b/paradise.dme index 87a975dc8d1..7762078dc70 100644 --- a/paradise.dme +++ b/paradise.dme @@ -44,6 +44,7 @@ #include "code\__DEFINES\crafting.dm" #include "code\__DEFINES\criminal_status.dm" #include "code\__DEFINES\cult.dm" +#include "code\__DEFINES\directions.dm" #include "code\__DEFINES\diseases.dm" #include "code\__DEFINES\dmjit.dm" #include "code\__DEFINES\dna.dm" @@ -326,6 +327,7 @@ #include "code\controllers\subsystem\processing\obj.dm" #include "code\controllers\subsystem\processing\processing.dm" #include "code\controllers\subsystem\processing\projectiles.dm" +#include "code\controllers\subsystem\processing\transittube.dm" #include "code\controllers\subsystem\tickets\mentor_tickets.dm" #include "code\controllers\subsystem\tickets\tickets.dm" #include "code\datums\action.dm" @@ -1230,6 +1232,7 @@ #include "code\game\objects\items\weapons\implants\implant_krav_maga.dm" #include "code\game\objects\items\weapons\implants\implant_mindshield.dm" #include "code\game\objects\items\weapons\implants\implant_sad_trombone.dm" +#include "code\game\objects\items\weapons\implants\implant_second_chance.dm" #include "code\game\objects\items\weapons\implants\implant_stealth.dm" #include "code\game\objects\items\weapons\implants\implant_storage.dm" #include "code\game\objects\items\weapons\implants\implant_supercharge.dm" @@ -1753,7 +1756,6 @@ #include "code\modules\clothing\suits\labcoat.dm" #include "code\modules\clothing\suits\miscellaneous.dm" #include "code\modules\clothing\suits\storage.dm" -#include "code\modules\clothing\suits\toggles.dm" #include "code\modules\clothing\suits\utility.dm" #include "code\modules\clothing\suits\wiz_robe.dm" #include "code\modules\clothing\under\color.dm" diff --git a/tgui/packages/tgui/interfaces/CargoConsole.js b/tgui/packages/tgui/interfaces/CargoConsole.js index 8e95b3a0722..bd7a2e5fbd9 100644 --- a/tgui/packages/tgui/interfaces/CargoConsole.js +++ b/tgui/packages/tgui/interfaces/CargoConsole.js @@ -67,6 +67,7 @@ const StatusPane = (_properties, context) => { const { is_public, points, + credits, timeleft, moving, at_station, @@ -98,6 +99,9 @@ const StatusPane = (_properties, context) => { {points} + + {credits} + {statusText} @@ -181,7 +185,7 @@ const CataloguePane = (_properties, context) => { {cratesToShow.map(c => ( - {c.name} ({c.cost} Points) + {c.name} {c.cost ? c.cost+" Points" : ""} {c.creditsCost ? c.creditsCost+" Credits" : ""} + ) } diff --git a/tgui/packages/tgui/interfaces/Uplink.js b/tgui/packages/tgui/interfaces/Uplink.js index 02bb13e68f4..375a72495f4 100644 --- a/tgui/packages/tgui/interfaces/Uplink.js +++ b/tgui/packages/tgui/interfaces/Uplink.js @@ -240,6 +240,9 @@ const ExploitableInfoPage = (_properties, context) => { Sex: {selectedRecord.sex} Species: {selectedRecord.species} +
    + {selectedRecord.exploit_record} +
    diff --git a/tgui/packages/tgui/interfaces/pda/pda_messenger.js b/tgui/packages/tgui/interfaces/pda/pda_messenger.js index 77dfdbf24c1..acce1c16f61 100644 --- a/tgui/packages/tgui/interfaces/pda/pda_messenger.js +++ b/tgui/packages/tgui/interfaces/pda/pda_messenger.js @@ -17,8 +17,7 @@ export const ActiveConversation = (props, context) => { const data = props.data; const { - convo_name, - convo_job, + convo_device, messages, active_convo, } = data; @@ -36,7 +35,7 @@ export const ActiveConversation = (props, context) => { onClick={() => act("Back")} />
    { onClick={() => act("Back")} />
    a?"average":t>c?"bad":"good"),children:[e.val,e.units]},e.entry);var t,n,r,a,c}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MessengerList=t.ActiveConversation=t.pda_messenger=void 0;var o=n(0),r=n(24),i=n(1),a=n(2);t.pda_messenger=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.data);return r.active_convo?(0,o.createComponentVNode)(2,c,{data:r}):(0,o.createComponentVNode)(2,l,{data:r})};var c=function(e,t){var n=(0,i.useBackend)(t).act,c=e.data,l=c.convo_name,s=c.convo_job,d=c.messages,u=c.active_convo,p=(0,i.useLocalState)(t,"clipboardMode",!1),m=p[0],h=p[1],f=(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return n("Back")}}),(0,o.createComponentVNode)(2,a.Section,{level:2,title:"Conversation with "+l+" ("+s+")",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eye",selected:m,tooltip:"Enter Clipboard Mode",tooltipPosition:"bottom-left",onClick:function(){return h(!m)}}),height:"415px",stretchContents:!0,children:[(0,o.createComponentVNode)(2,a.Section,{height:"97%",overflowY:"auto",children:(0,r.filter)((function(e){return e.target===u}))(d).map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{textAlign:e.sent?"right":"left",position:"relative",mb:1,children:[(0,o.createComponentVNode)(2,a.Icon,{fontSize:2.5,color:e.sent?"#3e6189":"#565656",position:"absolute",left:e.sent?null:"0px",right:e.sent?"0px":null,bottom:"-5px",style:{"z-index":"0",transform:e.sent?"scale(-1, 1)":null},name:"comment"}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,backgroundColor:e.sent?"#3e6189":"#565656",p:1,maxWidth:"100%",position:"relative",textAlign:"left",style:{"z-index":"1","border-radius":"5px","word-break":"normal","word-wrap":"break-word"},children:e.message})]},t)}))}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{mt:1,icon:"comment",onClick:function(){return n("Message",{target:u})},content:"Reply"})})]})]});return m&&(f=(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return n("Back")}}),(0,o.createComponentVNode)(2,a.Section,{level:2,title:"Conversation with "+l+" ("+s+")",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eye",selected:m,tooltip:"Exit Clipboard Mode",tooltipPosition:"bottom-left",onClick:function(){return h(!m)}}),height:"415px",stretchContents:!0,children:[(0,o.createComponentVNode)(2,a.Section,{style:{height:"97%","overflow-y":"auto"},children:(0,r.filter)((function(e){return e.target===u}))(d).map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{color:e.sent?"#2185d0":"#aaaaaa",style:{"word-break":"normal"},children:[e.sent?"You:":"Them:"," ",e.message]},t)}))}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{mt:1,icon:"comment",onClick:function(){return n("Message",{target:u})},content:"Reply"})})]})]})),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Messenger Functions",children:(0,o.createComponentVNode)(2,a.Button,{icon:"trash",color:"bad",onClick:function(){return n("Clear",{option:"Convo"})},children:"Delete Conversations"})})}),f]})};t.ActiveConversation=c;var l=function(e,t){var n=(0,i.useBackend)(t).act,r=e.data,c=r.convopdas,l=r.pdas,d=r.charges,u=r.silent,p=r.toff,m=(0,i.useLocalState)(t,"searchTerm",""),h=m[0],f=m[1];return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Messenger Functions",children:[(0,o.createComponentVNode)(2,a.Button,{selected:!u,icon:u?"volume-mute":"volume-up",onClick:function(){return n("Toggle Ringer")},children:["Ringer: ",u?"Off":"On"]}),(0,o.createComponentVNode)(2,a.Button,{color:p?"bad":"green",icon:"power-off",onClick:function(){return n("Toggle Messenger")},children:["Messenger: ",p?"Off":"On"]}),(0,o.createComponentVNode)(2,a.Button,{icon:"bell",onClick:function(){return n("Ringtone")},children:"Set Ringtone"}),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",color:"bad",onClick:function(){return n("Clear",{option:"All"})},children:"Delete All Conversations"})]})}),!p&&(0,o.createComponentVNode)(2,a.Box,{mt:2,children:[!!d&&(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cartridge Special Function",children:[d," charges left."]})}),!c.length&&!l.length&&(0,o.createComponentVNode)(2,a.Box,{children:"No current conversations"})||(0,o.createComponentVNode)(2,a.Box,{children:["Search: ",(0,o.createComponentVNode)(2,a.Input,{value:h,onInput:function(e,t){f(t)}}),(0,o.createComponentVNode)(2,s,{title:"Current Conversations",data:r,pdas:c,msgAct:"Select Conversation",searchTerm:h}),(0,o.createComponentVNode)(2,s,{title:"Other PDAs",pdas:l,msgAct:"Message",data:r,searchTerm:h})]})]})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Messenger Offline."})]})};t.MessengerList=l;var s=function(e,t){var n=(0,i.useBackend)(t).act,r=e.data,c=e.pdas,l=e.title,s=e.msgAct,d=e.searchTerm,u=r.charges,p=r.plugins;return c&&c.length?(0,o.createComponentVNode)(2,a.Section,{level:2,title:l,children:c.filter((function(e){return e.Name.toLowerCase().includes(d.toLowerCase())})).map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",content:e.Name,onClick:function(){return n(s,{target:e.uid})}}),!!u&&p.map((function(t){return(0,o.createComponentVNode)(2,a.Button,{icon:t.icon,content:t.name,onClick:function(){return n("Messenger Plugin",{plugin:t.uid,target:e.uid})}},t.uid)}))]},e.uid)}))}):(0,o.createComponentVNode)(2,a.Section,{level:2,title:l,children:"No PDAs found."})}},function(e,t,n){"use strict";t.__esModule=!0,t.Signaler=void 0;var o=n(0),r=n(15),i=n(1),a=n(2);t.Signaler=function(e,t){var n=(0,i.useBackend)(t).act,c=e.data,l=c.code,s=c.frequency,d=c.minFrequency,u=c.maxFrequency;return(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Frequency",children:(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,step:.2,stepPixelSize:6,minValue:d/10,maxValue:u/10,value:s/10,format:function(e){return(0,r.toFixed)(e,1)},width:"80px",onDrag:function(e,t){return n("freq",{freq:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Code",children:(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:l,width:"80px",onDrag:function(e,t){return n("code",{code:t})}})})]}),(0,o.createComponentVNode)(2,a.Button,{mt:1,fluid:!0,icon:"arrow-up",content:"Send Signal",textAlign:"center",onClick:function(){return n("signal")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitorMainContent=t.PowerMonitor=void 0;var o=n(0),r=n(24),i=n(43),a=n(15),c=n(7),l=n(18),s=n(1),d=n(2),u=n(3),p=6e5;t.PowerMonitor=function(e,t){return(0,o.createComponentVNode)(2,u.Window,{resizeable:!0,children:(0,o.createComponentVNode)(2,u.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,m)})})};var m=function(e,t){var n=(0,s.useBackend)(t),r=(n.act,n.data),i=r.powermonitor,a=r.can_select_monitor;return(0,o.createComponentVNode)(2,d.Box,{m:0,children:[!i&&a&&(0,o.createComponentVNode)(2,h),i&&(0,o.createComponentVNode)(2,f)]})};t.PowerMonitorMainContent=m;var h=function(e,t){var n=(0,s.useBackend)(t),r=n.act,i=n.data.powermonitors;return i?(0,o.createComponentVNode)(2,d.Section,{title:"Select Power Monitor",children:Object.keys(i).sort((function(e,t){return i[e]50?"battery-half":"battery-quarter")||"C"===t&&"bolt"||"F"===t&&"battery-full"||"M"===t&&"slash",color:"N"===t&&(n>50?"yellow":"red")||"C"===t&&"yellow"||"F"===t&&"green"||"M"===t&&"orange"}),(0,o.createComponentVNode)(2,d.Box,{inline:!0,width:"36px",textAlign:"right",children:(0,a.toFixed)(n)+"%"})],4)};C.defaultHooks=c.pureComponentHooks;var g=function(e){var t,n;switch(e.status){case"AOn":t=!0,n=!0;break;case"AOff":t=!0,n=!1;break;case"On":t=!1,n=!0;break;case"Off":t=!1,n=!1}var r=(n?"On":"Off")+" ["+(t?"auto":"manual")+"]";return(0,o.createComponentVNode)(2,d.ColorBox,{color:n?"good":"bad",content:t?undefined:"M",title:r})};g.defaultHooks=c.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.RndRoute=void 0;var o=n(1);t.RndRoute=function(e,t){var n=e.render,r=(0,o.useBackend)(t).data,i=r.menu,a=r.submenu,c=function(e,t){return null===e||e===undefined||("function"==typeof e?e(t):e===t)};return c(e.menu,i)&&c(e.submenu,a)?n():null}},function(e,t,n){e.exports=n(201)},function(e,t,n){"use strict";n(202),n(203),n(204),n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(223),n(224),n(225),n(227),n(229),n(230),n(231),n(160),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(248),n(249),n(250),n(251),n(252),n(254),n(255),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(270),n(272),n(273),n(274),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(286),n(287),n(288),n(289),n(290),n(291),n(293),n(294),n(296),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(322),n(323),n(324),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(177),n(342),n(343),n(344),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(377),n(378),n(379),n(380),n(381),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(402),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414);var o=n(0),r=n(416);n(417);n(182);var i=n(1),a=n(23),c=n(183),l=n(64);n(419),n(420),n(421),n(422),n(423);var s=n(424);n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438);var d,u=n(439),p=(Date.now(),(0,s.createStore)()),m=!0,h=function(){for(p.subscribe((function(){!function(){try{var e=p.getState();m&&(l.logger.log("initial render",e),(0,c.setupDrag)(e));var t=(0,n(136).getRoutedComponent)(e),r=(0,o.createComponentVNode)(2,s.StoreProvider,{store:p,children:(0,o.createComponentVNode)(2,t)});d||(d=document.getElementById("react-root")),(0,o.render)(r,d)}catch(i){throw l.logger.error("rendering error",i),i}m&&(m=!1)}()})),(0,u.captureExternalLinks)(),window.update=function(e){var t="string"==typeof e?function(e){var t=function(e,t){return"object"==typeof t&&null!==t&&t.__number__?parseFloat(t.__number__):t};a.IS_IE8&&(t=undefined);try{return JSON.parse(e,t)}catch(o){l.logger.log(o),l.logger.log("What we got:",e);var n=o&&o.message;throw new Error("JSON parsing error: "+n)}}(e):e;p.dispatch((0,i.backendUpdate)(t))};;){var e=window.__updateQueue__.shift();if(!e)break;window.update(e)}(0,r.loadCSS)("font-awesome.css")}; +var h=(0,p.createLogger)("Window"),f=function(e){var t,n;function l(){return e.apply(this,arguments)||this}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var p=l.prototype;return p.componentDidMount=function(){(0,m.refocusLayout)()},p.render=function(){var e=this.props,t=e.resizable,n=e.theme,l=e.children,p=(0,a.useBackend)(this.context),f=p.config,C=p.debugLayout,N=f.observer?f.statusa?"average":t>c?"bad":"good"),children:[e.val,e.units]},e.entry);var t,n,r,a,c}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MessengerList=t.ActiveConversation=t.pda_messenger=void 0;var o=n(0),r=n(24),i=n(1),a=n(2);t.pda_messenger=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.data);return r.active_convo?(0,o.createComponentVNode)(2,c,{data:r}):(0,o.createComponentVNode)(2,l,{data:r})};var c=function(e,t){var n=(0,i.useBackend)(t).act,c=e.data,l=c.convo_device,s=c.messages,d=c.active_convo,u=(0,i.useLocalState)(t,"clipboardMode",!1),p=u[0],m=u[1],h=(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return n("Back")}}),(0,o.createComponentVNode)(2,a.Section,{level:2,title:"Conversation with "+l+" ",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eye",selected:p,tooltip:"Enter Clipboard Mode",tooltipPosition:"bottom-left",onClick:function(){return m(!p)}}),height:"415px",stretchContents:!0,children:[(0,o.createComponentVNode)(2,a.Section,{height:"97%",overflowY:"auto",children:(0,r.filter)((function(e){return e.target===d}))(s).map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{textAlign:e.sent?"right":"left",position:"relative",mb:1,children:[(0,o.createComponentVNode)(2,a.Icon,{fontSize:2.5,color:e.sent?"#3e6189":"#565656",position:"absolute",left:e.sent?null:"0px",right:e.sent?"0px":null,bottom:"-5px",style:{"z-index":"0",transform:e.sent?"scale(-1, 1)":null},name:"comment"}),(0,o.createComponentVNode)(2,a.Box,{inline:!0,backgroundColor:e.sent?"#3e6189":"#565656",p:1,maxWidth:"100%",position:"relative",textAlign:"left",style:{"z-index":"1","border-radius":"5px","word-break":"normal","word-wrap":"break-word"},children:e.message})]},t)}))}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{mt:1,icon:"comment",onClick:function(){return n("Message",{target:d})},content:"Reply"})})]})]});return p&&(h=(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return n("Back")}}),(0,o.createComponentVNode)(2,a.Section,{level:2,title:"Conversation with "+l+" ",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eye",selected:p,tooltip:"Exit Clipboard Mode",tooltipPosition:"bottom-left",onClick:function(){return m(!p)}}),height:"415px",stretchContents:!0,children:[(0,o.createComponentVNode)(2,a.Section,{style:{height:"97%","overflow-y":"auto"},children:(0,r.filter)((function(e){return e.target===d}))(s).map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{color:e.sent?"#2185d0":"#aaaaaa",style:{"word-break":"normal"},children:[e.sent?"You:":"Them:"," ",e.message]},t)}))}),(0,o.createComponentVNode)(2,a.Box,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{mt:1,icon:"comment",onClick:function(){return n("Message",{target:d})},content:"Reply"})})]})]})),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Messenger Functions",children:(0,o.createComponentVNode)(2,a.Button,{icon:"trash",color:"bad",onClick:function(){return n("Clear",{option:"Convo"})},children:"Delete Conversations"})})}),h]})};t.ActiveConversation=c;var l=function(e,t){var n=(0,i.useBackend)(t).act,r=e.data,c=r.convopdas,l=r.pdas,d=r.charges,u=r.silent,p=r.toff,m=(0,i.useLocalState)(t,"searchTerm",""),h=m[0],f=m[1];return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Messenger Functions",children:[(0,o.createComponentVNode)(2,a.Button,{selected:!u,icon:u?"volume-mute":"volume-up",onClick:function(){return n("Toggle Ringer")},children:["Ringer: ",u?"Off":"On"]}),(0,o.createComponentVNode)(2,a.Button,{color:p?"bad":"green",icon:"power-off",onClick:function(){return n("Toggle Messenger")},children:["Messenger: ",p?"Off":"On"]}),(0,o.createComponentVNode)(2,a.Button,{icon:"bell",onClick:function(){return n("Ringtone")},children:"Set Ringtone"}),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",color:"bad",onClick:function(){return n("Clear",{option:"All"})},children:"Delete All Conversations"})]})}),!p&&(0,o.createComponentVNode)(2,a.Box,{mt:2,children:[!!d&&(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cartridge Special Function",children:[d," charges left."]})}),!c.length&&!l.length&&(0,o.createComponentVNode)(2,a.Box,{children:"No current conversations"})||(0,o.createComponentVNode)(2,a.Box,{children:["Search: ",(0,o.createComponentVNode)(2,a.Input,{value:h,onInput:function(e,t){f(t)}}),(0,o.createComponentVNode)(2,s,{title:"Current Conversations",data:r,pdas:c,msgAct:"Select Conversation",searchTerm:h}),(0,o.createComponentVNode)(2,s,{title:"Other PDAs",pdas:l,msgAct:"Message",data:r,searchTerm:h})]})]})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Messenger Offline."})]})};t.MessengerList=l;var s=function(e,t){var n=(0,i.useBackend)(t).act,r=e.data,c=e.pdas,l=e.title,s=e.msgAct,d=e.searchTerm,u=r.charges,p=r.plugins;return c&&c.length?(0,o.createComponentVNode)(2,a.Section,{level:2,title:l,children:c.filter((function(e){return e.Name.toLowerCase().includes(d.toLowerCase())})).map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",content:e.Name,onClick:function(){return n(s,{target:e.uid})}}),!!u&&p.map((function(t){return(0,o.createComponentVNode)(2,a.Button,{icon:t.icon,content:t.name,onClick:function(){return n("Messenger Plugin",{plugin:t.uid,target:e.uid})}},t.uid)}))]},e.uid)}))}):(0,o.createComponentVNode)(2,a.Section,{level:2,title:l,children:"No PDAs found."})}},function(e,t,n){"use strict";t.__esModule=!0,t.Signaler=void 0;var o=n(0),r=n(15),i=n(1),a=n(2);t.Signaler=function(e,t){var n=(0,i.useBackend)(t).act,c=e.data,l=c.code,s=c.frequency,d=c.minFrequency,u=c.maxFrequency;return(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Frequency",children:(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,step:.2,stepPixelSize:6,minValue:d/10,maxValue:u/10,value:s/10,format:function(e){return(0,r.toFixed)(e,1)},width:"80px",onDrag:function(e,t){return n("freq",{freq:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Code",children:(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:l,width:"80px",onDrag:function(e,t){return n("code",{code:t})}})})]}),(0,o.createComponentVNode)(2,a.Button,{mt:1,fluid:!0,icon:"arrow-up",content:"Send Signal",textAlign:"center",onClick:function(){return n("signal")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.PowerMonitorMainContent=t.PowerMonitor=void 0;var o=n(0),r=n(24),i=n(43),a=n(15),c=n(7),l=n(18),s=n(1),d=n(2),u=n(3),p=6e5;t.PowerMonitor=function(e,t){return(0,o.createComponentVNode)(2,u.Window,{resizeable:!0,children:(0,o.createComponentVNode)(2,u.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,m)})})};var m=function(e,t){var n=(0,s.useBackend)(t),r=(n.act,n.data),i=r.powermonitor,a=r.can_select_monitor;return(0,o.createComponentVNode)(2,d.Box,{m:0,children:[!i&&a&&(0,o.createComponentVNode)(2,h),i&&(0,o.createComponentVNode)(2,f)]})};t.PowerMonitorMainContent=m;var h=function(e,t){var n=(0,s.useBackend)(t),r=n.act,i=n.data.powermonitors;return i?(0,o.createComponentVNode)(2,d.Section,{title:"Select Power Monitor",children:Object.keys(i).sort((function(e,t){return i[e]50?"battery-half":"battery-quarter")||"C"===t&&"bolt"||"F"===t&&"battery-full"||"M"===t&&"slash",color:"N"===t&&(n>50?"yellow":"red")||"C"===t&&"yellow"||"F"===t&&"green"||"M"===t&&"orange"}),(0,o.createComponentVNode)(2,d.Box,{inline:!0,width:"36px",textAlign:"right",children:(0,a.toFixed)(n)+"%"})],4)};C.defaultHooks=c.pureComponentHooks;var g=function(e){var t,n;switch(e.status){case"AOn":t=!0,n=!0;break;case"AOff":t=!0,n=!1;break;case"On":t=!1,n=!0;break;case"Off":t=!1,n=!1}var r=(n?"On":"Off")+" ["+(t?"auto":"manual")+"]";return(0,o.createComponentVNode)(2,d.ColorBox,{color:n?"good":"bad",content:t?undefined:"M",title:r})};g.defaultHooks=c.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.RndRoute=void 0;var o=n(1);t.RndRoute=function(e,t){var n=e.render,r=(0,o.useBackend)(t).data,i=r.menu,a=r.submenu,c=function(e,t){return null===e||e===undefined||("function"==typeof e?e(t):e===t)};return c(e.menu,i)&&c(e.submenu,a)?n():null}},function(e,t,n){e.exports=n(201)},function(e,t,n){"use strict";n(202),n(203),n(204),n(205),n(206),n(207),n(208),n(209),n(210),n(211),n(212),n(213),n(214),n(215),n(216),n(217),n(218),n(219),n(220),n(221),n(222),n(223),n(224),n(225),n(227),n(229),n(230),n(231),n(160),n(233),n(234),n(235),n(236),n(237),n(238),n(239),n(240),n(241),n(242),n(243),n(244),n(245),n(246),n(248),n(249),n(250),n(251),n(252),n(254),n(255),n(257),n(258),n(259),n(260),n(261),n(262),n(263),n(264),n(265),n(266),n(267),n(268),n(269),n(270),n(272),n(273),n(274),n(275),n(276),n(277),n(278),n(279),n(280),n(281),n(282),n(283),n(284),n(286),n(287),n(288),n(289),n(290),n(291),n(293),n(294),n(296),n(298),n(299),n(300),n(301),n(302),n(303),n(304),n(305),n(306),n(307),n(308),n(309),n(310),n(311),n(312),n(313),n(314),n(315),n(316),n(317),n(318),n(319),n(320),n(322),n(323),n(324),n(327),n(328),n(329),n(330),n(331),n(332),n(333),n(334),n(335),n(336),n(337),n(338),n(339),n(340),n(341),n(177),n(342),n(343),n(344),n(345),n(346),n(347),n(348),n(349),n(350),n(351),n(352),n(353),n(354),n(355),n(356),n(357),n(358),n(359),n(360),n(361),n(362),n(363),n(364),n(365),n(366),n(367),n(368),n(369),n(370),n(371),n(372),n(373),n(374),n(375),n(377),n(378),n(379),n(380),n(381),n(382),n(383),n(384),n(385),n(386),n(387),n(388),n(389),n(390),n(391),n(392),n(393),n(394),n(395),n(396),n(397),n(398),n(399),n(400),n(401),n(402),n(403),n(404),n(405),n(406),n(407),n(408),n(409),n(410),n(411),n(412),n(413),n(414);var o=n(0),r=n(416);n(417);n(182);var i=n(1),a=n(23),c=n(183),l=n(64);n(419),n(420),n(421),n(422),n(423);var s=n(424);n(426),n(427),n(428),n(429),n(430),n(431),n(432),n(433),n(434),n(435),n(436),n(437),n(438);var d,u=n(439),p=(Date.now(),(0,s.createStore)()),m=!0,h=function(){for(p.subscribe((function(){!function(){try{var e=p.getState();m&&(l.logger.log("initial render",e),(0,c.setupDrag)(e));var t=(0,n(136).getRoutedComponent)(e),r=(0,o.createComponentVNode)(2,s.StoreProvider,{store:p,children:(0,o.createComponentVNode)(2,t)});d||(d=document.getElementById("react-root")),(0,o.render)(r,d)}catch(i){throw l.logger.error("rendering error",i),i}m&&(m=!1)}()})),(0,u.captureExternalLinks)(),window.update=function(e){var t="string"==typeof e?function(e){var t=function(e,t){return"object"==typeof t&&null!==t&&t.__number__?parseFloat(t.__number__):t};a.IS_IE8&&(t=undefined);try{return JSON.parse(e,t)}catch(o){l.logger.log(o),l.logger.log("What we got:",e);var n=o&&o.message;throw new Error("JSON parsing error: "+n)}}(e):e;p.dispatch((0,i.backendUpdate)(t))};;){var e=window.__updateQueue__.shift();if(!e)break;window.update(e)}(0,r.loadCSS)("font-awesome.css")}; /** * @file * @copyright 2020 Aleksej Komarov @@ -233,11 +233,11 @@ var a=function(e){var t=e.className,n=e.title,a=e.level,c=void 0===a?1:a,l=e.but * @file * @copyright 2020 Aleksej Komarov * @license MIT - */var l=function(e){var t=e.className,n=e.vertical,a=e.children,l=c(e,["className","vertical","children"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Tabs",n?"Tabs--vertical":"Tabs--horizontal",t,(0,i.computeBoxClassName)(l)]),(0,o.createVNode)(1,"div","Tabs__tabBox",a,0),2,Object.assign({},(0,i.computeBoxProps)(l))))};t.Tabs=l;l.Tab=function(e){var t=e.className,n=e.selected,i=e.altSelection,l=c(e,["className","selected","altSelection"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({className:(0,r.classes)(["Tabs__tab",n&&"Tabs__tab--selected",i&&n&&"Tabs__tab--altSelection",t]),selected:!i&&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":461,"./AIFixer.js":462,"./APC.js":463,"./ATM.js":464,"./AccountsUplinkTerminal.js":465,"./AgentCard.js":466,"./AiAirlock.js":467,"./AirAlarm.js":468,"./AirlockAccessController.js":469,"./AirlockElectronics.js":470,"./AppearanceChanger.js":471,"./AtmosAlertConsole.js":472,"./AtmosControl.js":473,"./AtmosFilter.js":474,"./AtmosMixer.js":475,"./AtmosPump.js":476,"./Autolathe.js":477,"./Biogenerator.js":478,"./BlueSpaceArtilleryControl.js":479,"./BluespaceRiftScanner.js":480,"./BluespaceRiftServer.js":481,"./BluespaceTap.js":482,"./BodyScanner.js":483,"./BorgPanel.js":484,"./BotClean.js":485,"./BotSecurity.js":486,"./BrigCells.js":487,"./BrigTimer.js":488,"./CameraConsole.js":489,"./Canister.js":490,"./CardComputer.js":491,"./CargoConsole.js":492,"./Changelog.js":493,"./ChemDispenser.js":522,"./ChemHeater.js":526,"./ChemMaster.js":527,"./CloningConsole.js":528,"./CommunicationsComputer.js":529,"./Contractor.js":530,"./ConveyorSwitch.js":531,"./CrewMonitor.js":532,"./Cryo.js":533,"./CryopodConsole.js":535,"./DNAModifier.js":536,"./DNAModifyer.js":537,"./DestinationTagger.js":538,"./DisposalBin.js":539,"./DnaVault.js":540,"./EFTPOS.js":541,"./ERTManager.js":542,"./Electropack.js":543,"./EvolutionMenu.js":544,"./ExosuitFabricator.js":545,"./ExternalAirlockController.js":546,"./FaxMachine.js":547,"./FloorPainter.js":548,"./GPS.js":549,"./GasAnalyzer.js":550,"./GasFreezer.js":552,"./GenericCrewManifest.js":553,"./GhostHudPanel.js":554,"./HandheldChemDispenser.js":555,"./ImplantPad.js":556,"./Instrument.js":557,"./ItemPixelShift.js":558,"./KeycardAuth.js":559,"./LaborClaimConsole.js":560,"./LawManager.js":561,"./ListInput.js":562,"./MechBayConsole.js":563,"./MechaControlConsole.js":564,"./MedicalRecords.js":565,"./MiniGamesMenu.js":566,"./MiningVendor.js":567,"./Multitool.js":568,"./Newscaster.js":569,"./NinjaBloodScan.js":570,"./NinjaMindScan.js":571,"./NuclearBomb.js":572,"./OperatingComputer.js":573,"./Orbit.js":574,"./OreRedemption.js":575,"./PAI.js":576,"./PDA.js":593,"./PDAPainter.js":609,"./Pacman.js":610,"./PersonalCrafting.js":611,"./Photocopier.js":612,"./PodTracking.js":613,"./PoolController.js":614,"./PortablePump.js":615,"./PortableScrubber.js":616,"./PortableTurret.js":617,"./PowerMonitor.js":198,"./PrisonerImplantManager.js":618,"./QuestConsole.js":619,"./RCD.js":620,"./RPD.js":621,"./Radio.js":622,"./RequestConsole.js":623,"./RequestManager.js":624,"./RndConsole.js":67,"./RobotSelfDiagnosis.js":639,"./RoboticsControlConsole.js":640,"./Safe.js":641,"./SatelliteControl.js":642,"./SecureStorage.js":643,"./SecurityRecords.js":644,"./SeedExtractor.js":645,"./ShuttleConsole.js":646,"./ShuttleManipulator.js":647,"./Sleeper.js":648,"./SlotMachine.js":649,"./Smartfridge.js":650,"./Smes.js":651,"./SolarControl.js":652,"./SpawnersMenu.js":653,"./SpiderOS.js":654,"./StationAlertConsole.js":655,"./SuitStorage.js":656,"./SupermatterMonitor.js":657,"./SyndicateComputerSimple.js":658,"./SyndieCargoConsole.js":659,"./TTSSeedsExplorer.js":660,"./TachyonArray.js":661,"./Tank.js":662,"./TankDispenser.js":663,"./TcommsCore.js":664,"./TcommsRelay.js":665,"./Teleporter.js":666,"./ThiefKit.js":667,"./TransferValve.js":668,"./Uplink.js":669,"./VampireSpecMenu.js":670,"./VampireTrophiesStatus.js":671,"./Vending.js":672,"./VolumeMixer.js":673,"./VotePanel.js":674,"./Wires.js":675,"./Workshop.js":676};function r(e){var t=i(e);return n(t)}function i(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=i,e.exports=r,r.id=460},function(e,t,n){"use strict";t.__esModule=!0,t.AICard=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AICard=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;if(0===l.has_ai)return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createVNode)(1,"h3",null,"No AI detected.",16)})})})});var s=null;return s=l.integrity>=75?"green":l.integrity>=25?"yellow":"red",(0,o.createComponentVNode)(2,a.Window,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Stored AI",children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,display:"inline-block",children:(0,o.createVNode)(1,"h3",null,l.name,0)}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:s,value:l.integrity/100})})})}),(0,o.createComponentVNode)(2,i.Box,{color:"red",children:(0,o.createVNode)(1,"h2",null,1===l.flushing?"Wipe of AI in progress...":"",0)})]}),(0,o.createComponentVNode)(2,i.Section,{title:"Laws",children:!!l.has_laws&&(0,o.createComponentVNode)(2,i.Box,{children:l.laws.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{display:"inline-block",children:e},t)}))})||(0,o.createComponentVNode)(2,i.Box,{color:"red",children:(0,o.createVNode)(1,"h3",null,"No laws detected.",16)})}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Wireless Activity",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.wireless?"check":"times",content:l.wireless?"Enabled":"Disabled",color:l.wireless?"green":"red",onClick:function(){return c("wireless")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Subspace Transceiver",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.radio?"check":"times",content:l.radio?"Enabled":"Disabled",color:l.radio?"green":"red",onClick:function(){return c("radio")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Wipe",children:(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash-alt",confirmIcon:"trash-alt",disabled:l.flushing||0===l.integrity,confirmColor:"red",content:"Wipe AI",onClick:function(){return c("wipe")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AIFixer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AIFixer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;if(null===l.occupant)return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createVNode)(1,"h3",null,"No artificial intelligence detected.",16)})})})});var s=null;s=2!==l.stat&&null!==l.stat;var d=null;d=l.integrity>=75?"green":l.integrity>=25?"yellow":"red";var u=null;return u=l.integrity>=100,(0,o.createComponentVNode)(2,a.Window,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:(0,o.createVNode)(1,"h3",null,l.occupant,0)})}),(0,o.createComponentVNode)(2,i.Section,{title:"Information",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:d,value:l.integrity/100})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",color:s?"green":"red",children:s?"Functional":"Non-Functional"})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Laws",children:!!l.has_laws&&(0,o.createComponentVNode)(2,i.Box,{children:l.laws.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{display:"inline-block",children:e},t)}))})||(0,o.createComponentVNode)(2,i.Box,{color:"red",children:(0,o.createVNode)(1,"h3",null,"No laws detected.",16)})}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Wireless Activity",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.wireless?"times":"check",content:l.wireless?"Disabled":"Enabled",color:l.wireless?"red":"green",onClick:function(){return c("wireless")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Subspace Transceiver",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.radio?"times":"check",content:l.radio?"Disabled":"Enabled",color:l.radio?"red":"green",onClick:function(){return c("radio")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Start Repairs",children:(0,o.createComponentVNode)(2,i.Button,{icon:"wrench",disabled:u||l.active,content:u?"Already Repaired":"Repair",onClick:function(){return c("fix")}})})]}),(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3),c=n(192);t.APC=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,d)})})};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"}},s={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"}},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,d=n.data,u=d.locked&&!d.siliconUser,p=(d.normallyLocked,l[d.externalPower]||l[0]),m=l[d.chargingStatus]||l[0],h=d.powerChannels||[],f=s[d.malfStatus]||s[0],C=d.powerCellStatus/100;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.InterfaceLockNoticeBox),(0,o.createComponentVNode)(2,i.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Main Breaker",color:p.color,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:d.isOperating?"power-off":"times",content:d.isOperating?"On":"Off",selected:d.isOperating&&!u,color:d.isOperating?"":"bad",disabled:u,onClick:function(){return a("breaker")}}),children:["[ ",p.externalPowerText," ]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power Cell",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:"good",value:C})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Charge Mode",color:m.color,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:d.chargeMode?"sync":"times",content:d.chargeMode?"Auto":"Off",selected:d.chargeMode,disabled:u,onClick:function(){return a("charge")}}),children:["[ ",m.chargingText," ]"]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Power Channels",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[h.map((function(e){var t=e.topicParams;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.title,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{inline:!0,mx:2,color:e.status>=2?"good":"bad",children:e.status>=2?"On":"Off"}),(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Auto",selected:!u&&(1===e.status||3===e.status),disabled:u,onClick:function(){return a("channel",t.auto)}}),(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:"On",selected:!u&&2===e.status,disabled:u,onClick:function(){return a("channel",t.on)}}),(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Off",selected:!u&&0===e.status,disabled:u,onClick:function(){return a("channel",t.off)}})],4),children:[e.powerLoad," W"]},e.title)})),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Load",children:(0,o.createVNode)(1,"b",null,[d.totalLoad,(0,o.createTextVNode)(" W")],0)})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Misc",buttons:!!d.siliconUser&&(0,o.createFragment)([!!d.malfStatus&&(0,o.createComponentVNode)(2,i.Button,{icon:f.icon,content:f.content,color:"bad",onClick:function(){return a(f.action)}}),(0,o.createComponentVNode)(2,i.Button,{icon:"lightbulb-o",content:"Overload",onClick:function(){return a("overload")}})],0),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cover Lock",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:d.coverLocked?"lock":"unlock",content:d.coverLocked?"Engaged":"Disengaged",selected:d.coverLocked,disabled:u,onClick:function(){return a("cover")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Night Shift Lighting",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"lightbulb-o",content:d.nightshiftLights?"Enabled":"Disabled",selected:d.nightshiftLights,onClick:function(){return a("toggle_nightshift")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Emergency Light Fallback",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:d.coverLocked?"lock":"unlock",content:d.emergencyLights?"Engaged":"Disengaged",selected:d.emergencyLights,disabled:u,onClick:function(){return a("emergency_lighting")}})})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ATM=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ATM=function(e,t){var n,m=(0,r.useBackend)(t),h=(m.act,m.data),f=h.view_screen,C=h.authenticated_account,g=h.ticks_left_locked_down,N=h.linked_db;if(g>0)n=(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"bad",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"exclamation-triangle"}),"Maximum number of pin attempts exceeded! Access to this ATM has been temporarily disabled."]});else if(N)if(C)switch(f){case 1:n=(0,o.createComponentVNode)(2,l);break;case 2:n=(0,o.createComponentVNode)(2,s);break;case 3:n=(0,o.createComponentVNode)(2,p);break;default:n=(0,o.createComponentVNode)(2,d)}else n=(0,o.createComponentVNode)(2,u);else n=(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"bad",children:[(0,o.createComponentVNode)(2,i.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,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,i.Section,{children:n})]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.machine_id,s=c.held_card_name;return(0,o.createComponentVNode)(2,i.Section,{title:"Nanotrasen Automatic Teller Machine",children:[(0,o.createComponentVNode)(2,i.Box,{children:"For all your monetary need!"}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.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,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Card",children:(0,o.createComponentVNode)(2,i.Button,{content:s,icon:"eject",onClick:function(){return a("insert_card")}})})})]})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.security_level;return(0,o.createComponentVNode)(2,i.Section,{title:"Select a new security level for this account",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,i.Button,{content:"Zero",icon:"unlock",selected:0===c,onClick:function(){return a("change_security_level",{new_security_level:0})}})}),(0,o.createComponentVNode)(2,i.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,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,i.Button,{content:"One",icon:"unlock",selected:1===c,onClick:function(){return a("change_security_level",{new_security_level:1})}})}),(0,o.createComponentVNode)(2,i.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,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,i.Button,{content:"Two",selected:2===c,icon:"unlock",onClick:function(){return a("change_security_level",{new_security_level:2})}})}),(0,o.createComponentVNode)(2,i.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,i.Divider),(0,o.createComponentVNode)(2,m)]})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=(0,r.useLocalState)(t,"targetAccNumber",0),s=l[0],d=l[1],u=(0,r.useLocalState)(t,"fundsAmount",0),p=u[0],h=u[1],f=(0,r.useLocalState)(t,"purpose",0),C=f[0],g=f[1],N=c.money;return(0,o.createComponentVNode)(2,i.Section,{title:"Transfer Fund",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Account Balance",children:["$",N]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target account number",children:(0,o.createComponentVNode)(2,i.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Funds to transfer",children:(0,o.createComponentVNode)(2,i.Input,{onInput:function(e,t){return h(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transaction Purpose",children:(0,o.createComponentVNode)(2,i.Input,{fluid:!0,onInput:function(e,t){return g(t)}})})]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Button,{content:"Transfer",icon:"sign-out-alt",onClick:function(){return a("transfer",{target_acc_number:s,funds_amount:p,purpose:C})}}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,m)]})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=(0,r.useLocalState)(t,"fundsAmount",0),s=l[0],d=l[1],u=c.owner_name,p=c.money;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Welcome, "+u,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Logout",icon:"sign-out-alt",onClick:function(){return a("logout")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Account Balance",children:["$",p]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Withdrawal Amount",children:(0,o.createComponentVNode)(2,i.Input,{onInput:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Withdraw Fund",icon:"sign-out-alt",onClick:function(){return a("withdrawal",{funds_amount:s})}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Menu",children:[(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Change account security level",icon:"lock",onClick:function(){return a("view_screen",{view_screen:1})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Make transfer",icon:"exchange-alt",onClick:function(){return a("view_screen",{view_screen:2})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"View transaction log",icon:"list",onClick:function(){return a("view_screen",{view_screen:3})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Print balance statement",icon:"print",onClick:function(){return a("balance_statement")}})})]})],4)},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=(0,r.useLocalState)(t,"accountID",null),s=l[0],d=l[1],u=(0,r.useLocalState)(t,"accountPin",null),p=u[0],m=u[1];c.machine_id,c.held_card_name;return(0,o.createComponentVNode)(2,i.Section,{title:"Insert card or enter ID and pin to login",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Account ID",children:(0,o.createComponentVNode)(2,i.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pin",children:(0,o.createComponentVNode)(2,i.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return m(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Login",icon:"sign-in-alt",onClick:function(){return a("attempt_auth",{account_num:s,account_pin:p})}})})]})})},p=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.transaction_log);return(0,o.createComponentVNode)(2,i.Section,{title:"Transactions",children:[(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Timestamp"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Target"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Reason"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Value"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Terminal"})]}),a.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{p:"1rem",children:[e.date," ",e.time]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.target_name}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.purpose}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:["$",e.amount]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.source_terminal})]},e)}))]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,m)]})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data;return(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"sign-out-alt",onClick:function(){return a("view_screen",{view_screen:0})}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AccountsUplinkTerminal=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(51),l=n(3),s=n(100),d=n(101);t.AccountsUplinkTerminal=function(e,t){var n,r=(0,i.useBackend)(t),a=(r.act,r.data),c=a.loginState,p=a.currentPage;return c.logged_in?(1===p?n=(0,o.createComponentVNode)(2,u):2===p?n=(0,o.createComponentVNode)(2,h):3===p&&(n=(0,o.createComponentVNode)(2,f)),(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,s.LoginInfo),n]})})):(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,d.LoginScreen)})})};var u=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data.accounts,s=(0,i.useLocalState)(t,"searchText",""),d=s[0],u=(s[1],(0,i.useLocalState)(t,"sortId","owner_name")),h=u[0],f=(u[1],(0,i.useLocalState)(t,"sortOrder",!0)),C=f[0];f[1];return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,a.Flex.Item,{flexGrow:"1",mt:"0.5rem",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Table,{className:"AccountsUplinkTerminal__list",children:[(0,o.createComponentVNode)(2,a.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,p,{id:"owner_name",children:"Account Holder"}),(0,o.createComponentVNode)(2,p,{id:"account_number",children:"Account Number"}),(0,o.createComponentVNode)(2,p,{id:"suspended",children:"Account Status"})]}),l.filter((0,r.createSearch)(d,(function(e){return e.owner_name+"|"+e.account_number+"|"+e.suspended}))).sort((function(e,t){var n=C?1:-1;return e[h].localeCompare(t[h])*n})).map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{onClick:function(){return c("view_account_detail",{index:e.account_index})},children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user"})," ",e.owner_name]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:["#",e.account_number]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.suspended})]},e.id)}))]})})})]})},p=function(e,t){var n=(0,i.useLocalState)(t,"sortId","name"),r=n[0],c=n[1],l=(0,i.useLocalState)(t,"sortOrder",!0),s=l[0],d=l[1],u=e.id,p=e.children;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{color:r!==u&&"transparent",width:"100%",onClick:function(){r===u?d(!s):(c(u),d(!0))},children:[p,r===u&&(0,o.createComponentVNode)(2,a.Icon,{name:s?"sort-up":"sort-down",ml:"0.25rem;"})]})})},m=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data.is_printing,s=(0,i.useLocalState)(t,"searchText",""),d=(s[0],s[1]);return(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,c.FlexItem,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"New Account",icon:"plus",onClick:function(){return r("create_new_account")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:"Print Account List",disabled:l,ml:"0.25rem",onClick:function(){return r("print_records")}})]}),(0,o.createComponentVNode)(2,c.FlexItem,{grow:"1",ml:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search by account holder, number, status",width:"100%",onInput:function(e,t){return d(t)}})})]})},h=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.is_printing,s=c.account_number,d=c.owner_name,u=c.money,p=c.suspended,m=c.transactions;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"#"+s+" / "+d,mt:1,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:"Print Account Details",disabled:l,onClick:function(){return r("print_account_details")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("back")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Number",children:["#",s]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Holder",children:d}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Balance",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Status",color:p?"red":"green",children:[p?"Suspended":"Active",(0,o.createComponentVNode)(2,a.Button,{ml:1,content:p?"Unsuspend":"Suspend",icon:p?"unlock":"lock",onClick:function(){return r("toggle_suspension")}})]})]})}),(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"})]}),m.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{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)}))]})})],4)},f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=(n.data,(0,i.useLocalState)(t,"accName","")),l=c[0],s=c[1],d=(0,i.useLocalState)(t,"accDeposit",""),u=d[0],p=d[1];return(0,o.createComponentVNode)(2,a.Section,{title:"Create Account",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("back")}}),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Holder",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Name Here",onChange:function(e,t){return s(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Initial Deposit",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"0",onChange:function(e,t){return p(t)}})})]}),(0,o.createComponentVNode)(2,a.Button,{mt:1,fluid:!0,content:"Create Account",onClick:function(){return r("finalise_create_account",{holder_name:l,starting_funds:u})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AgentCardSLSlots=t.AgentCardAppearances=t.AgentCardInfo=t.AgentCard=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AgentCard=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),d=n[0],u=n[1];return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"syndicate",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Box,{fillPositionedParent:!0,overflow:"hidden",children:[(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===d,onClick:function(){return u(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"table"})," Card Info"]},"Card Info"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===d,onClick:function(){return u(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"id-card"})," Appearance"]},"Appearance"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===d,onClick:function(){return u(2)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"arrow-down"})," Save/Load Card Info"]},"Save/Load Card Info")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,c);case 1:return(0,o.createComponentVNode)(2,l);case 2:return(0,o.createComponentVNode)(2,s);default:return(0,o.createComponentVNode)(2,c)}}(d)]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.registered_name,s=c.sex,d=c.age,u=c.assignment,p=c.associated_account_number,m=c.blood_type,h=c.dna_hash,f=c.fingerprint_hash,C=c.photo,g=c.ai_tracking;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Card Info",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,i.Button,{content:l||"[UNSET]",onClick:function(){return a("change_name")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Sex",children:(0,o.createComponentVNode)(2,i.Button,{iconRight:!1,content:s||"[UNSET]",onClick:function(){return a("change_sex")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Age",children:(0,o.createComponentVNode)(2,i.Button,{content:d||"[UNSET]",onClick:function(){return a("change_age")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Rank",children:(0,o.createComponentVNode)(2,i.Button,{content:u||"[UNSET]",onClick:function(){return a("change_occupation")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fingerprints",children:(0,o.createComponentVNode)(2,i.Button,{content:f||"[UNSET]",onClick:function(){return a("change_fingerprints")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood Type",children:(0,o.createComponentVNode)(2,i.Button,{content:m||"[UNSET]",onClick:function(){return a("change_blood_type")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"DNA Hash",children:(0,o.createComponentVNode)(2,i.Button,{content:h||"[UNSET]",onClick:function(){return a("change_dna_hash")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Money Account",children:(0,o.createComponentVNode)(2,i.Button,{content:p||"[UNSET]",onClick:function(){return a("change_money_account")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Photo",children:(0,o.createComponentVNode)(2,i.Button,{content:C?"Update":"[UNSET]",onClick:function(){return a("change_photo")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Card Settings",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Card Info",children:(0,o.createComponentVNode)(2,i.Button,{content:"Delete Card Info",onClick:function(){return a("delete_info")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Access",children:(0,o.createComponentVNode)(2,i.Button,{content:"Reset Access",onClick:function(){return a("clear_access")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"AI Tracking",children:(0,o.createComponentVNode)(2,i.Button,{content:g?"Untrackable":"Trackable",onClick:function(){return a("change_ai_tracking")}})})]})})],4)};t.AgentCardInfo=c;var l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.appearances;return(0,o.createComponentVNode)(2,i.Section,{title:"Card Appearance",children:c.map((function(e){return(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jped;base64,"+e.image,style:{"vertical-align":"middle",width:"64px",margin:"0px","margin-left":"0px"},onclick:function(){return a("change_appearance_new",{new_appearance:e.name})}},e.name)}))})};t.AgentCardAppearances=l;var s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.saved_info;return(0,o.createComponentVNode)(2,i.Section,{title:"Save/Load Manager",style:{"line-height":"25px"},children:(0,o.createComponentVNode)(2,i.LabeledList,{children:c.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.registered_name?e.registered_name+", "+e.assignment:"Slot "+e.id,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Clear",onClick:function(){return a("clear_slot",{slot:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Save",onClick:function(){return a("save_slot",{slot:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Load",disabled:!e.registered_name,onClick:function(){return a("load_slot",{slot:e.id})}})],4)},e.id)}))})})};t.AgentCardSLSlots=s},function(e,t,n){"use strict";t.__esModule=!0,t.AiAirlock=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c={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,s=n.data,d=c[s.power.main]||c[0],u=c[s.power.backup]||c[0],p=c[s.shock]||c[0];return(0,o.createComponentVNode)(2,a.Window,{width:500,height:390,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Main",color:d.color,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"lightbulb-o",disabled:!s.power.main,content:"Disrupt",onClick:function(){return l("disrupt-main")}}),children:[s.power.main?"Online":"Offline"," ",s.wires.main_power?s.power.main_timeleft>0&&"["+s.power.main_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Backup",color:u.color,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"lightbulb-o",disabled:!s.power.backup,content:"Disrupt",onClick:function(){return l("disrupt-backup")}}),children:[s.power.backup?"Online":"Offline"," ",s.wires.backup_power?s.power.backup_timeleft>0&&"["+s.power.backup_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Electrify",color:p.color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"wrench",disabled:!(s.wires.shock&&2!==s.shock),content:"Restore",onClick:function(){return l("shock-restore")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"bolt",disabled:!s.wires.shock,content:"Temporary",onClick:function(){return l("shock-temp")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"bolt",disabled:!s.wires.shock||0===s.shock,content:"Permanent",onClick:function(){return l("shock-perm")}})],4),children:[2===s.shock?"Safe":"Electrified"," ",(s.wires.shock?s.shock_timeleft>0&&"["+s.shock_timeleft+"s]":"[Wires have been cut!]")||-1===s.shock_timeleft&&"[Permanent]"]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Access and Door Control",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID Scan",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.id_scanner?"power-off":"times",content:s.id_scanner?"Enabled":"Disabled",selected:s.id_scanner,disabled:!s.wires.id_scanner,onClick:function(){return l("idscan-toggle")}}),children:!s.wires.id_scanner&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Emergency Access",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.emergency?"power-off":"times",content:s.emergency?"Enabled":"Disabled",selected:s.emergency,onClick:function(){return l("emergency-toggle")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Bolts",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.locked?"lock":"unlock",content:s.locked?"Lowered":"Raised",selected:s.locked,disabled:!s.wires.bolts,onClick:function(){return l("bolt-toggle")}}),children:!s.wires.bolts&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Bolt Lights",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.lights?"power-off":"times",content:s.lights?"Enabled":"Disabled",selected:s.lights,disabled:!s.wires.lights,onClick:function(){return l("light-toggle")}}),children:!s.wires.lights&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Force Sensors",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.safe?"power-off":"times",content:s.safe?"Enabled":"Disabled",selected:s.safe,disabled:!s.wires.safe,onClick:function(){return l("safe-toggle")}}),children:!s.wires.safe&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Timing Safety",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.speed?"power-off":"times",content:s.speed?"Enabled":"Disabled",selected:s.speed,disabled:!s.wires.timing,onClick:function(){return l("speed-toggle")}}),children:!s.wires.timing&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Control",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.opened?"sign-out-alt":"sign-in-alt",content:s.opened?"Open":"Closed",selected:s.opened,disabled:s.locked||s.welded,onClick:function(){return l("open-close")}}),children:!(!s.locked&&!s.welded)&&(0,o.createVNode)(1,"span",null,[(0,o.createTextVNode)("[Door is "),s.locked?"bolted":"",s.locked&&s.welded?" and ":"",s.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),i=n(2),a=n(3),c=n(192);t.AirAlarm=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data.locked);return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,c.InterfaceLockNoticeBox),!i&&(0,o.createFragment)([(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,u)],4)]})})};var l=function(e){return 0===e?"green":1===e?"orange":"red"},s=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,s=a.data,d=s.air,u=s.mode,p=s.atmos_alarm,m=s.locked,h=s.alarmActivated,f=s.rcon,C=s.target_temp;return n=0===d.danger.overall?0===p?"Optimal":"Caution: Atmos alert in area":1===d.danger.overall?"Caution":"DANGER: Internals Required",(0,o.createComponentVNode)(2,i.Section,{title:"Air Status",children:d?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,i.Box,{color:l(d.danger.pressure),children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:d.pressure})," kPa",!m&&(0,o.createFragment)([(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,i.Button,{content:3===u?"Deactivate Panic Siphon":"Activate Panic Siphon",selected:3===u,icon:"exclamation-triangle",onClick:function(){return c("mode",{mode:3===u?1:3})}})],4)]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.oxygen/100,fractionDigits:"1",color:l(d.danger.oxygen)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nitrogen",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.nitrogen/100,fractionDigits:"1",color:l(d.danger.nitrogen)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Carbon Dioxide",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.co2/100,fractionDigits:"1",color:l(d.danger.co2)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Toxins",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.plasma/100,fractionDigits:"1",color:l(d.danger.plasma)})}),d.contents.other>.1&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Other",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.other/100,fractionDigits:"1",color:l(d.danger.other)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,i.Box,{color:l(d.danger.temperature),children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:d.temperature})," K / ",(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:d.temperature_c})," C\xa0",(0,o.createComponentVNode)(2,i.Button,{icon:"thermometer-full",content:C+" C",onClick:function(){return c("temperature")}}),(0,o.createComponentVNode)(2,i.Button,{content:d.thermostat_state?"On":"Off",selected:d.thermostat_state,icon:"power-off",onClick:function(){return c("thermostat_state")}})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Local Status",children:(0,o.createComponentVNode)(2,i.Box,{color:l(d.danger.overall),children:[n,!m&&(0,o.createFragment)([(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,i.Button,{content:h?"Reset Alarm":"Activate Alarm",selected:h,onClick:function(){return c(h?"atmos_reset":"atmos_alarm")}})],4)]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Remote Control Settings",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Off",selected:1===f,onClick:function(){return c("set_rcon",{rcon:1})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Auto",selected:2===f,onClick:function(){return c("set_rcon",{rcon:2})}}),(0,o.createComponentVNode)(2,i.Button,{content:"On",selected:3===f,onClick:function(){return c("set_rcon",{rcon:3})}})]})]}):(0,o.createComponentVNode)(2,i.Box,{children:"Unable to acquire air sample!"})})},d=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),a=n[0],c=n[1];return(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===a,onClick:function(){return c(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"sign-out-alt"})," Vent Control"]},"Vents"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===a,onClick:function(){return c(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"sign-in-alt"})," Scrubber Control"]},"Scrubbers"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===a,onClick:function(){return c(2)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"cog"})," Mode"]},"Mode"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:3===a,onClick:function(){return c(3)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"tachometer-alt"})," Thresholds"]},"Thresholds")]})},u=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),i=n[0];n[1];switch(i){case 0:return(0,o.createComponentVNode)(2,p);case 1:return(0,o.createComponentVNode)(2,m);case 2:return(0,o.createComponentVNode)(2,h);case 3:return(0,o.createComponentVNode)(2,f);default:return"WE SHOULDN'T BE HERE!"}},p=function(e,t){var n=(0,r.useBackend)(t),a=n.act;return n.data.vents.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,i.Button,{content:e.power?"On":"Off",selected:e.power,icon:"power-off",onClick:function(){return a("command",{cmd:"power",val:1===e.power?0:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"release"===e.direction?"Blowing":"Siphoning",icon:"release"===e.direction?"sign-out-alt":"sign-in-alt",onClick:function(){return a("command",{cmd:"direction",val:"release"===e.direction?0:1,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure Checks",children:[(0,o.createComponentVNode)(2,i.Button,{content:"External",selected:1===e.checks,onClick:function(){return a("command",{cmd:"checks",val:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Internal",selected:2===e.checks,onClick:function(){return a("command",{cmd:"checks",val:2,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"External Pressure Target",children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:e.external})," kPa\xa0",(0,o.createComponentVNode)(2,i.Button,{content:"Set",icon:"cog",onClick:function(){return a("command",{cmd:"set_external_pressure",id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Reset",icon:"redo-alt",onClick:function(){return a("command",{cmd:"set_external_pressure",val:101.325,id_tag:e.id_tag})}})]})]})},e.name)}))},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act;return n.data.scrubbers.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,i.Button,{content:e.power?"On":"Off",selected:e.power,icon:"power-off",onClick:function(){return a("command",{cmd:"power",val:1===e.power?0:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:0===e.scrubbing?"Siphoning":"Scrubbing",icon:0===e.scrubbing?"sign-in-alt":"filter",onClick:function(){return a("command",{cmd:"scrubbing",val:0===e.scrubbing?1:0,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,i.Button,{content:e.widenet?"Extended":"Normal",selected:e.widenet,icon:"expand-arrows-alt",onClick:function(){return a("command",{cmd:"widenet",val:0===e.widenet?1:0,id_tag:e.id_tag})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Filtering",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Carbon Dioxide",selected:e.filter_co2,onClick:function(){return a("command",{cmd:"co2_scrub",val:0===e.filter_co2?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Plasma",selected:e.filter_toxins,onClick:function(){return a("command",{cmd:"tox_scrub",val:0===e.filter_toxins?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Nitrous Oxide",selected:e.filter_n2o,onClick:function(){return a("command",{cmd:"n2o_scrub",val:0===e.filter_n2o?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Oxygen",selected:e.filter_o2,onClick:function(){return a("command",{cmd:"o2_scrub",val:0===e.filter_o2?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Nitrogen",selected:e.filter_n2,onClick:function(){return a("command",{cmd:"n2_scrub",val:0===e.filter_n2?1:0,id_tag:e.id_tag})}})]})]})},e.name)}))},h=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.modes,s=c.presets,d=c.emagged,u=c.mode,p=c.preset;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"System Mode",children:(0,o.createComponentVNode)(2,i.Table,{children:l.map((function(e){return(!e.emagonly||e.emagonly&&!!d)&&(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"right",width:1,children:(0,o.createComponentVNode)(2,i.Button,{content:e.name,icon:"cog",selected:e.id===u,onClick:function(){return a("mode",{mode:e.id})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.desc})]},e.name)}))})}),(0,o.createComponentVNode)(2,i.Section,{title:"System Presets",children:[(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"After making a selection, the system will automatically cycle in order to remove contaminants."}),(0,o.createComponentVNode)(2,i.Table,{mt:1,children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"right",width:1,children:(0,o.createComponentVNode)(2,i.Button,{content:e.name,icon:"cog",selected:e.id===p,onClick:function(){return a("preset",{preset:e.id})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.desc})]},e.name)}))})]})],4)},f=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.thresholds;return(0,o.createComponentVNode)(2,i.Section,{title:"Alarm Thresholds",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{width:"20%",children:"Value"}),(0,o.createComponentVNode)(2,i.Table.Cell,{color:"red",width:"20%",children:"Danger Min"}),(0,o.createComponentVNode)(2,i.Table.Cell,{color:"orange",width:"20%",children:"Warning Min"}),(0,o.createComponentVNode)(2,i.Table.Cell,{color:"orange",width:"20%",children:"Warning Max"}),(0,o.createComponentVNode)(2,i.Table.Cell,{color:"red",width:"20%",children:"Danger Max"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),e.settings.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:-1===e.selected?"Off":e.selected,onClick:function(){return a("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),i=n(2),a=n(3);t.AirlockAccessController=function(e,t){var n,c,l=(0,r.useBackend)(t),s=l.act,d=l.data,u=d.exterior_status,p=d.interior_status,m=d.processing;return n="open"===d.exterior_status.state?(0,o.createComponentVNode)(2,i.Button,{content:"Lock Exterior Door",icon:"exclamation-triangle",disabled:m,onClick:function(){return s("force_ext")}}):(0,o.createComponentVNode)(2,i.Button,{content:"Cycle to Exterior",icon:"arrow-circle-left",disabled:m,onClick:function(){return s("cycle_ext_door")}}),c="open"===d.interior_status.state?(0,o.createComponentVNode)(2,i.Button,{content:"Lock Interior Door",icon:"exclamation-triangle",disabled:m,color:"open"===p?"red":m?"yellow":null,onClick:function(){return s("force_int")}}):(0,o.createComponentVNode)(2,i.Button,{content:"Cycle to Interior",icon:"arrow-circle-right",disabled:m,onClick:function(){return s("cycle_int_door")}}),(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Information",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"External Door Status",children:"closed"===u.state?"Locked":"Open"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Internal Door Status",children:"closed"===p.state?"Locked":"Open"})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,i.Box,{children:n}),(0,o.createComponentVNode)(2,i.Box,{children:c})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirlockElectronics=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(102);t.AirlockElectronics=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,s)]})};var l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.unrestricted_dir;return(0,o.createComponentVNode)(2,i.Section,{title:"Access Control",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{bold:!0,mb:1,children:"Unrestricted Access From:"}),(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"arrow-down",content:"North",selected:"north"===c?"selected":null,onClick:function(){return a("unrestricted_access",{unres_dir:"North"})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"arrow-up",content:"South",selected:"south"===c?"selected":null,onClick:function(){return a("unrestricted_access",{unres_dir:"South"})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"arrow-left",content:"East",selected:"east"===c?"selected":null,onClick:function(){return a("unrestricted_access",{unres_dir:"East"})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"arrow-right",content:"West",selected:"west"===c?"selected":null,onClick:function(){return a("unrestricted_access",{unres_dir:"West"})}})})]})]})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data,s=l.selected_accesses,d=l.one_access,u=l.regions;return(0,o.createComponentVNode)(2,c.AccessList,{usedByRcd:1,rcdButtons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:d,content:"One",onClick:function(){return a("set_one_access",{access:"one"})}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:!d,content:"All",onClick:function(){return a("set_one_access",{access:"all"})}})],4),accesses:u,selectedList:s,accessMod:function(e){return a("set",{access:e})},grantAll:function(){return a("grant_all")},denyAll:function(){return a("clear_all")},grantDep:function(e){return a("grant_region",{region:e})},denyDep:function(e){return a("deny_region",{region:e})}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AppearanceChanger=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AppearanceChanger=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.change_race,u=s.species,p=s.specimen,m=s.change_gender,h=s.gender,f=s.has_gender,C=s.change_eye_color,g=s.change_skin_tone,N=s.change_skin_color,b=s.change_head_accessory_color,V=s.change_hair_color,v=s.change_secondary_hair_color,x=s.change_facial_hair_color,y=s.change_secondary_facial_hair_color,k=s.change_head_marking_color,w=s.change_body_marking_color,_=s.change_tail_marking_color,B=s.change_head_accessory,S=s.head_accessory_styles,L=s.head_accessory_style,A=s.change_hair,I=s.hair_styles,E=s.hair_style,D=s.change_hair_gradient,T=s.change_facial_hair,F=s.facial_hair_styles,M=s.facial_hair_style,P=s.change_head_markings,O=s.head_marking_styles,R=s.head_marking_style,j=s.change_body_markings,U=s.body_marking_styles,z=s.body_marking_style,W=s.change_tail_markings,H=s.tail_marking_styles,K=s.tail_marking_style,q=s.change_body_accessory,Y=s.body_accessory_styles,G=s.body_accessory_style,X=s.change_alt_head,J=s.alt_head_styles,$=s.alt_head_style,Z=!1;return(C||g||N||b||V||v||x||y||k||w||_)&&(Z=!0),(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!d&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Species",children:u.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.specimen,selected:e.specimen===p,onClick:function(){return l("race",{race:e.specimen})}},e.specimen)}))}),!!m&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Gender",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Male",selected:"male"===h,onClick:function(){return l("gender",{gender:"male"})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Female",selected:"female"===h,onClick:function(){return l("gender",{gender:"female"})}}),!f&&(0,o.createComponentVNode)(2,i.Button,{content:"Genderless",selected:"plural"===h,onClick:function(){return l("gender",{gender:"plural"})}})]}),!!Z&&(0,o.createComponentVNode)(2,c),!!B&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Head accessory",children:S.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.headaccessorystyle,selected:e.headaccessorystyle===L,onClick:function(){return l("head_accessory",{head_accessory:e.headaccessorystyle})}},e.headaccessorystyle)}))}),!!A&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hair",children:I.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.hairstyle,selected:e.hairstyle===E,onClick:function(){return l("hair",{hair:e.hairstyle})}},e.hairstyle)}))}),!!D&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hair Gradient",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Change Style",onClick:function(){return l("hair_gradient")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Change Offset",onClick:function(){return l("hair_gradient_offset")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Change Color",onClick:function(){return l("hair_gradient_colour")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Change Alpha",onClick:function(){return l("hair_gradient_alpha")}})]}),!!T&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Facial hair",children:F.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.facialhairstyle,selected:e.facialhairstyle===M,onClick:function(){return l("facial_hair",{facial_hair:e.facialhairstyle})}},e.facialhairstyle)}))}),!!P&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Head markings",children:O.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.headmarkingstyle,selected:e.headmarkingstyle===R,onClick:function(){return l("head_marking",{head_marking:e.headmarkingstyle})}},e.headmarkingstyle)}))}),!!j&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Body markings",children:U.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.bodymarkingstyle,selected:e.bodymarkingstyle===z,onClick:function(){return l("body_marking",{body_marking:e.bodymarkingstyle})}},e.bodymarkingstyle)}))}),!!W&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tail markings",children:H.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.tailmarkingstyle,selected:e.tailmarkingstyle===K,onClick:function(){return l("tail_marking",{tail_marking:e.tailmarkingstyle})}},e.tailmarkingstyle)}))}),!!q&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Body accessory",children:Y.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.bodyaccessorystyle,selected:e.bodyaccessorystyle===G,onClick:function(){return l("body_accessory",{body_accessory:e.bodyaccessorystyle})}},e.bodyaccessorystyle)}))}),!!X&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alternate head",children:J.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.altheadstyle,selected:e.altheadstyle===$,onClick:function(){return l("alt_head",{alt_head:e.altheadstyle})}},e.altheadstyle)}))})]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data;return(0,o.createComponentVNode)(2,i.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!!c[e.key]&&(0,o.createComponentVNode)(2,i.Button,{content:e.text,onClick:function(){return a(e.action)}},e.key)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosAlertConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AtmosAlertConsole=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.priority||[],d=l.minor||[];return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Alarms",children:(0,o.createVNode)(1,"ul",null,[0===s.length&&(0,o.createVNode)(1,"li","color-good","No Priority Alerts",16),s.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:e,color:"bad",onClick:function(){return c("clear",{zone:e})}}),2,null,e)})),0===d.length&&(0,o.createVNode)(1,"li","color-good","No Minor Alerts",16),d.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:e,color:"average",onClick:function(){return c("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),i=n(2),a=n(80),c=n(3);t.AtmosControl=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data,(0,r.useLocalState)(t,"tabIndex",0)),d=a[0],u=a[1];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.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===d,onClick:function(){return u(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===d,onClick:function(){return u(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,l);case 1:return(0,o.createComponentVNode)(2,s);default:return"WE SHOULDN'T BE HERE!"}}(d)]})})})};var l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.alarms;return(0,o.createComponentVNode)(2,i.Box,{children:(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:"Access"})]}),l.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,a.TableCell,{children:e.name}),(0,o.createComponentVNode)(2,a.TableCell,{children:(t=e.danger,0===t?(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Good"}):1===t?(0,o.createComponentVNode)(2,i.Box,{color:"orange",bold:!0,children:"Warning"}):2===t?(0,o.createComponentVNode)(2,i.Box,{color:"red",bold:!0,children:"DANGER"}):void 0)}),(0,o.createComponentVNode)(2,a.TableCell,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"cog",content:"Access",onClick:function(){return c("open_alarm",{aref:e.ref})}})})]},e.name);var t}))]})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=(0,r.useLocalState)(t,"zoom",1),s=l[0],d=l[1],u=c.alarms,p=c.stationLevel;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 d(e)},children:u.filter((function(e){return e.z===p})).map((function(e){return(0,o.createComponentVNode)(2,i.NanoMap.Marker,{x:e.x,y:e.y,zoom:s,icon:"circle",tooltip:e.name,color:(t=e.danger,0===t?"green":1===t?"orange":2===t?"red":void 0),onClick:function(){return a("open_alarm",{aref:e.ref})}},e.ref);var t}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosFilter=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AtmosFilter=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.on,d=l.pressure,u=l.max_pressure,p=l.filter_type,m=l.filter_type_list;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:s?"On":"Off",color:s?null:"red",selected:s,onClick:function(){return c("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",textAlign:"center",disabled:0===d,width:2.2,onClick:function(){return c("min_pressure")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,unit:"kPa",width:6.1,lineHeight:1.5,step:10,minValue:0,maxValue:u,value:d,onDrag:function(e,t){return c("custom_pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",textAlign:"center",disabled:d===u,width:2.2,onClick:function(){return c("max_pressure")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Filter",children:m.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{selected:e.gas_type===p,content:e.label,onClick:function(){return c("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),i=n(2),a=n(3);t.AtmosMixer=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.on,u=s.pressure,p=s.max_pressure,m=s.node1_concentration,h=s.node2_concentration;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:d?"On":"Off",color:d?null:"red",selected:d,onClick:function(){return l("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",textAlign:"center",disabled:0===u,width:2.2,onClick:function(){return l("min_pressure")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,unit:"kPa",width:6.1,lineHeight:1.5,step:10,minValue:0,maxValue:p,value:u,onDrag:function(e,t){return l("custom_pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",textAlign:"center",disabled:u===p,width:2.2,onClick:function(){return l("max_pressure")}})]}),(0,o.createComponentVNode)(2,c,{node_name:"Node 1",node_ref:m}),(0,o.createComponentVNode)(2,c,{node_name:"Node 2",node_ref:h})]})})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=(n.data,e.node_name),l=e.node_ref;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:c,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",textAlign:"center",width:2.2,disabled:0===l,onClick:function(){return a("set_node",{node_name:c,concentration:(l-10)/100})}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,unit:"%",width:6.1,lineHeight:1.5,stepPixelSize:10,minValue:0,maxValue:100,value:l,onChange:function(e,t){return a("set_node",{node_name:c,concentration:t/100})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",textAlign:"center",width:2.2,disabled:100===l,onClick:function(){return a("set_node",{node_name:c,concentration:(l+10)/100})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosPump=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AtmosPump=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.on,d=l.rate,u=l.max_rate,p=l.gas_unit,m=l.step;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:s?"On":"Off",color:s?null:"red",selected:s,onClick:function(){return c("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",textAlign:"center",disabled:0===d,width:2.2,onClick:function(){return c("min_rate")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,unit:p,width:6.1,lineHeight:1.5,step:m,minValue:0,maxValue:u,value:d,onDrag:function(e,t){return c("custom_rate",{rate:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",textAlign:"center",disabled:d===u,width:2.2,onClick:function(){return c("max_rate")}})]})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Autolathe=void 0;var o=n(0),r=n(43),i=n(24),a=n(1),c=n(2),l=n(3),s=n(18),d=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,a.useBackend)(t),u=n.act,p=n.data,m=p.total_amount,h=(p.max_amount,p.metal_amount),f=p.glass_amount,C=p.busyname,g=(p.busyamt,p.showhacked,p.buildQueue),N=p.buildQueueLen,b=p.recipes,V=p.categories,v=(0,a.useSharedState)(t,"category",0),x=v[0],y=v[1];0===x&&(x="Tools");var k=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),w=f.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),_=m.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),B=(0,a.useSharedState)(t,"search_text",""),S=B[0],L=B[1],A=(0,s.createSearch)(S,(function(e){return e.name})),I="";N>0&&(I=g.map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,c.Button,{icon:"times",content:g[t][0],onClick:function(){return u("remove_from_queue",{remove_from_queue:g.indexOf(e)+1})}},e)},t)})));var E=(0,r.flow)([(0,i.filter)((function(e){return(e.category.indexOf(x)>-1||S)&&(p.showhacked||!e.hacked)})),S&&(0,i.filter)(A),(0,i.sortBy)((function(e){return e.name.toLowerCase()}))])(b),D="Build";S?D="Results for: '"+S+"':":x&&(D="Build ("+x+")");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,c.Section,{title:D,buttons:(0,o.createComponentVNode)(2,c.Dropdown,{width:"190px",options:V,selected:x,onSelected:function(e){return y(e)}}),children:[(0,o.createComponentVNode)(2,c.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return L(t)},mb:1}),E.map((function(e){return(0,o.createComponentVNode)(2,c.Flex,{justify:"space-between",align:"center",children:[(0,o.createComponentVNode)(2,c.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,c.Button,{icon:"hammer",selected:p.busyname===e.name&&1===p.busyamt,disabled:!d(e,p.metal_amount,p.glass_amount,1),onClick:function(){return u("make",{make:e.uid,multiplier:1})},children:(0,s.toTitleCase)(e.name)}),e.max_multiplier>=10&&(0,o.createComponentVNode)(2,c.Button,{icon:"hammer",selected:p.busyname===e.name&&10===p.busyamt,disabled:!d(e,p.metal_amount,p.glass_amount,10),onClick:function(){return u("make",{make:e.uid,multiplier:10})},children:"10x"}),e.max_multiplier>=25&&(0,o.createComponentVNode)(2,c.Button,{icon:"hammer",selected:p.busyname===e.name&&25===p.busyamt,disabled:!d(e,p.metal_amount,p.glass_amount,25),onClick:function(){return u("make",{make:e.uid,multiplier:25})},children:"25x"}),e.max_multiplier>25&&(0,o.createComponentVNode)(2,c.Button,{icon:"hammer",selected:p.busyname===e.name&&p.busyamt===e.max_multiplier,disabled:!d(e,p.metal_amount,p.glass_amount,e.max_multiplier),onClick:function(){return u("make",{make:e.uid,multiplier:e.max_multiplier})},children:[e.max_multiplier,"x"]})]}),(0,o.createComponentVNode)(2,c.Flex.Item,{children:e.requirements&&Object.keys(e.requirements).map((function(t){return(0,s.toTitleCase)(t)+": "+e.requirements[t]})).join(", ")||(0,o.createComponentVNode)(2,c.Box,{children:"No resources required."})})]},e.ref)}))]}),2,{style:{float:"left",width:"68%"}}),(0,o.createVNode)(1,"div",null,[(0,o.createComponentVNode)(2,c.Section,{title:"Materials",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Metal",children:k}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Glass",children:w}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Total",children:_}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Storage",children:[p.fill_percent,"% Full"]})]})}),(0,o.createComponentVNode)(2,c.Section,{title:"Building",children:(0,o.createComponentVNode)(2,c.Box,{color:C?"green":"",children:C||"Nothing"})}),(0,o.createComponentVNode)(2,c.Section,{title:"Build Queue",children:[I,(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,c.Button,{icon:"times",content:"Clear All",disabled:!p.buildQueueLen,onClick:function(){return u("clear_queue")}}),2,{align:"right"})]})],4,{style:{float:"right",width:"30%"}})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Biogenerator=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.Biogenerator=function(){return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{display:"flex",className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,d)]})})};var c=function(e,t){if((0,r.useBackend)(t).data.processing)return(0,o.createComponentVNode)(2,i.Dimmer,{children:(0,o.createComponentVNode)(2,i.Flex,{mb:"30px",children:(0,o.createComponentVNode)(2,i.Flex.Item,{bold:!0,color:"silver",textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"spinner",spin:!0,size:4,mb:"15px"}),(0,o.createVNode)(1,"br"),"The biogenerator is processing..."]})})})},l=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data),c=a.biomass,l=a.container,s=a.container_curr_reagents,d=a.container_max_reagents;return(0,o.createComponentVNode)(2,i.Section,{title:"Storage",children:[(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mr:"20px",color:"silver",children:"Biomass:"}),(0,o.createComponentVNode)(2,i.Flex.Item,{mr:"5px",children:c}),(0,o.createComponentVNode)(2,i.Icon,{name:"leaf",size:1.2,color:"#3d8c40"})]}),(0,o.createComponentVNode)(2,i.Flex,{height:"21px",mt:"8px",align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mr:"10px",color:"silver",children:"Container:"}),l?(0,o.createComponentVNode)(2,i.ProgressBar,{value:s,maxValue:d,children:(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",children:s+" / "+d+" units"})}):(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"None"})})]})]})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.has_plants,s=c.container;return(0,o.createComponentVNode)(2,i.Section,{title:"Controls",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"30%",mr:"3px",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"power-off",disabled:!l,tooltip:l?"":"There are no plants in the biogenerator.",tooltipPosition:"top-right",content:"Activate",onClick:function(){return a("activate")}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"40%",mr:"3px",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"flask",disabled:!s,tooltip:s?"":"The biogenerator does not have a container.",tooltipPosition:"top",content:"Detach Container",onClick:function(){return a("detach_container")}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"30%",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"eject",disabled:!l,tooltip:l?"":"There are no stored plants to eject.",tooltipPosition:"top-left",content:"Eject Plants",onClick:function(){return a("eject_plants")}})})]})})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.biomass,s=c.product_list,d=c.container,u=(0,r.useSharedState)(t,"vendAmount",1),p=u[0],m=u[1],h=Object.entries(s).map((function(e,t){var n=Object.entries(e[1]).map((function(e){return e[1]}));return(0,o.createComponentVNode)(2,i.Collapsible,{title:e[0],open:!0,children:n.map((function(e){return(0,o.createComponentVNode)(2,i.Flex,{py:"2px",className:"candystripe",align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"40%",ml:"2px",children:e.name}),(0,o.createComponentVNode)(2,i.Flex.Item,{textAlign:"right",width:"20%",children:[e.cost*p,(0,o.createComponentVNode)(2,i.Icon,{ml:"5px",name:"leaf",size:1.2,color:"#3d8c40"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{textAlign:"right",width:"40%",children:e.needs_container&&!d?(0,o.createComponentVNode)(2,i.Button,{content:"No container",disabled:!0,icon:"flask",tooltip:"\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043e\u043f\u0446\u0438\u0438",tooltipPosition:"top-left"}):(0,o.createComponentVNode)(2,i.Button,{content:"Vend",disabled:l0?Math.floor(c/u):0,f=d?"@?%%!\u2116@"+u:u,C=c>=u,g=p-p%5+(p%5>0?5:0);return(0,o.createComponentVNode)(2,i.Section,{title:"\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0420\u0430\u0437\u043b\u043e\u043c\u0430",children:[(0,o.createComponentVNode)(2,i.Box,{color:"silver",bold:!0,children:n}),(0,o.createComponentVNode)(2,i.ProgressBar,{color:0===m?"bad":m<100?"average":"good",value:a,maxValue:r,mt:1,mb:2,children:[m<=100?m:100," %"]}),(0,o.createComponentVNode)(2,i.Box,{children:["\u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u043e\u043d\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: ",(0,o.createComponentVNode)(2,i.Box,{color:c?C?"good":"average":"bad",as:"span",children:Math.floor(c)}),(0,o.createComponentVNode)(2,i.Button,{icon:"atom",tooltip:"\u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043e\u043d\u0434\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c "+f+" \u0434\u0430\u043d\u043d\u044b\u0445.",content:p>0?"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 "+g+" \u0441\u0435\u043a\u0443\u043d\u0434":"\u0417\u043e\u043d\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c ("+h+")",disabled:!C||p>0,onClick:function(){return l("probe",{rift_id:t})},mx:2}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",content:s?"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439",disabled:s||m<100,onClick:function(){return l("reward",{rift_id:t})},mt:1.4})]})]})}(e)})),(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u043a\u0430\u043d\u0435\u0440\u044b \u0432 \u0441\u0435\u0442\u0438",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:f&&f.map((function(e){return function(e){var t=e.scannerId,n=e.scannerName,r=e.scanStatus,a=e.canSwitch,s=e.switching,d=c[r],u="OFF"===d?[" ","silver"]:"NO_RIFTS"===d?["\u041d\u0435\u0442 \u0440\u0430\u0437\u043b\u043e\u043c\u043e\u0432","silver"]:"SOME_RIFTS"===d?["\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442","good"]:"DANGER"===d?["\u041e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c! \u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0441\u043a\u0430\u043d\u0435\u0440!","bad"]:void 0;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:n,py:0,children:[s?(0,o.createComponentVNode)(2,i.Icon,{name:"circle-notch",color:"silver",spin:!0,ml:1.85,mr:1.79,my:.84}):a?(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",color:"OFF"===d?"bad":"good",onClick:function(){return l("toggle_scanner",{scanner_id:t})},ml:1,mr:1}):(0,o.createComponentVNode)(2,i.Icon,{name:"power-off",color:"OFF"===d?"bad":"good",ml:1.85,mr:1.79,my:.84}),"OFF"!==d&&(0,o.createComponentVNode)(2,i.Box,{as:"span",color:u[1],children:u[0]})]})}(e)}))})}),(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u0435\u0440\u0432\u0435\u0440\u044b \u0432 \u0441\u0435\u0442\u0438",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:h&&h.map((function(e){return function(e){var t=e.servName,n=e.servData;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:t,children:n.length?n.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{children:[e.riftName," \u2014 ",Math.floor(e.probePoints)," \u0434\u0430\u043d\u043d\u044b\u0445."]},t)})):(0,o.createComponentVNode)(2,i.Box,{children:"\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445"})})}(e)}))})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BluespaceTap=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(103);t.BluespaceTap=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.product||[],u=s.desiredLevel,p=s.inputLevel,m=s.points,h=s.totalPoints,f=s.powerUse,C=s.availablePower,g=s.maxLevel,N=s.emagged,b=s.safeLevels,V=s.nextLevelPower,v=u>p?"bad":"good";return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!!N&&(0,o.createComponentVNode)(2,i.NoticeBox,{danger:1,children:"Safety Protocols disabled"}),!!(p>b)&&(0,o.createComponentVNode)(2,i.NoticeBox,{danger:1,children:"High Power, Instability likely"}),(0,o.createComponentVNode)(2,i.Collapsible,{title:"Input Management",children:(0,o.createComponentVNode)(2,i.Section,{title:"Input",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Input Level",children:p}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Desired Level",children:(0,o.createComponentVNode)(2,i.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:0===u,tooltip:"Set to 0",onClick:function(){return l("set",{set_level:0})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"step-backward",tooltip:"Decrease to actual input level",disabled:0===u,onClick:function(){return l("set",{set_level:p})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"backward",disabled:0===u,tooltip:"Decrease one step",onClick:function(){return l("decrease")}})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,i.Slider,{value:u,fillValue:p,minValue:0,color:v,maxValue:g,stepPixelSize:20,step:1,onChange:function(e,t){return l("set",{set_level:t})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"forward",disabled:u===g,tooltip:"Increase one step",tooltipPosition:"left",onClick:function(){return l("increase")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:u===g,tooltip:"Set to max",tooltipPosition:"left",onClick:function(){return l("set",{set_level:g})}})]})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Power Use",children:(0,c.formatPower)(f)}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power for next level",children:(0,c.formatPower)(V)}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Surplus Power",children:(0,c.formatPower)(C)})]})})}),(0,o.createComponentVNode)(2,i.Section,{title:"Output",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available Points",children:m}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Points",children:h})]})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{align:"end",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:d.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:(0,o.createComponentVNode)(2,i.Button,{disabled:e.price>=m,onClick:function(){return l("vend",{target:e.key})},content:e.price})},e.key)}))})})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BodyScanner=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],s=[["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."]],d=[["Respiratory","oxyLoss"],["Brain","brainLoss"],["Toxin","toxLoss"],["Radioactive","radLoss"],["Brute","bruteLoss"],["Genetic","cloneLoss"],["Burn","fireLoss"],["Paralysis","paralysis"]],u={average:[.25,.5],bad:[.5,Infinity]},p=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,a.Box,{children:t},t)],0)}),null):null},h=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,i.useBackend)(t).data,r=n.occupied,a=n.occupant,l=void 0===a?{}:a,s=r?(0,o.createComponentVNode)(2,f,{occupant:l}):(0,o.createComponentVNode)(2,x);return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:s})})};var f=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,C,{occupant:t}),(0,o.createComponentVNode)(2,g,{occupant:t}),(0,o.createComponentVNode)(2,N,{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,i.useBackend)(t),c=n.act,s=n.data.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"print",onClick:function(){return c("print_p")},children:"Print Report"}),(0,o.createComponentVNode)(2,a.Button,{icon:"user-slash",onClick:function(){return c("ejectify")},children:"Eject"})],4),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:"0",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.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:(0,r.round)(s.bodyTempC,0)}),"\xb0C,\xa0",(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:(0,r.round)(s.bodyTempF,0)}),"\xb0F"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Implants",children:s.implant_len?(0,o.createComponentVNode)(2,a.Box,{children:s.implant.map((function(e){return e.name})).join(", ")}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"None"})})]})})},g=function(e){var t=e.occupant;return t.hasBorer||t.blind||t.colourblind||t.nearsighted||t.hasVirus?(0,o.createComponentVNode)(2,a.Section,{title:"Abnormalities",children:s.map((function(e,n){if(t[e[0]])return(0,o.createComponentVNode)(2,a.Box,{color:e[1],bold:"bad"===e[1],children:e[2]},n)}))}):(0,o.createComponentVNode)(2,a.Section,{title:"Abnormalities",children:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No abnormalities found."})})},N=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Damage",children:(0,o.createComponentVNode)(2,a.Table,{children:p(d,(function(e,n,r){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Table.Row,{color:"label",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:[e[0],":"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:!!n&&n[0]+":"})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,b,{value:t[e[1]],marginBottom:r100)&&"average":"bad")||!!e.status.robotic&&"label",width:"33%",children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",q:!0,children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:e.maxHealth,mt:t>0&&"0.5rem",value:e.totalLoss/e.maxHealth,ranges:u,children:[(0,o.createComponentVNode)(2,a.Box,{float:"left",display:"inline",children:[!!e.bruteLoss&&(0,o.createComponentVNode)(2,a.Box,{display:"inline",position:"relative",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"bone"}),(0,r.round)(e.bruteLoss,0),"\xa0",(0,o.createComponentVNode)(2,a.Tooltip,{position:"top",content:"Brute damage"})]}),!!e.fireLoss&&(0,o.createComponentVNode)(2,a.Box,{display:"inline",position:"relative",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"fire"}),(0,r.round)(e.fireLoss,0),(0,o.createComponentVNode)(2,a.Tooltip,{position:"top",content:"Burn damage"})]})]}),(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:(0,r.round)(e.totalLoss,0)})]})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",verticalAlign:"top",width:"33%",pt:t>0&&"calc(0.5rem + 2px)",children:[(0,o.createComponentVNode)(2,a.Box,{color:"average",display:"inline",children:m([!!e.internalBleeding&&"Internal bleeding",!!e.lungRuptured&&"Ruptured lung",!!e.status.broken&&e.status.broken,h(e.germ_level),!!e.open&&"Open incision"])}),(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:[m([!!e.status.splinted&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Splinted"}),!!e.status.robotic&&(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Robotic"}),!!e.status.dead&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",bold:!0,children:"DEAD"})]),m(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,a.Section,{title:"Internal Organs",children:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"N/A"})}):(0,o.createComponentVNode)(2,a.Section,{title:"Internal Organs",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:"Name"}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:"Damage"}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",children:"Injuries"})]}),e.organs.map((function(e,t){return(0,o.createComponentVNode)(2,a.Table.Row,{textTransform:"capitalize",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{color:(!e.dead?e.germ_level>100&&"average":"bad")||e.robotic>0&&"label",width:"33%",children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:e.maxHealth,value:e.damage/e.maxHealth,mt:t>0&&"0.5rem",ranges:u,children:(0,r.round)(e.damage,0)})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",verticalAlign:"top",width:"33%",pt:t>0&&"calc(0.5rem + 2px)",children:[(0,o.createComponentVNode)(2,a.Box,{color:"average",display:"inline",children:m([h(e.germ_level)])}),(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:m([1===e.robotic&&(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Robotic"}),2===e.robotic&&(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Assisted"}),!!e.dead&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",bold:!0,children:"DEAD"})])})]})]},t)}))]})})},x=function(){return(0,o.createComponentVNode)(2,a.Section,{textAlign:"center",flexGrow:"1",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:"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.BorgPanel=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.BorgPanel=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.borg||{},d=l.cell||{},u=d.charge/d.maxcharge,p=l.channels||[],m=l.modules||[],h=l.upgrades||[],f=l.ais||[],C=l.laws||[];return(0,o.createComponentVNode)(2,a.Window,{title:"Borg Panel",width:700,height:700,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Section,{title:s.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:"Rename",onClick:function(){return c("rename")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,i.Button,{icon:s.emagged?"check-square-o":"square-o",content:"Emagged",selected:s.emagged,onClick:function(){return c("toggle_emagged")}}),(0,o.createComponentVNode)(2,i.Button,{icon:s.lockdown?"check-square-o":"square-o",content:"Locked Down",selected:s.lockdown,onClick:function(){return c("toggle_lockdown")}}),(0,o.createComponentVNode)(2,i.Button,{icon:s.scrambledcodes?"check-square-o":"square-o",content:"Scrambled Codes",selected:s.scrambledcodes,onClick:function(){return c("toggle_scrambledcodes")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Reset Module",onClick:function(){return c("reset_module")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Charge",children:[d.missing?(0,o.createVNode)(1,"span","color-bad","No cell installed",16):(0,o.createComponentVNode)(2,i.ProgressBar,{value:u,children:d.charge+" / "+d.maxcharge}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:"Set",onClick:function(){return c("set_charge")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Change",onClick:function(){return c("change_cell")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"trash",content:"Remove",color:"bad",onClick:function(){return c("remove_cell")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Radio Channels",children:p.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.installed?"check-square-o":"square-o",content:e.name,selected:e.installed,onClick:function(){return c("toggle_radio",{channel:e.name})}},e.name)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Model",children:m.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:s.active_module===e.name?"check-square-o":"square-o",content:e.name+" module",selected:s.active_module===e.name,onClick:function(){return c("setmodule",{module:e.name})}},e.type)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Upgrades",children:h.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.installed?"check-square-o":"square-o",content:e.name,selected:e.installed,onClick:function(){return c("toggle_upgrade",{upgrade:e.type})}},e.type)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Master AI",children:f.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.connected?"check-square-o":"square-o",content:e.name,selected:e.connected,onClick:function(){return c("slavetoai",{slavetoai:e.ref})}},e.ref)}))})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Laws",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Law Manager",selected:s.lawmanager,onClick:function(){return c("lawmanager")}}),(0,o.createComponentVNode)(2,i.Button,{icon:s.lawupdate?"check-square-o":"square-o",content:"Lawsync",selected:s.lawupdate,onClick:function(){return c("toggle_lawupdate")}})],4),children:C.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:e},e)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BotClean=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.BotClean=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.locked,d=l.noaccess,u=l.maintpanel,p=l.on,m=l.autopatrol,h=l.canhack,f=l.emagged,C=l.remote_disabled,g=l.painame,N=l.cleanblood;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.NoticeBox,{children:["Swipe an ID card to ",s?"unlock":"lock"," this interface."]}),(0,o.createComponentVNode)(2,i.Section,{title:"General Settings",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,i.Button,{icon:p?"power-off":"times",content:p?"On":"Off",selected:p,disabled:d,onClick:function(){return c("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Patrol",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:m,content:"Auto Patrol",disabled:d,onClick:function(){return c("autopatrol")}})}),!!u&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Maintenance Panel",children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Panel Open!"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safety System",children:(0,o.createComponentVNode)(2,i.Box,{color:f?"bad":"good",children:f?"DISABLED!":"Enabled"})}),!!h&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hacking",children:(0,o.createComponentVNode)(2,i.Button,{icon:"terminal",content:f?"Restore Safties":"Hack",disabled:d,color:"bad",onClick:function(){return c("hack")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Remote Access",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:!C,content:"AI Remote Control",disabled:d,onClick:function(){return c("disableremote")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Cleaning Settings",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:N,content:"Clean Blood",disabled:d,onClick:function(){return c("blood")}})}),g&&(0,o.createComponentVNode)(2,i.Section,{title:"pAI",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:g,disabled:d,onClick:function(){return c("ejectpai")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BotSecurity=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.BotSecurity=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.locked,d=l.noaccess,u=l.maintpanel,p=l.on,m=l.autopatrol,h=l.canhack,f=l.emagged,C=l.remote_disabled,g=l.painame,N=l.check_id,b=l.check_weapons,V=l.check_warrant,v=l.arrest_mode,x=l.arrest_declare;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.NoticeBox,{children:["Swipe an ID card to ",s?"unlock":"lock"," this interface."]}),(0,o.createComponentVNode)(2,i.Section,{title:"General Settings",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,i.Button,{icon:p?"power-off":"times",content:p?"On":"Off",selected:p,disabled:d,onClick:function(){return c("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Patrol",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:m,content:"Auto Patrol",disabled:d,onClick:function(){return c("autopatrol")}})}),!!u&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Maintenance Panel",children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Panel Open!"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safety System",children:(0,o.createComponentVNode)(2,i.Box,{color:f?"bad":"good",children:f?"DISABLED!":"Enabled"})}),!!h&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hacking",children:(0,o.createComponentVNode)(2,i.Button,{icon:"terminal",content:f?"Restore Safties":"Hack",disabled:d,color:"bad",onClick:function(){return c("hack")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Remote Access",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:!C,content:"AI Remote Control",disabled:d,onClick:function(){return c("disableremote")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Who To Arrest",children:[(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:N,content:"Unidentifiable Persons",disabled:d,onClick:function(){return c("authid")}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:b,content:"Unauthorized Weapons",disabled:d,onClick:function(){return c("authweapon")}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:V,content:"Wanted Criminals",disabled:d,onClick:function(){return c("authwarrant")}})]}),(0,o.createComponentVNode)(2,i.Section,{title:"Arrest Procedure",children:[(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:v,content:"Detain Targets Indefinitely",disabled:d,onClick:function(){return c("arrtype")}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:x,content:"Announce Arrests On Radio",disabled:d,onClick:function(){return c("arrdeclare")}})]}),g&&(0,o.createComponentVNode)(2,i.Section,{title:"pAI",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:g,disabled:d,onClick:function(){return c("ejectpai")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigCells=void 0;var o=n(0),r=n(3),i=n(2),a=n(1),c=function(e,t){var n=e.cell,r=(0,a.useBackend)(t).act,c=n.cell_id,l=n.occupant,s=n.crimes,d=n.brigged_by,u=n.time_left_seconds,p=n.time_set_seconds,m=n.ref,h="";u>0&&(h+=" BrigCells__listRow--active");return(0,o.createComponentVNode)(2,i.Table.Row,{className:h,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:c}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:l}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:s}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:d}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.TimeDisplay,{totalSeconds:p})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.TimeDisplay,{totalSeconds:u})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{type:"button",onClick:function(){r("release",{ref:m})},children:"Release"})})]})},l=function(e){var t=e.cells;return(0,o.createComponentVNode)(2,i.Table,{className:"BrigCells__list",children:[(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Cell"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Occupant"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Crimes"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Brigged By"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Time Brigged For"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Time Left"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Release"})]}),t.map((function(e){return(0,o.createComponentVNode)(2,c,{cell:e},e.ref)}))]})};t.BrigCells=function(e,t){var n=(0,a.useBackend)(t),c=(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,i.Flex,{direction:"column",height:"100%",children:(0,o.createComponentVNode)(2,i.Section,{height:"100%",flexGrow:"1",children:(0,o.createComponentVNode)(2,l,{cells:c})})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigTimer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.BrigTimer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;l.nameText=l.occupant,l.timing&&(l.prisoner_hasrec?l.nameText=(0,o.createComponentVNode)(2,i.Box,{color:"green",children:l.occupant}):l.nameText=(0,o.createComponentVNode)(2,i.Box,{color:"red",children:l.occupant}));var s="pencil-alt";l.prisoner_name&&(l.prisoner_hasrec||(s="exclamation-triangle"));var d=[],u=0;for(u=0;u60||!l.isAllowed,onClick:function(){return c("start")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CameraConsoleOldContent=t.CameraConsoleMapContent=t.CameraConsole=void 0;var o=n(0),r=n(24),i=n(43),a=n(7),c=n(18),l=n(1),s=n(2),d=n(3),u=function(e,t){var n,o;if(!t)return[];var r=e.findIndex((function(e){return e.name===t.name}));return[null==(n=e[r-1])?void 0:n.name,null==(o=e[r+1])?void 0:o.name]},p=function(e,t){void 0===t&&(t="");var n=(0,c.createSearch)(t,(function(e){return e.name}));return(0,i.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)};t.CameraConsole=function(e,t){var n=(0,l.useLocalState)(t,"tabIndex",0),r=n[0],i=n[1];return(0,o.createComponentVNode)(2,d.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,d.Window.Content,{children:(0,o.createComponentVNode)(2,s.Box,{fillPositionedParent:!0,overflow:"hidden",children:[(0,o.createComponentVNode)(2,s.Tabs,{children:[(0,o.createComponentVNode)(2,s.Tabs.Tab,{selected:0===r,onClick:function(){return i(0)},children:[(0,o.createComponentVNode)(2,s.Icon,{name:"map-marked-alt"})," Map"]},"Map"),(0,o.createComponentVNode)(2,s.Tabs.Tab,{selected:1===r,onClick:function(){return i(1)},children:[(0,o.createComponentVNode)(2,s.Icon,{name:"table"})," List"]},"List")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,m);case 1:return(0,o.createComponentVNode)(2,h);default:return"WE SHOULDN'T BE HERE!"}}(r)]})})})};var m=function(e,t){var n=(0,l.useBackend)(t),r=n.act,i=n.data,a=n.config,c=p(i.cameras),d=(0,l.useLocalState)(t,"zoom",1),m=d[0],h=d[1],f=i.mapRef,C=i.activeCamera,g=i.stationLevel,N=u(c,C),b=N[0],V=N[1];return(0,o.createComponentVNode)(2,s.Box,{height:"100%",display:"flex",children:[(0,o.createComponentVNode)(2,s.Box,{height:"100%",flex:"0 0 500px",display:"flex",children:(0,o.createComponentVNode)(2,s.NanoMap,{onZoom:function(e){return h(e)},children:c.filter((function(e){return e.z===g})).map((function(e){return(0,o.createComponentVNode)(2,s.NanoMap.NanoButton,{activeCamera:C,x:e.x,y:e.y,context:t,zoom:m,icon:"circle",tooltip:e.name,name:e.name,color:"blue",status:e.status},e.ref)}))})}),(0,o.createComponentVNode)(2,s.Box,{height:"100%",resizable:!0,className:"CameraConsole__new__right",children:[(0,o.createVNode)(1,"div","CameraConsole__header",[(0,o.createVNode)(1,"div","CameraConsole__title",[(0,o.createVNode)(1,"b",null,"Camera: ",16),C&&C.name||"\u2014"],0),(0,o.createVNode)(1,"div","CameraConsole__toolbarRight",[(0,o.createComponentVNode)(2,s.Button,{icon:"chevron-left",disabled:!b,onClick:function(){return r("switch_camera",{name:b})}}),(0,o.createComponentVNode)(2,s.Button,{icon:"chevron-right",disabled:!V,onClick:function(){return r("switch_camera",{name:V})}})],4)],4),(0,o.createComponentVNode)(2,s.ByondUi,{resizable:!0,className:"CameraConsole__map",overflow:"hidden",params:{id:f,parent:a.window,type:"map"}})]})]})};t.CameraConsoleMapContent=m;var h=function(e,t){var n=(0,l.useBackend)(t),r=n.act,i=n.data,c=n.config,m=i.mapRef,h=i.activeCamera,f=(0,l.useLocalState)(t,"searchText",""),C=f[0],g=f[1],N=p(i.cameras,C),b=u(N,h),V=b[0],v=b[1];return(0,o.createComponentVNode)(2,s.Box,{children:[(0,o.createVNode)(1,"div","CameraConsole__left",(0,o.createComponentVNode)(2,d.Window.Content,{scrollable:!0,children:(0,o.createFragment)([(0,o.createComponentVNode)(2,s.Input,{fluid:!0,mb:1,placeholder:"Search for a camera",onInput:function(e,t){return g(t)}}),(0,o.createComponentVNode)(2,s.Section,{children:N.map((function(e){return(0,o.createVNode)(1,"div",(0,a.classes)(["Button","Button--fluid",e.status?"Button--color--transparent":"Button--color--danger","Button--ellipsis",h&&e.name===h.name&&"Button--selected"]),e.name,0,{title:e.name,onClick:function(){(0,d.refocusLayout)(),r("switch_camera",{name:e.name})}},e.name)}))})],4)}),2),(0,o.createVNode)(1,"div","CameraConsole__right",[(0,o.createVNode)(1,"div","CameraConsole__toolbar",[(0,o.createVNode)(1,"b",null,"Camera: ",16),h&&h.name||"\u2014"],0),(0,o.createVNode)(1,"div","CameraConsole__toolbarRight",[(0,o.createComponentVNode)(2,s.Button,{icon:"chevron-left",disabled:!V,onClick:function(){return r("switch_camera",{name:V})}}),(0,o.createComponentVNode)(2,s.Button,{icon:"chevron-right",disabled:!v,onClick:function(){return r("switch_camera",{name:v})}})],4),(0,o.createComponentVNode)(2,s.ByondUi,{className:"CameraConsole__map",params:{id:m,parent:c.window,type:"map"}})],4)]})};t.CameraConsoleOldContent=h},function(e,t,n){"use strict";t.__esModule=!0,t.Canister=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(103),l=n(3);t.Canister=function(e,t){var n=(0,i.useBackend)(t),s=n.act,d=n.data,u=d.portConnected,p=d.tankPressure,m=d.releasePressure,h=d.defaultReleasePressure,f=d.minReleasePressure,C=d.maxReleasePressure,g=d.valveOpen,N=d.name,b=d.canLabel,V=d.colorContainer,v=d.color_index,x=d.hasHoldingTank,y=d.holdingTank,k="";v.prim&&(k=V.prim.options[v.prim].name);var w="";v.sec&&(w=V.sec.options[v.sec].name);var _="";v.ter&&(_=V.ter.options[v.ter].name);var B="";v.quart&&(B=V.quart.options[v.quart].name);var S=[],L=[],A=[],I=[],E=0;for(E=0;Ee.current_positions&&(0,o.createComponentVNode)(2,i.Box,{color:"green",children:e.total_positions-e.current_positions})||(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"0"})}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,i.Button,{content:"-",disabled:d.cooldown_time||!e.can_close,onClick:function(){return s("make_job_unavailable",{job:e.title})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,i.Button,{content:"+",disabled:d.cooldown_time||!e.can_open,onClick:function(){return s("make_job_available",{job:e.title})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"center",children:d.target_dept&&(0,o.createComponentVNode)(2,i.Box,{color:"green",children:d.priority_jobs.indexOf(e.title)>-1?"Yes":""})||(0,o.createComponentVNode)(2,i.Button,{content:"Priority",selected:d.priority_jobs.indexOf(e.title)>-1,disabled:d.cooldown_time||!e.can_prioritize,onClick:function(){return s("prioritize_job",{job:e.title})}})})]},e.title)}))]})})],4):(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 2:n=d.authenticated&&d.scan_name?d.modify_name?(0,o.createComponentVNode)(2,c.AccessList,{accesses:d.regions,selectedList:d.selectedAccess,accessMod:function(e){return s("set",{access:e})},grantAll:function(){return s("grant_all")},denyAll:function(){return s("clear_all")},grantDep:function(e){return s("grant_region",{region:e})},denyDep:function(e){return s("deny_region",{region:e})}}):(0,o.createComponentVNode)(2,i.Section,{title:"Card Missing",color:"red",children:"No card to modify."}):(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 3:n=d.authenticated?d.records.length?(0,o.createComponentVNode)(2,i.Section,{title:"Records",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Delete All Records",disabled:!d.authenticated||0===d.records.length||d.target_dept,onClick:function(){return s("wipe_all_logs")}}),children:[(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Crewman"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Old Rank"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"New Rank"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Authorized By"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Time"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Reason"}),!!d.iscentcom&&(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Deleted By"})]}),d.records.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.transferee}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.oldvalue}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.newvalue}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.whodidit}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.timestamp}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.reason}),!!d.iscentcom&&(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.deletedby})]},e.timestamp)}))]}),!!d.iscentcom&&(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:"Delete MY Records",color:"purple",disabled:!d.authenticated||0===d.records.length,onClick:function(){return s("wipe_my_logs")}})})]}):(0,o.createComponentVNode)(2,i.Section,{title:"Records",children:"No records."}):(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 4:n=d.authenticated&&d.scan_name?(0,o.createComponentVNode)(2,i.Section,{title:"Your Team",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Name"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Rank"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Sec Status"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Actions"})]}),d.people_dept.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.title}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.crimstat}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:e.buttontext,disabled:!e.demotable,onClick:function(){return s("remote_demote",{remote_demote:e.name})}})})]},e.title)}))]})}):(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"Not logged in."});break;default:n=(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"ERROR: Unknown Mode."})}return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[u,p,n]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CargoConsole=void 0;var o=n(0),r=n(43),i=n(24),a=n(1),c=n(2),l=n(3),s=(n(52),n(18));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,d),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})})};var d=function(e,t){var n=(0,a.useLocalState)(t,"contentsModal",null),r=n[0],i=n[1],l=(0,a.useLocalState)(t,"contentsModalTitle",null),s=l[0],d=l[1];return null!==r&&null!==s?(0,o.createComponentVNode)(2,c.Modal,{maxWidth:"75%",width:window.innerWidth+"px",maxHeight:.75*window.innerHeight+"px",mx:"auto",children:[(0,o.createComponentVNode)(2,c.Box,{width:"100%",bold:!0,children:(0,o.createVNode)(1,"h1",null,[s,(0,o.createTextVNode)(" contents:")],0)}),(0,o.createComponentVNode)(2,c.Box,{children:r.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:["- ",e]},e)}))}),(0,o.createComponentVNode)(2,c.Box,{m:2,children:(0,o.createComponentVNode)(2,c.Button,{content:"Close",onClick:function(){i(null),d(null)}})})]}):void 0},u=function(e,t){var n,r,i=(0,a.useBackend)(t),l=i.act,s=i.data,d=s.is_public,u=s.points,p=s.timeleft,m=s.moving,h=s.at_station;return m||h?!m&&h?(n="Docked at the station",r="Return Shuttle"):m&&(r="In Transit...",n=1!==p?"Shuttle is en route (ETA: "+p+" minutes)":"Shuttle is en route (ETA: "+p+" minute)"):(n="Docked off-station",r="Call Shuttle"),(0,o.createComponentVNode)(2,c.Section,{title:"Status",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Points Available",children:u}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Shuttle Status",children:n}),0===d&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,c.Button,{content:r,disabled:m,onClick:function(){return l("moveShuttle")}}),(0,o.createComponentVNode)(2,c.Button,{content:"View Central Command Messages",onClick:function(){return l("showMessages")}})]})]})})},p=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data,u=d.categories,p=d.supply_packs,m=(0,a.useSharedState)(t,"category","Emergency"),h=m[0],f=m[1],C=(0,a.useSharedState)(t,"search_text",""),g=C[0],N=C[1],b=(0,a.useLocalState)(t,"contentsModal",null),V=(b[0],b[1]),v=(0,a.useLocalState)(t,"contentsModalTitle",null),x=(v[0],v[1]),y=(0,s.createSearch)(g,(function(e){return e.name})),k=(0,r.flow)([(0,i.filter)((function(e){return e.cat===u.filter((function(e){return e.name===h}))[0].category||g})),g&&(0,i.filter)(y),(0,i.sortBy)((function(e){return e.name.toLowerCase()}))])(p),w="Crate Catalogue";return g?w="Results for '"+g+"':":h&&(w="Browsing "+h),(0,o.createComponentVNode)(2,c.Section,{title:w,buttons:(0,o.createComponentVNode)(2,c.Dropdown,{width:"190px",options:u.map((function(e){return e.name})),selected:h,onSelected:function(e){return f(e)}}),children:[(0,o.createComponentVNode)(2,c.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return N(t)},mb:1}),(0,o.createComponentVNode)(2,c.Box,{maxHeight:25,overflowY:"auto",overflowX:"hidden",children:(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:k.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{bold:!0,children:(0,o.createComponentVNode)(2,c.Box,{color:e.has_sale?"good":"default",children:[e.name," (",e.cost," Points)"]})}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,c.Button,{content:"Order 1",icon:"shopping-cart",onClick:function(){return l("order",{crate:e.ref,multiple:0})}}),(0,o.createComponentVNode)(2,c.Button,{content:"Order Multiple",icon:"cart-plus",onClick:function(){return l("order",{crate:e.ref,multiple:1})}}),(0,o.createComponentVNode)(2,c.Button,{content:"View Contents",icon:"search",onClick:function(){V(e.contents),x(e.name)}})]})]},e.name)}))})})]})},m=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.requests,s=i.canapprove,d=i.orders;return(0,o.createComponentVNode)(2,c.Section,{title:"Details",children:(0,o.createComponentVNode)(2,c.Box,{maxHeight:15,overflowY:"auto",overflowX:"hidden",children:[(0,o.createComponentVNode)(2,c.Box,{bold:!0,children:"Requests"}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:l.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Reason: ",e.comment]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Required Techs: ",e.pack_techs]})]}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,c.Button,{content:"Approve",color:"green",disabled:!s,onClick:function(){return r("approve",{ordernum:e.ordernum})}}),(0,o.createComponentVNode)(2,c.Button,{content:"Deny",color:"red",onClick:function(){return r("deny",{ordernum:e.ordernum})}})]})]},e.ordernum)}))}),(0,o.createComponentVNode)(2,c.Box,{bold:!0,children:"Confirmed Orders"}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Reason: ",e.comment]})]})},e.ordernum)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Changelog=void 0;var o=n(0),r=n(7),i=n(1),a=n(2),c=n(3),l=u(n(494)),s=u(n(495)),d=u(n(521));function u(e){return e&&e.__esModule?e:{"default":e}}function p(e,t,n,o,r,i,a){try{var c=e[i](a),l=c.value}catch(s){return void n(s)}c.done?t(l):Promise.resolve(l).then(o,r)}var m={add:{icon:"check-circle",color:"green"},admin:{icon:"user-shield",color:"purple"},balance:{icon:"balance-scale-right",color:"yellow"},bugfix:{icon:"bug",color:"green"},code_imp:{icon:"code",color:"green"},config:{icon:"cogs",color:"purple"},del:{icon:"minus",color:"red"},expansion:{icon:"check-circle",color:"green"},experiment:{icon:"radiation",color:"yellow"},image:{icon:"image",color:"green"},imageadd:{icon:"tg-image-plus",color:"green"},imagedel:{icon:"tg-image-minus",color:"red"},qol:{icon:"hand-holding-heart",color:"green"},refactor:{icon:"tools",color:"green"},rscadd:{icon:"check-circle",color:"green"},rscdel:{icon:"times-circle",color:"red"},server:{icon:"server",color:"purple"},sound:{icon:"volume-high",color:"green"},soundadd:{icon:"tg-sound-plus",color:"green"},sounddel:{icon:"tg-sound-minus",color:"red"},spellcheck:{icon:"spell-check",color:"green"},tgs:{icon:"toolbox",color:"purple"},tweak:{icon:"wrench",color:"green"},unknown:{icon:"info-circle",color:"label"},wip:{icon:"hammer",color:"orange"}},h=function(e){var t,n;function u(){var t;return(t=e.call(this)||this).state={data:"Loading changelog data...",selectedDate:"",selectedIndex:0},t.dateChoices=[],t}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var h=u.prototype;return h.setData=function(e){this.setState({data:e})},h.setSelectedDate=function(e){this.setState({selectedDate:e})},h.setSelectedIndex=function(e){this.setState({selectedIndex:e})},h.getData=function(e,t){void 0===t&&(t=1);var n=(0,i.useBackend)(this.context).act,o=this;if(t>6)return this.setData("Failed to load data after 6 attempts");n("get_month",{date:e}),(0,d["default"])(e+".yml").then(function(){var n,r=(n=regeneratorRuntime.mark((function i(n){var r,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,n.text();case 2:r=i.sent,/^Cannot find/.test(r)?(a=50+50*t,o.setData("Loading changelog data"+".".repeat(t+3)),setTimeout((function(){o.getData(e,t+1)}),a)):o.setData(s["default"].load(r,{schema:s["default"].CORE_SCHEMA}));case 5:case"end":return i.stop()}}),i)})),function(){var e=this,t=arguments;return new Promise((function(o,r){var i=n.apply(e,t);function a(e){p(i,o,r,a,c,"next",e)}function c(e){p(i,o,r,a,c,"throw",e)}a(undefined)}))});return function(e){return r.apply(this,arguments)}}())},h.componentDidMount=function(){var e=this,t=(0,i.useBackend)(this.context).data.dates,n=void 0===t?[]:t;n&&(n.forEach((function(t){return e.dateChoices.push((0,l["default"])(t,"mmmm yyyy",!0))})),this.setSelectedDate(this.dateChoices[0]),this.getData(n[0]))},h.render=function(){var e=this,t=this.state,n=t.data,s=t.selectedDate,d=t.selectedIndex,u=(0,i.useBackend)(this.context).data.dates,p=this.dateChoices,h=p.length>0&&(0,o.createComponentVNode)(2,a.Stack,{mb:1,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{className:"Changelog__Button",disabled:0===d,icon:"chevron-left",onClick:function(){var t=d-1;return e.setData("Loading changelog data..."),e.setSelectedIndex(t),e.setSelectedDate(p[t]),window.scrollTo(0,document.body.scrollHeight||document.documentElement.scrollHeight),e.getData(u[t])}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Dropdown,{displayText:s,options:p,onSelected:function(t){var n=p.indexOf(t);return e.setData("Loading changelog data..."),e.setSelectedIndex(n),e.setSelectedDate(t),window.scrollTo(0,document.body.scrollHeight||document.documentElement.scrollHeight),e.getData(u[n])},selected:s,width:"150px"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{className:"Changelog__Button",disabled:d===p.length-1,icon:"chevron-right",onClick:function(){var t=d+1;return e.setData("Loading changelog data..."),e.setSelectedIndex(t),e.setSelectedDate(p[t]),window.scrollTo(0,document.body.scrollHeight||document.documentElement.scrollHeight),e.getData(u[t])}})})]}),f=(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createVNode)(1,"h1",null,"Paradise Station",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Thanks to: ",16),(0,o.createTextVNode)("Baystation 12, /tg/station, /vg/station, NTstation, CDK Station devs, FacepunchStation, GoonStation devs, the original SpaceStation developers and Radithor for the title image. Also a thanks to anybody who has contributed who is not listed here :( Ask to be added here on irc.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Recent GitHub contributors can be found "),(0,o.createVNode)(1,"a",null,"here",16,{href:"https://github.com/ss220-space/Paradise/pulse/monthly"}),(0,o.createTextVNode)(".")],0),h]}),C=(0,o.createComponentVNode)(2,a.Section,{children:[h,(0,o.createVNode)(1,"h3",null,"GoonStation 13 Development Team",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Coders: ",16),(0,o.createTextVNode)("Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Spriters: ",16),(0,o.createTextVNode)("Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Traditional Games Space Station 13 is thankful to the GoonStation 13 Development Team for its work on the game up to the"),(0,o.createTextVNode)(" r4407 release. The changelog for changes up to r4407 can be seen "),(0,o.createVNode)(1,"a",null,"here",16,{href:"https://wiki.ss13.co/Changelog#April_2010"}),(0,o.createTextVNode)(".")],0),(0,o.createVNode)(1,"p",null,["Except where otherwise noted, Goon Station 13 is licensed under a ",(0,o.createVNode)(1,"a",null,"Creative Commons Attribution-Noncommercial-Share Alike 3.0 License",16,{href:"https://creativecommons.org/licenses/by-nc-sa/3.0/"}),". Rights are currently extended to ",(0,o.createVNode)(1,"a",null,"SomethingAwful Goons",16,{href:"http://forums.somethingawful.com/"})," only."],0),(0,o.createVNode)(1,"h3",null,"Traditional Games Space Station 13 License",16),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Some icons by "),(0,o.createVNode)(1,"a",null,"Yusuke Kamiyamane",16,{href:"http://p.yusukekamiyamane.com/"}),(0,o.createTextVNode)(". All rights reserved. Licensed under a "),(0,o.createVNode)(1,"a",null,"Creative Commons Attribution 3.0 License",16,{href:"http://creativecommons.org/licenses/by/3.0/"}),(0,o.createTextVNode)(".")],4)]}),g=/#\d+/,N="object"==typeof n&&Object.keys(n).length>0&&Object.entries(n).reverse().map((function(e){var t=e[0],n=e[1];return(0,o.createComponentVNode)(2,a.Section,{title:(0,l["default"])(t,"d mmmm yyyy",!0),children:(0,o.createComponentVNode)(2,a.Box,{ml:3,children:Object.entries(n).map((function(e){var t=e[0],n=e[1];return(0,o.createFragment)([(0,o.createVNode)(1,"h4",null,[t,(0,o.createTextVNode)(" changed:")],0),(0,o.createComponentVNode)(2,a.Box,{ml:3,children:(0,o.createComponentVNode)(2,a.Table,{children:n.map((function(e){var t=Object.keys(e)[0],n=e[t],i=n.match(g),c=(0,o.createComponentVNode)(2,a.Table.Cell,{className:(0,r.classes)(["Changelog__Cell","Changelog__Cell--Icon"]),children:(0,o.createComponentVNode)(2,a.Icon,{color:m[t]?m[t].color:m.unknown.color,name:m[t]?m[t].icon:m.unknown.icon})});return null!==i&&(0,o.createComponentVNode)(2,a.Table.Row,{children:[c,(0,o.createComponentVNode)(2,a.Table.Cell,{className:"Changelog__Cell",children:(0,o.createVNode)(1,"a",null,[(0,o.createTextVNode)(" "),n,(0,o.createTextVNode)(" ")],0,{href:"https://github.com/ss220-space/Paradise/pull/"+i[0].substring(1)})})]},t+n)||(0,o.createComponentVNode)(2,a.Table.Row,{children:[c,(0,o.createComponentVNode)(2,a.Table.Cell,{className:"Changelog__Cell",children:n})]},t+n)}))})})],4,t)}))})},t)}));return(0,o.createComponentVNode)(2,c.Window,{title:"Changelog",width:675,height:650,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[f,N,"string"==typeof n&&(0,o.createVNode)(1,"p",null,n,0),C]})})},u}(o.Component);t.Changelog=h},function(e,t,n){"use strict";var o;function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(i){var a,c,l,s=arguments,d=(a=/d{1,4}|D{3,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|W{1,2}|[LlopSZN]|"[^"]*"|'[^']*'/g,c=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,l=/[^-+\dA-Z]/g,function(e,t,n,o){if(1!==s.length||"string"!==f(e)||/\d/.test(e)||(t=e,e=undefined),(e=e||0===e?e:new Date)instanceof Date||(e=new Date(e)),isNaN(e))throw TypeError("Invalid date");var r=(t=String(d.masks[t]||t||d.masks["default"])).slice(0,4);"UTC:"!==r&&"GMT:"!==r||(t=t.slice(4),n=!0,"GMT:"===r&&(o=!0));var i=function(){return n?"getUTC":"get"},C=function(){return e[i()+"Date"]()},g=function(){return e[i()+"Day"]()},N=function(){return e[i()+"Month"]()},b=function(){return e[i()+"FullYear"]()},V=function(){return e[i()+"Hours"]()},v=function(){return e[i()+"Minutes"]()},x=function(){return e[i()+"Seconds"]()},y=function(){return e[i()+"Milliseconds"]()},k=function(){return n?0:e.getTimezoneOffset()},w=function(){return m(e)},_=function(){return h(e)},B={d:function(){return C()},dd:function(){return u(C())},ddd:function(){return d.i18n.dayNames[g()]},DDD:function(){return p({y:b(),m:N(),d:C(),_:i(),dayName:d.i18n.dayNames[g()],short:!0})},dddd:function(){return d.i18n.dayNames[g()+7]},DDDD:function(){return p({y:b(),m:N(),d:C(),_:i(),dayName:d.i18n.dayNames[g()+7]})},m:function(){return N()+1},mm:function(){return u(N()+1)},mmm:function(){return d.i18n.monthNames[N()]},mmmm:function(){return d.i18n.monthNames[N()+12]},yy:function(){return String(b()).slice(2)},yyyy:function(){return u(b(),4)},h:function(){return V()%12||12},hh:function(){return u(V()%12||12)},H:function(){return V()},HH:function(){return u(V())},M:function(){return v()},MM:function(){return u(v())},s:function(){return x()},ss:function(){return u(x())},l:function(){return u(y(),3)},L:function(){return u(Math.floor(y()/10))},t:function(){return V()<12?d.i18n.timeNames[0]:d.i18n.timeNames[1]},tt:function(){return V()<12?d.i18n.timeNames[2]:d.i18n.timeNames[3]},T:function(){return V()<12?d.i18n.timeNames[4]:d.i18n.timeNames[5]},TT:function(){return V()<12?d.i18n.timeNames[6]:d.i18n.timeNames[7]},Z:function(){return o?"GMT":n?"UTC":(String(e).match(c)||[""]).pop().replace(l,"").replace(/GMT\+0000/g,"UTC")},o:function(){return(k()>0?"-":"+")+u(100*Math.floor(Math.abs(k())/60)+Math.abs(k())%60,4)},p:function(){return(k()>0?"-":"+")+u(Math.floor(Math.abs(k())/60),2)+":"+u(Math.floor(Math.abs(k())%60),2)},S:function(){return["th","st","nd","rd"][C()%10>3?0:(C()%100-C()%10!=10)*C()%10]},W:function(){return w()},WW:function(){return u(w())},N:function(){return _()}};return t.replace(a,(function(e){return e in B?B[e]():e.slice(1,e.length-1)}))});d.masks={"default":"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",paddedShortDate:"mm/dd/yyyy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:sso",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",expiresHeaderFormat:"ddd, dd mmm yyyy HH:MM:ss Z"},d.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],timeNames:["a","p","am","pm","A","P","AM","PM"]};var u=function(e,t){for(e=String(e),t=t||2;e.length>10),56320+(e-65536&1023))}for(var x=new Array(256),y=new Array(256),k=0;k<256;k++)x[k]=V(k)?1:0,y[k]=V(k);function w(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||c,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function _(e,t){return new r(t,new i(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function B(e,t){throw _(e,t)}function S(e,t){e.onWarning&&e.onWarning.call(null,_(e,t))}var L={YAML:function(e,t,n){var o,r,i;null!==e.version&&B(e,"duplication of %YAML directive"),1!==n.length&&B(e,"YAML directive accepts exactly one argument"),null===(o=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&B(e,"ill-formed argument of the YAML directive"),r=parseInt(o[1],10),i=parseInt(o[2],10),1!==r&&B(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=i<2,1!==i&&2!==i&&S(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var o,r;2!==n.length&&B(e,"TAG directive accepts exactly two arguments"),o=n[0],r=n[1],p.test(o)||B(e,"ill-formed tag handle (first argument) of the TAG directive"),l.call(e.tagMap,o)&&B(e,'there is a previously declared suffix for "'+o+'" tag handle'),m.test(r)||B(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[o]=r}};function A(e,t,n,o){var r,i,a,c;if(t1&&(e.result+=o.repeat("\n",t-1))}function P(e,t){var n,o,r=e.tag,i=e.anchor,a=[],c=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),o=e.input.charCodeAt(e.position);0!==o&&45===o&&g(e.input.charCodeAt(e.position+1));)if(c=!0,e.position++,T(e,!0,-1)&&e.lineIndent<=t)a.push(null),o=e.input.charCodeAt(e.position);else if(n=e.line,j(e,t,3,!1,!0),a.push(e.result),T(e,!0,-1),o=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==o)B(e,"bad indentation of a sequence entry");else if(e.lineIndentt?V=1:e.lineIndent===t?V=0:e.lineIndentt?V=1:e.lineIndent===t?V=0:e.lineIndentt)&&(j(e,t,4,!0,r)&&(f?m=e.result:h=e.result),f||(E(e,d,u,p,m,h,i,a),p=m=h=null),T(e,!0,-1),c=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==c)B(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===i?B(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):d?B(e,"repeat of an indentation width identifier"):(u=t+i-1,d=!0)}if(C(a)){do{a=e.input.charCodeAt(++e.position)}while(C(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!f(a)&&0!==a)}for(;0!==a;){for(D(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!d||e.lineIndentu&&(u=e.lineIndent),f(a))p++;else{if(e.lineIndent0){for(r=a,i=0;r>0;r--)(a=b(c=e.input.charCodeAt(++e.position)))>=0?i=(i<<4)+a:B(e,"expected hexadecimal character");e.result+=v(i),e.position++}else B(e,"unknown escape sequence");n=o=e.position}else f(c)?(A(e,n,o,!0),M(e,T(e,!1,t)),n=o=e.position):e.position===e.lineStart&&F(e)?B(e,"unexpected end of the document within a double quoted scalar"):(e.position++,o=e.position)}B(e,"unexpected end of the stream within a double quoted scalar")}(e,m)?w=!0:!function(e){var t,n,o;if(42!==(o=e.input.charCodeAt(e.position)))return!1;for(o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!g(o)&&!N(o);)o=e.input.charCodeAt(++e.position);return e.position===t&&B(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),e.anchorMap.hasOwnProperty(n)||B(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],T(e,!0,-1),!0}(e)?function(e,t,n){var o,r,i,a,c,l,s,d,u=e.kind,p=e.result;if(g(d=e.input.charCodeAt(e.position))||N(d)||35===d||38===d||42===d||33===d||124===d||62===d||39===d||34===d||37===d||64===d||96===d)return!1;if((63===d||45===d)&&(g(o=e.input.charCodeAt(e.position+1))||n&&N(o)))return!1;for(e.kind="scalar",e.result="",r=i=e.position,a=!1;0!==d;){if(58===d){if(g(o=e.input.charCodeAt(e.position+1))||n&&N(o))break}else if(35===d){if(g(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&F(e)||n&&N(d))break;if(f(d)){if(c=e.line,l=e.lineStart,s=e.lineIndent,T(e,!1,-1),e.lineIndent>=t){a=!0,d=e.input.charCodeAt(e.position);continue}e.position=i,e.line=c,e.lineStart=l,e.lineIndent=s;break}}a&&(A(e,r,i,!1),M(e,e.line-c),r=i=e.position,a=!1),C(d)||(i=e.position+1),d=e.input.charCodeAt(++e.position)}return A(e,r,i,!1),!!e.result||(e.kind=u,e.result=p,!1)}(e,m,1===n)&&(w=!0,null===e.tag&&(e.tag="?")):(w=!0,null===e.tag&&null===e.anchor||B(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===V&&(w=s&&P(e,h))),null!==e.tag&&"!"!==e.tag)if("?"===e.tag){for(d=0,u=e.implicitTypes.length;d tag; it should be "'+p.kind+'", not "'+e.kind+'"'),p.resolve(e.result)?(e.result=p.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):B(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):B(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||w}function U(e){var t,n,o,r,i=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(r=e.input.charCodeAt(e.position))&&(T(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!g(r);)r=e.input.charCodeAt(++e.position);for(o=[],(n=e.input.slice(t,e.position)).length<1&&B(e,"directive name must not be less than one character in length");0!==r;){for(;C(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!f(r));break}if(f(r))break;for(t=e.position;0!==r&&!g(r);)r=e.input.charCodeAt(++e.position);o.push(e.input.slice(t,e.position))}0!==r&&D(e),l.call(L,n)?L[n](e,n,o):S(e,'unknown document directive "'+n+'"')}T(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,T(e,!0,-1)):a&&B(e,"directives end mark is expected"),j(e,e.lineIndent-1,4,!1,!0),T(e,!0,-1),e.checkLineBreaks&&d.test(e.input.slice(i,e.position))&&S(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&F(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,T(e,!0,-1)):e.position0&&-1==="\0\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(r-1));)if(r-=1,this.position-r>t/2-1){n=" ... ",r+=5;break}for(i="",a=this.position;at/2-1){i=" ... ",a-=5;break}return c=this.buffer.slice(r,a),o.repeat(" ",e)+n+c+i+"\n"+o.repeat(" ",e+this.position-r+n.length)+"^"},r.prototype.toString=function(e){var t,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet())&&(n+=":\n"+t),n},e.exports=r},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},function(e,t,n){"use strict";var o=n(65),r=n(20);function i(e){return 48<=e&&e<=55}function a(e){return 48<=e&&e<=57}e.exports=new r("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,o=e.length,r=0,c=!1;if(!o)return!1;if("-"!==(t=e[r])&&"+"!==t||(t=e[++r]),"0"===t){if(r+1===o)return!0;if("b"===(t=e[++r])){for(r++;r=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0"+e.toString(8):"-0"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},function(e,t,n){"use strict";var o=n(65),r=n(20),i=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var a=/^[-+]?[0-9]+e/;e.exports=new r("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!i.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n,o,r;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,r=[],"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:t.indexOf(":")>=0?(t.split(":").forEach((function(e){r.unshift(parseFloat(e,10))})),t=0,o=1,r.forEach((function(e){t+=e*o,o*=60})),n*t):n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||o.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(o.isNegativeZero(e))return"-0.0";return n=e.toString(10),a.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"})},function(e,t,n){"use strict";var o=n(20),r=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),i=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");e.exports=new o("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==r.exec(e)||null!==i.exec(e))},construct:function(e){var t,n,o,a,c,l,s,d,u=0,p=null;if(null===(t=r.exec(e))&&(t=i.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],o=+t[2]-1,a=+t[3],!t[4])return new Date(Date.UTC(n,o,a));if(c=+t[4],l=+t[5],s=+t[6],t[7]){for(u=t[7].slice(0,3);u.length<3;)u+="0";u=+u}return t[9]&&(p=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(p=-p)),d=new Date(Date.UTC(n,o,a,c,l,s,u)),p&&d.setTime(d.getTime()-p),d},instanceOf:Date,represent:function(e){return e.toISOString()}})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}})},function(e,t,n){"use strict";var o;try{o=n(509).Buffer}catch(a){}var r=n(20),i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";e.exports=new r("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,o=0,r=e.length,a=i;for(n=0;n64)){if(t<0)return!1;o+=6}return o%8==0},construct:function(e){var t,n,r=e.replace(/[\r\n=]/g,""),a=r.length,c=i,l=0,s=[];for(t=0;t>16&255),s.push(l>>8&255),s.push(255&l)),l=l<<6|c.indexOf(r.charAt(t));return 0===(n=a%4*6)?(s.push(l>>16&255),s.push(l>>8&255),s.push(255&l)):18===n?(s.push(l>>10&255),s.push(l>>2&255)):12===n&&s.push(l>>4&255),o?o.from?o.from(s):new o(s):s},predicate:function(e){return o&&o.isBuffer(e)},represent:function(e){var t,n,o="",r=0,a=e.length,c=i;for(t=0;t>18&63],o+=c[r>>12&63],o+=c[r>>6&63],o+=c[63&r]),r=(r<<8)+e[t];return 0===(n=a%3)?(o+=c[r>>18&63],o+=c[r>>12&63],o+=c[r>>6&63],o+=c[63&r]):2===n?(o+=c[r>>10&63],o+=c[r>>4&63],o+=c[r<<2&63],o+=c[64]):1===n&&(o+=c[r>>2&63],o+=c[r<<4&63],o+=c[64],o+=c[64]),o}})},function(e,t,n){"use strict";(function(e){ + */var l=function(e){var t=e.className,n=e.vertical,a=e.children,l=c(e,["className","vertical","children"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Tabs",n?"Tabs--vertical":"Tabs--horizontal",t,(0,i.computeBoxClassName)(l)]),(0,o.createVNode)(1,"div","Tabs__tabBox",a,0),2,Object.assign({},(0,i.computeBoxProps)(l))))};t.Tabs=l;l.Tab=function(e){var t=e.className,n=e.selected,i=e.altSelection,l=c(e,["className","selected","altSelection"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({className:(0,r.classes)(["Tabs__tab",n&&"Tabs__tab--selected",i&&n&&"Tabs__tab--altSelection",t]),selected:!i&&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":461,"./AIFixer.js":462,"./APC.js":463,"./ATM.js":464,"./AccountsUplinkTerminal.js":465,"./AgentCard.js":466,"./AiAirlock.js":467,"./AirAlarm.js":468,"./AirlockAccessController.js":469,"./AirlockElectronics.js":470,"./AppearanceChanger.js":471,"./AtmosAlertConsole.js":472,"./AtmosControl.js":473,"./AtmosFilter.js":474,"./AtmosMixer.js":475,"./AtmosPump.js":476,"./Autolathe.js":477,"./Biogenerator.js":478,"./BlueSpaceArtilleryControl.js":479,"./BluespaceRiftScanner.js":480,"./BluespaceRiftServer.js":481,"./BluespaceTap.js":482,"./BodyScanner.js":483,"./BorgPanel.js":484,"./BotClean.js":485,"./BotSecurity.js":486,"./BrigCells.js":487,"./BrigTimer.js":488,"./CameraConsole.js":489,"./Canister.js":490,"./CardComputer.js":491,"./CargoConsole.js":492,"./Changelog.js":493,"./ChemDispenser.js":522,"./ChemHeater.js":526,"./ChemMaster.js":527,"./CloningConsole.js":528,"./CommunicationsComputer.js":529,"./Contractor.js":530,"./ConveyorSwitch.js":531,"./CrewMonitor.js":532,"./Cryo.js":533,"./CryopodConsole.js":535,"./DNAModifier.js":536,"./DNAModifyer.js":537,"./DestinationTagger.js":538,"./DisposalBin.js":539,"./DnaVault.js":540,"./EFTPOS.js":541,"./ERTManager.js":542,"./Electropack.js":543,"./EvolutionMenu.js":544,"./ExosuitFabricator.js":545,"./ExternalAirlockController.js":546,"./FaxMachine.js":547,"./FloorPainter.js":548,"./GPS.js":549,"./GasAnalyzer.js":550,"./GasFreezer.js":552,"./GenericCrewManifest.js":553,"./GhostHudPanel.js":554,"./HandheldChemDispenser.js":555,"./ImplantPad.js":556,"./Instrument.js":557,"./ItemPixelShift.js":558,"./KeycardAuth.js":559,"./LaborClaimConsole.js":560,"./LawManager.js":561,"./ListInput.js":562,"./MechBayConsole.js":563,"./MechaControlConsole.js":564,"./MedicalRecords.js":565,"./MiniGamesMenu.js":566,"./MiningVendor.js":567,"./Multitool.js":568,"./Newscaster.js":569,"./NinjaBloodScan.js":570,"./NinjaMindScan.js":571,"./NuclearBomb.js":572,"./OperatingComputer.js":573,"./Orbit.js":574,"./OreRedemption.js":575,"./PAI.js":576,"./PDA.js":593,"./PDAPainter.js":609,"./Pacman.js":610,"./PersonalCrafting.js":611,"./Photocopier.js":612,"./PodTracking.js":613,"./PoolController.js":614,"./PortablePump.js":615,"./PortableScrubber.js":616,"./PortableTurret.js":617,"./PowerMonitor.js":198,"./PrisonerImplantManager.js":618,"./QuestConsole.js":619,"./RCD.js":620,"./RPD.js":621,"./Radio.js":622,"./RequestConsole.js":623,"./RequestManager.js":624,"./RndConsole.js":67,"./RobotSelfDiagnosis.js":639,"./RoboticsControlConsole.js":640,"./Safe.js":641,"./SatelliteControl.js":642,"./SecureStorage.js":643,"./SecurityRecords.js":644,"./SeedExtractor.js":645,"./ShuttleConsole.js":646,"./ShuttleManipulator.js":647,"./Sleeper.js":648,"./SlotMachine.js":649,"./Smartfridge.js":650,"./Smes.js":651,"./SolarControl.js":652,"./SpawnersMenu.js":653,"./SpiderOS.js":654,"./StationAlertConsole.js":655,"./SuitStorage.js":656,"./SupermatterMonitor.js":657,"./SyndicateComputerSimple.js":658,"./SyndieCargoConsole.js":659,"./TTSSeedsExplorer.js":660,"./TachyonArray.js":661,"./Tank.js":662,"./TankDispenser.js":663,"./TcommsCore.js":664,"./TcommsRelay.js":665,"./Teleporter.js":666,"./ThiefKit.js":667,"./TransferValve.js":668,"./Uplink.js":669,"./VampireSpecMenu.js":670,"./VampireTrophiesStatus.js":671,"./Vending.js":672,"./VolumeMixer.js":673,"./VotePanel.js":674,"./Wires.js":675,"./Workshop.js":676};function r(e){var t=i(e);return n(t)}function i(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=i,e.exports=r,r.id=460},function(e,t,n){"use strict";t.__esModule=!0,t.AICard=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AICard=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;if(0===l.has_ai)return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createVNode)(1,"h3",null,"No AI detected.",16)})})})});var s=null;return s=l.integrity>=75?"green":l.integrity>=25?"yellow":"red",(0,o.createComponentVNode)(2,a.Window,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Stored AI",children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,display:"inline-block",children:(0,o.createVNode)(1,"h3",null,l.name,0)}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:s,value:l.integrity/100})})})}),(0,o.createComponentVNode)(2,i.Box,{color:"red",children:(0,o.createVNode)(1,"h2",null,1===l.flushing?"Wipe of AI in progress...":"",0)})]}),(0,o.createComponentVNode)(2,i.Section,{title:"Laws",children:!!l.has_laws&&(0,o.createComponentVNode)(2,i.Box,{children:l.laws.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{display:"inline-block",children:e},t)}))})||(0,o.createComponentVNode)(2,i.Box,{color:"red",children:(0,o.createVNode)(1,"h3",null,"No laws detected.",16)})}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Wireless Activity",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.wireless?"check":"times",content:l.wireless?"Enabled":"Disabled",color:l.wireless?"green":"red",onClick:function(){return c("wireless")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Subspace Transceiver",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.radio?"check":"times",content:l.radio?"Enabled":"Disabled",color:l.radio?"green":"red",onClick:function(){return c("radio")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Wipe",children:(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash-alt",confirmIcon:"trash-alt",disabled:l.flushing||0===l.integrity,confirmColor:"red",content:"Wipe AI",onClick:function(){return c("wipe")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AIFixer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AIFixer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;if(null===l.occupant)return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createVNode)(1,"h3",null,"No artificial intelligence detected.",16)})})})});var s=null;s=2!==l.stat&&null!==l.stat;var d=null;d=l.integrity>=75?"green":l.integrity>=25?"yellow":"red";var u=null;return u=l.integrity>=100,(0,o.createComponentVNode)(2,a.Window,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:(0,o.createVNode)(1,"h3",null,l.occupant,0)})}),(0,o.createComponentVNode)(2,i.Section,{title:"Information",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:d,value:l.integrity/100})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",color:s?"green":"red",children:s?"Functional":"Non-Functional"})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Laws",children:!!l.has_laws&&(0,o.createComponentVNode)(2,i.Box,{children:l.laws.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{display:"inline-block",children:e},t)}))})||(0,o.createComponentVNode)(2,i.Box,{color:"red",children:(0,o.createVNode)(1,"h3",null,"No laws detected.",16)})}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Wireless Activity",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.wireless?"times":"check",content:l.wireless?"Disabled":"Enabled",color:l.wireless?"red":"green",onClick:function(){return c("wireless")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Subspace Transceiver",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.radio?"times":"check",content:l.radio?"Disabled":"Enabled",color:l.radio?"red":"green",onClick:function(){return c("radio")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Start Repairs",children:(0,o.createComponentVNode)(2,i.Button,{icon:"wrench",disabled:u||l.active,content:u?"Already Repaired":"Repair",onClick:function(){return c("fix")}})})]}),(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3),c=n(192);t.APC=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,d)})})};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"}},s={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"}},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,d=n.data,u=d.locked&&!d.siliconUser,p=(d.normallyLocked,l[d.externalPower]||l[0]),m=l[d.chargingStatus]||l[0],h=d.powerChannels||[],f=s[d.malfStatus]||s[0],C=d.powerCellStatus/100;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.InterfaceLockNoticeBox),(0,o.createComponentVNode)(2,i.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Main Breaker",color:p.color,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:d.isOperating?"power-off":"times",content:d.isOperating?"On":"Off",selected:d.isOperating&&!u,color:d.isOperating?"":"bad",disabled:u,onClick:function(){return a("breaker")}}),children:["[ ",p.externalPowerText," ]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power Cell",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:"good",value:C})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Charge Mode",color:m.color,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:d.chargeMode?"sync":"times",content:d.chargeMode?"Auto":"Off",selected:d.chargeMode,disabled:u,onClick:function(){return a("charge")}}),children:["[ ",m.chargingText," ]"]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Power Channels",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[h.map((function(e){var t=e.topicParams;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.title,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{inline:!0,mx:2,color:e.status>=2?"good":"bad",children:e.status>=2?"On":"Off"}),(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Auto",selected:!u&&(1===e.status||3===e.status),disabled:u,onClick:function(){return a("channel",t.auto)}}),(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:"On",selected:!u&&2===e.status,disabled:u,onClick:function(){return a("channel",t.on)}}),(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Off",selected:!u&&0===e.status,disabled:u,onClick:function(){return a("channel",t.off)}})],4),children:[e.powerLoad," W"]},e.title)})),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Load",children:(0,o.createVNode)(1,"b",null,[d.totalLoad,(0,o.createTextVNode)(" W")],0)})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Misc",buttons:!!d.siliconUser&&(0,o.createFragment)([!!d.malfStatus&&(0,o.createComponentVNode)(2,i.Button,{icon:f.icon,content:f.content,color:"bad",onClick:function(){return a(f.action)}}),(0,o.createComponentVNode)(2,i.Button,{icon:"lightbulb-o",content:"Overload",onClick:function(){return a("overload")}})],0),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cover Lock",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:d.coverLocked?"lock":"unlock",content:d.coverLocked?"Engaged":"Disengaged",selected:d.coverLocked,disabled:u,onClick:function(){return a("cover")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Night Shift Lighting",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"lightbulb-o",content:d.nightshiftLights?"Enabled":"Disabled",selected:d.nightshiftLights,onClick:function(){return a("toggle_nightshift")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Emergency Light Fallback",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:d.coverLocked?"lock":"unlock",content:d.emergencyLights?"Engaged":"Disengaged",selected:d.emergencyLights,disabled:u,onClick:function(){return a("emergency_lighting")}})})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ATM=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ATM=function(e,t){var n,m=(0,r.useBackend)(t),h=(m.act,m.data),f=h.view_screen,C=h.authenticated_account,g=h.ticks_left_locked_down,N=h.linked_db;if(g>0)n=(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"bad",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"exclamation-triangle"}),"Maximum number of pin attempts exceeded! Access to this ATM has been temporarily disabled."]});else if(N)if(C)switch(f){case 1:n=(0,o.createComponentVNode)(2,l);break;case 2:n=(0,o.createComponentVNode)(2,s);break;case 3:n=(0,o.createComponentVNode)(2,p);break;default:n=(0,o.createComponentVNode)(2,d)}else n=(0,o.createComponentVNode)(2,u);else n=(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"bad",children:[(0,o.createComponentVNode)(2,i.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,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,i.Section,{children:n})]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.machine_id,s=c.held_card_name;return(0,o.createComponentVNode)(2,i.Section,{title:"Nanotrasen Automatic Teller Machine",children:[(0,o.createComponentVNode)(2,i.Box,{children:"For all your monetary need!"}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.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,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Card",children:(0,o.createComponentVNode)(2,i.Button,{content:s,icon:"eject",onClick:function(){return a("insert_card")}})})})]})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.security_level;return(0,o.createComponentVNode)(2,i.Section,{title:"Select a new security level for this account",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,i.Button,{content:"Zero",icon:"unlock",selected:0===c,onClick:function(){return a("change_security_level",{new_security_level:0})}})}),(0,o.createComponentVNode)(2,i.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,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,i.Button,{content:"One",icon:"unlock",selected:1===c,onClick:function(){return a("change_security_level",{new_security_level:1})}})}),(0,o.createComponentVNode)(2,i.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,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,i.Button,{content:"Two",selected:2===c,icon:"unlock",onClick:function(){return a("change_security_level",{new_security_level:2})}})}),(0,o.createComponentVNode)(2,i.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,i.Divider),(0,o.createComponentVNode)(2,m)]})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=(0,r.useLocalState)(t,"targetAccNumber",0),s=l[0],d=l[1],u=(0,r.useLocalState)(t,"fundsAmount",0),p=u[0],h=u[1],f=(0,r.useLocalState)(t,"purpose",0),C=f[0],g=f[1],N=c.money;return(0,o.createComponentVNode)(2,i.Section,{title:"Transfer Fund",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Account Balance",children:["$",N]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target account number",children:(0,o.createComponentVNode)(2,i.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Funds to transfer",children:(0,o.createComponentVNode)(2,i.Input,{onInput:function(e,t){return h(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transaction Purpose",children:(0,o.createComponentVNode)(2,i.Input,{fluid:!0,onInput:function(e,t){return g(t)}})})]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Button,{content:"Transfer",icon:"sign-out-alt",onClick:function(){return a("transfer",{target_acc_number:s,funds_amount:p,purpose:C})}}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,m)]})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=(0,r.useLocalState)(t,"fundsAmount",0),s=l[0],d=l[1],u=c.owner_name,p=c.money;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Welcome, "+u,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Logout",icon:"sign-out-alt",onClick:function(){return a("logout")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Account Balance",children:["$",p]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Withdrawal Amount",children:(0,o.createComponentVNode)(2,i.Input,{onInput:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Withdraw Fund",icon:"sign-out-alt",onClick:function(){return a("withdrawal",{funds_amount:s})}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Menu",children:[(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Change account security level",icon:"lock",onClick:function(){return a("view_screen",{view_screen:1})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Make transfer",icon:"exchange-alt",onClick:function(){return a("view_screen",{view_screen:2})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"View transaction log",icon:"list",onClick:function(){return a("view_screen",{view_screen:3})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Print balance statement",icon:"print",onClick:function(){return a("balance_statement")}})})]})],4)},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=(0,r.useLocalState)(t,"accountID",null),s=l[0],d=l[1],u=(0,r.useLocalState)(t,"accountPin",null),p=u[0],m=u[1];c.machine_id,c.held_card_name;return(0,o.createComponentVNode)(2,i.Section,{title:"Insert card or enter ID and pin to login",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Account ID",children:(0,o.createComponentVNode)(2,i.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pin",children:(0,o.createComponentVNode)(2,i.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return m(t)}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Login",icon:"sign-in-alt",onClick:function(){return a("attempt_auth",{account_num:s,account_pin:p})}})})]})})},p=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.transaction_log);return(0,o.createComponentVNode)(2,i.Section,{title:"Transactions",children:[(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Timestamp"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Target"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Reason"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Value"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Terminal"})]}),a.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{p:"1rem",children:[e.date," ",e.time]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.target_name}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.purpose}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:["$",e.amount]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.source_terminal})]},e)}))]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,m)]})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data;return(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"sign-out-alt",onClick:function(){return a("view_screen",{view_screen:0})}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AccountsUplinkTerminal=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(51),l=n(3),s=n(100),d=n(101);t.AccountsUplinkTerminal=function(e,t){var n,r=(0,i.useBackend)(t),a=(r.act,r.data),c=a.loginState,p=a.currentPage;return c.logged_in?(1===p?n=(0,o.createComponentVNode)(2,u):2===p?n=(0,o.createComponentVNode)(2,h):3===p&&(n=(0,o.createComponentVNode)(2,f)),(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,s.LoginInfo),n]})})):(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,d.LoginScreen)})})};var u=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data.accounts,s=(0,i.useLocalState)(t,"searchText",""),d=s[0],u=(s[1],(0,i.useLocalState)(t,"sortId","owner_name")),h=u[0],f=(u[1],(0,i.useLocalState)(t,"sortOrder",!0)),C=f[0];f[1];return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,a.Flex.Item,{flexGrow:"1",mt:"0.5rem",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",children:(0,o.createComponentVNode)(2,a.Table,{className:"AccountsUplinkTerminal__list",children:[(0,o.createComponentVNode)(2,a.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,p,{id:"owner_name",children:"Account Holder"}),(0,o.createComponentVNode)(2,p,{id:"account_number",children:"Account Number"}),(0,o.createComponentVNode)(2,p,{id:"suspended",children:"Account Status"})]}),l.filter((0,r.createSearch)(d,(function(e){return e.owner_name+"|"+e.account_number+"|"+e.suspended}))).sort((function(e,t){var n=C?1:-1;return e[h].localeCompare(t[h])*n})).map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{onClick:function(){return c("view_account_detail",{index:e.account_index})},children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user"})," ",e.owner_name]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:["#",e.account_number]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.suspended})]},e.id)}))]})})})]})},p=function(e,t){var n=(0,i.useLocalState)(t,"sortId","name"),r=n[0],c=n[1],l=(0,i.useLocalState)(t,"sortOrder",!0),s=l[0],d=l[1],u=e.id,p=e.children;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{color:r!==u&&"transparent",width:"100%",onClick:function(){r===u?d(!s):(c(u),d(!0))},children:[p,r===u&&(0,o.createComponentVNode)(2,a.Icon,{name:s?"sort-up":"sort-down",ml:"0.25rem;"})]})})},m=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data.is_printing,s=(0,i.useLocalState)(t,"searchText",""),d=(s[0],s[1]);return(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,c.FlexItem,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"New Account",icon:"plus",onClick:function(){return r("create_new_account")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:"Print Account List",disabled:l,ml:"0.25rem",onClick:function(){return r("print_records")}})]}),(0,o.createComponentVNode)(2,c.FlexItem,{grow:"1",ml:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search by account holder, number, status",width:"100%",onInput:function(e,t){return d(t)}})})]})},h=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.is_printing,s=c.account_number,d=c.owner_name,u=c.money,p=c.suspended,m=c.transactions;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"#"+s+" / "+d,mt:1,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:"Print Account Details",disabled:l,onClick:function(){return r("print_account_details")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("back")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Number",children:["#",s]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Holder",children:d}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Balance",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Status",color:p?"red":"green",children:[p?"Suspended":"Active",(0,o.createComponentVNode)(2,a.Button,{ml:1,content:p?"Unsuspend":"Suspend",icon:p?"unlock":"lock",onClick:function(){return r("toggle_suspension")}})]})]})}),(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"})]}),m.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{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)}))]})})],4)},f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=(n.data,(0,i.useLocalState)(t,"accName","")),l=c[0],s=c[1],d=(0,i.useLocalState)(t,"accDeposit",""),u=d[0],p=d[1];return(0,o.createComponentVNode)(2,a.Section,{title:"Create Account",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("back")}}),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Holder",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Name Here",onChange:function(e,t){return s(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Initial Deposit",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"0",onChange:function(e,t){return p(t)}})})]}),(0,o.createComponentVNode)(2,a.Button,{mt:1,fluid:!0,content:"Create Account",onClick:function(){return r("finalise_create_account",{holder_name:l,starting_funds:u})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AgentCardSLSlots=t.AgentCardAppearances=t.AgentCardInfo=t.AgentCard=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AgentCard=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),d=n[0],u=n[1];return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"syndicate",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Box,{fillPositionedParent:!0,overflow:"hidden",children:[(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===d,onClick:function(){return u(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"table"})," Card Info"]},"Card Info"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===d,onClick:function(){return u(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"id-card"})," Appearance"]},"Appearance"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===d,onClick:function(){return u(2)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"arrow-down"})," Save/Load Card Info"]},"Save/Load Card Info")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,c);case 1:return(0,o.createComponentVNode)(2,l);case 2:return(0,o.createComponentVNode)(2,s);default:return(0,o.createComponentVNode)(2,c)}}(d)]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.registered_name,s=c.sex,d=c.age,u=c.assignment,p=c.associated_account_number,m=c.blood_type,h=c.dna_hash,f=c.fingerprint_hash,C=c.photo,g=c.ai_tracking;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Card Info",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,i.Button,{content:l||"[UNSET]",onClick:function(){return a("change_name")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Sex",children:(0,o.createComponentVNode)(2,i.Button,{iconRight:!1,content:s||"[UNSET]",onClick:function(){return a("change_sex")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Age",children:(0,o.createComponentVNode)(2,i.Button,{content:d||"[UNSET]",onClick:function(){return a("change_age")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Rank",children:(0,o.createComponentVNode)(2,i.Button,{content:u||"[UNSET]",onClick:function(){return a("change_occupation")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fingerprints",children:(0,o.createComponentVNode)(2,i.Button,{content:f||"[UNSET]",onClick:function(){return a("change_fingerprints")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood Type",children:(0,o.createComponentVNode)(2,i.Button,{content:m||"[UNSET]",onClick:function(){return a("change_blood_type")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"DNA Hash",children:(0,o.createComponentVNode)(2,i.Button,{content:h||"[UNSET]",onClick:function(){return a("change_dna_hash")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Money Account",children:(0,o.createComponentVNode)(2,i.Button,{content:p||"[UNSET]",onClick:function(){return a("change_money_account")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Photo",children:(0,o.createComponentVNode)(2,i.Button,{content:C?"Update":"[UNSET]",onClick:function(){return a("change_photo")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Card Settings",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Card Info",children:(0,o.createComponentVNode)(2,i.Button,{content:"Delete Card Info",onClick:function(){return a("delete_info")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Access",children:(0,o.createComponentVNode)(2,i.Button,{content:"Reset Access",onClick:function(){return a("clear_access")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"AI Tracking",children:(0,o.createComponentVNode)(2,i.Button,{content:g?"Untrackable":"Trackable",onClick:function(){return a("change_ai_tracking")}})})]})})],4)};t.AgentCardInfo=c;var l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.appearances;return(0,o.createComponentVNode)(2,i.Section,{title:"Card Appearance",children:c.map((function(e){return(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jped;base64,"+e.image,style:{"vertical-align":"middle",width:"64px",margin:"0px","margin-left":"0px"},onclick:function(){return a("change_appearance_new",{new_appearance:e.name})}},e.name)}))})};t.AgentCardAppearances=l;var s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.saved_info;return(0,o.createComponentVNode)(2,i.Section,{title:"Save/Load Manager",style:{"line-height":"25px"},children:(0,o.createComponentVNode)(2,i.LabeledList,{children:c.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.registered_name?e.registered_name+", "+e.assignment:"Slot "+e.id,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Clear",onClick:function(){return a("clear_slot",{slot:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Save",onClick:function(){return a("save_slot",{slot:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Load",disabled:!e.registered_name,onClick:function(){return a("load_slot",{slot:e.id})}})],4)},e.id)}))})})};t.AgentCardSLSlots=s},function(e,t,n){"use strict";t.__esModule=!0,t.AiAirlock=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c={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,s=n.data,d=c[s.power.main]||c[0],u=c[s.power.backup]||c[0],p=c[s.shock]||c[0];return(0,o.createComponentVNode)(2,a.Window,{width:500,height:390,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Main",color:d.color,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"lightbulb-o",disabled:!s.power.main,content:"Disrupt",onClick:function(){return l("disrupt-main")}}),children:[s.power.main?"Online":"Offline"," ",s.wires.main_power?s.power.main_timeleft>0&&"["+s.power.main_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Backup",color:u.color,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"lightbulb-o",disabled:!s.power.backup,content:"Disrupt",onClick:function(){return l("disrupt-backup")}}),children:[s.power.backup?"Online":"Offline"," ",s.wires.backup_power?s.power.backup_timeleft>0&&"["+s.power.backup_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Electrify",color:p.color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"wrench",disabled:!(s.wires.shock&&2!==s.shock),content:"Restore",onClick:function(){return l("shock-restore")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"bolt",disabled:!s.wires.shock,content:"Temporary",onClick:function(){return l("shock-temp")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"bolt",disabled:!s.wires.shock||0===s.shock,content:"Permanent",onClick:function(){return l("shock-perm")}})],4),children:[2===s.shock?"Safe":"Electrified"," ",(s.wires.shock?s.shock_timeleft>0&&"["+s.shock_timeleft+"s]":"[Wires have been cut!]")||-1===s.shock_timeleft&&"[Permanent]"]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Access and Door Control",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID Scan",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.id_scanner?"power-off":"times",content:s.id_scanner?"Enabled":"Disabled",selected:s.id_scanner,disabled:!s.wires.id_scanner,onClick:function(){return l("idscan-toggle")}}),children:!s.wires.id_scanner&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Emergency Access",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.emergency?"power-off":"times",content:s.emergency?"Enabled":"Disabled",selected:s.emergency,onClick:function(){return l("emergency-toggle")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Bolts",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.locked?"lock":"unlock",content:s.locked?"Lowered":"Raised",selected:s.locked,disabled:!s.wires.bolts,onClick:function(){return l("bolt-toggle")}}),children:!s.wires.bolts&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Bolt Lights",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.lights?"power-off":"times",content:s.lights?"Enabled":"Disabled",selected:s.lights,disabled:!s.wires.lights,onClick:function(){return l("light-toggle")}}),children:!s.wires.lights&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Force Sensors",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.safe?"power-off":"times",content:s.safe?"Enabled":"Disabled",selected:s.safe,disabled:!s.wires.safe,onClick:function(){return l("safe-toggle")}}),children:!s.wires.safe&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Timing Safety",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.speed?"power-off":"times",content:s.speed?"Enabled":"Disabled",selected:s.speed,disabled:!s.wires.timing,onClick:function(){return l("speed-toggle")}}),children:!s.wires.timing&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,i.LabeledList.Divider),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Door Control",color:"bad",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s.opened?"sign-out-alt":"sign-in-alt",content:s.opened?"Open":"Closed",selected:s.opened,disabled:s.locked||s.welded,onClick:function(){return l("open-close")}}),children:!(!s.locked&&!s.welded)&&(0,o.createVNode)(1,"span",null,[(0,o.createTextVNode)("[Door is "),s.locked?"bolted":"",s.locked&&s.welded?" and ":"",s.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),i=n(2),a=n(3),c=n(192);t.AirAlarm=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data.locked);return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,c.InterfaceLockNoticeBox),!i&&(0,o.createFragment)([(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,u)],4)]})})};var l=function(e){return 0===e?"green":1===e?"orange":"red"},s=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,s=a.data,d=s.air,u=s.mode,p=s.atmos_alarm,m=s.locked,h=s.alarmActivated,f=s.rcon,C=s.target_temp;return n=0===d.danger.overall?0===p?"Optimal":"Caution: Atmos alert in area":1===d.danger.overall?"Caution":"DANGER: Internals Required",(0,o.createComponentVNode)(2,i.Section,{title:"Air Status",children:d?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,i.Box,{color:l(d.danger.pressure),children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:d.pressure})," kPa",!m&&(0,o.createFragment)([(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,i.Button,{content:3===u?"Deactivate Panic Siphon":"Activate Panic Siphon",selected:3===u,icon:"exclamation-triangle",onClick:function(){return c("mode",{mode:3===u?1:3})}})],4)]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.oxygen/100,fractionDigits:"1",color:l(d.danger.oxygen)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nitrogen",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.nitrogen/100,fractionDigits:"1",color:l(d.danger.nitrogen)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Carbon Dioxide",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.co2/100,fractionDigits:"1",color:l(d.danger.co2)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Toxins",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.plasma/100,fractionDigits:"1",color:l(d.danger.plasma)})}),d.contents.other>.1&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Other",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.contents.other/100,fractionDigits:"1",color:l(d.danger.other)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,i.Box,{color:l(d.danger.temperature),children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:d.temperature})," K / ",(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:d.temperature_c})," C\xa0",(0,o.createComponentVNode)(2,i.Button,{icon:"thermometer-full",content:C+" C",onClick:function(){return c("temperature")}}),(0,o.createComponentVNode)(2,i.Button,{content:d.thermostat_state?"On":"Off",selected:d.thermostat_state,icon:"power-off",onClick:function(){return c("thermostat_state")}})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Local Status",children:(0,o.createComponentVNode)(2,i.Box,{color:l(d.danger.overall),children:[n,!m&&(0,o.createFragment)([(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,i.Button,{content:h?"Reset Alarm":"Activate Alarm",selected:h,onClick:function(){return c(h?"atmos_reset":"atmos_alarm")}})],4)]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Remote Control Settings",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Off",selected:1===f,onClick:function(){return c("set_rcon",{rcon:1})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Auto",selected:2===f,onClick:function(){return c("set_rcon",{rcon:2})}}),(0,o.createComponentVNode)(2,i.Button,{content:"On",selected:3===f,onClick:function(){return c("set_rcon",{rcon:3})}})]})]}):(0,o.createComponentVNode)(2,i.Box,{children:"Unable to acquire air sample!"})})},d=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),a=n[0],c=n[1];return(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===a,onClick:function(){return c(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"sign-out-alt"})," Vent Control"]},"Vents"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===a,onClick:function(){return c(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"sign-in-alt"})," Scrubber Control"]},"Scrubbers"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===a,onClick:function(){return c(2)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"cog"})," Mode"]},"Mode"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:3===a,onClick:function(){return c(3)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"tachometer-alt"})," Thresholds"]},"Thresholds")]})},u=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),i=n[0];n[1];switch(i){case 0:return(0,o.createComponentVNode)(2,p);case 1:return(0,o.createComponentVNode)(2,m);case 2:return(0,o.createComponentVNode)(2,h);case 3:return(0,o.createComponentVNode)(2,f);default:return"WE SHOULDN'T BE HERE!"}},p=function(e,t){var n=(0,r.useBackend)(t),a=n.act;return n.data.vents.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,i.Button,{content:e.power?"On":"Off",selected:e.power,icon:"power-off",onClick:function(){return a("command",{cmd:"power",val:1===e.power?0:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"release"===e.direction?"Blowing":"Siphoning",icon:"release"===e.direction?"sign-out-alt":"sign-in-alt",onClick:function(){return a("command",{cmd:"direction",val:"release"===e.direction?0:1,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure Checks",children:[(0,o.createComponentVNode)(2,i.Button,{content:"External",selected:1===e.checks,onClick:function(){return a("command",{cmd:"checks",val:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Internal",selected:2===e.checks,onClick:function(){return a("command",{cmd:"checks",val:2,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"External Pressure Target",children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:e.external})," kPa\xa0",(0,o.createComponentVNode)(2,i.Button,{content:"Set",icon:"cog",onClick:function(){return a("command",{cmd:"set_external_pressure",id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Reset",icon:"redo-alt",onClick:function(){return a("command",{cmd:"set_external_pressure",val:101.325,id_tag:e.id_tag})}})]})]})},e.name)}))},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act;return n.data.scrubbers.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,i.Button,{content:e.power?"On":"Off",selected:e.power,icon:"power-off",onClick:function(){return a("command",{cmd:"power",val:1===e.power?0:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:0===e.scrubbing?"Siphoning":"Scrubbing",icon:0===e.scrubbing?"sign-in-alt":"filter",onClick:function(){return a("command",{cmd:"scrubbing",val:0===e.scrubbing?1:0,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,i.Button,{content:e.widenet?"Extended":"Normal",selected:e.widenet,icon:"expand-arrows-alt",onClick:function(){return a("command",{cmd:"widenet",val:0===e.widenet?1:0,id_tag:e.id_tag})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Filtering",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Carbon Dioxide",selected:e.filter_co2,onClick:function(){return a("command",{cmd:"co2_scrub",val:0===e.filter_co2?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Plasma",selected:e.filter_toxins,onClick:function(){return a("command",{cmd:"tox_scrub",val:0===e.filter_toxins?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Nitrous Oxide",selected:e.filter_n2o,onClick:function(){return a("command",{cmd:"n2o_scrub",val:0===e.filter_n2o?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Oxygen",selected:e.filter_o2,onClick:function(){return a("command",{cmd:"o2_scrub",val:0===e.filter_o2?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Nitrogen",selected:e.filter_n2,onClick:function(){return a("command",{cmd:"n2_scrub",val:0===e.filter_n2?1:0,id_tag:e.id_tag})}})]})]})},e.name)}))},h=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.modes,s=c.presets,d=c.emagged,u=c.mode,p=c.preset;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"System Mode",children:(0,o.createComponentVNode)(2,i.Table,{children:l.map((function(e){return(!e.emagonly||e.emagonly&&!!d)&&(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"right",width:1,children:(0,o.createComponentVNode)(2,i.Button,{content:e.name,icon:"cog",selected:e.id===u,onClick:function(){return a("mode",{mode:e.id})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.desc})]},e.name)}))})}),(0,o.createComponentVNode)(2,i.Section,{title:"System Presets",children:[(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:"After making a selection, the system will automatically cycle in order to remove contaminants."}),(0,o.createComponentVNode)(2,i.Table,{mt:1,children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"right",width:1,children:(0,o.createComponentVNode)(2,i.Button,{content:e.name,icon:"cog",selected:e.id===p,onClick:function(){return a("preset",{preset:e.id})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.desc})]},e.name)}))})]})],4)},f=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.thresholds;return(0,o.createComponentVNode)(2,i.Section,{title:"Alarm Thresholds",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{width:"20%",children:"Value"}),(0,o.createComponentVNode)(2,i.Table.Cell,{color:"red",width:"20%",children:"Danger Min"}),(0,o.createComponentVNode)(2,i.Table.Cell,{color:"orange",width:"20%",children:"Warning Min"}),(0,o.createComponentVNode)(2,i.Table.Cell,{color:"orange",width:"20%",children:"Warning Max"}),(0,o.createComponentVNode)(2,i.Table.Cell,{color:"red",width:"20%",children:"Danger Max"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),e.settings.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:-1===e.selected?"Off":e.selected,onClick:function(){return a("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),i=n(2),a=n(3);t.AirlockAccessController=function(e,t){var n,c,l=(0,r.useBackend)(t),s=l.act,d=l.data,u=d.exterior_status,p=d.interior_status,m=d.processing;return n="open"===d.exterior_status.state?(0,o.createComponentVNode)(2,i.Button,{content:"Lock Exterior Door",icon:"exclamation-triangle",disabled:m,onClick:function(){return s("force_ext")}}):(0,o.createComponentVNode)(2,i.Button,{content:"Cycle to Exterior",icon:"arrow-circle-left",disabled:m,onClick:function(){return s("cycle_ext_door")}}),c="open"===d.interior_status.state?(0,o.createComponentVNode)(2,i.Button,{content:"Lock Interior Door",icon:"exclamation-triangle",disabled:m,color:"open"===p?"red":m?"yellow":null,onClick:function(){return s("force_int")}}):(0,o.createComponentVNode)(2,i.Button,{content:"Cycle to Interior",icon:"arrow-circle-right",disabled:m,onClick:function(){return s("cycle_int_door")}}),(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Information",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"External Door Status",children:"closed"===u.state?"Locked":"Open"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Internal Door Status",children:"closed"===p.state?"Locked":"Open"})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,i.Box,{children:n}),(0,o.createComponentVNode)(2,i.Box,{children:c})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirlockElectronics=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(102);t.AirlockElectronics=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,s)]})};var l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.unrestricted_dir;return(0,o.createComponentVNode)(2,i.Section,{title:"Access Control",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{bold:!0,mb:1,children:"Unrestricted Access From:"}),(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"arrow-down",content:"North",selected:"north"===c?"selected":null,onClick:function(){return a("unrestricted_access",{unres_dir:"North"})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"arrow-up",content:"South",selected:"south"===c?"selected":null,onClick:function(){return a("unrestricted_access",{unres_dir:"South"})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"arrow-left",content:"East",selected:"east"===c?"selected":null,onClick:function(){return a("unrestricted_access",{unres_dir:"East"})}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"arrow-right",content:"West",selected:"west"===c?"selected":null,onClick:function(){return a("unrestricted_access",{unres_dir:"West"})}})})]})]})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data,s=l.selected_accesses,d=l.one_access,u=l.regions;return(0,o.createComponentVNode)(2,c.AccessList,{usedByRcd:1,rcdButtons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:d,content:"One",onClick:function(){return a("set_one_access",{access:"one"})}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:!d,content:"All",onClick:function(){return a("set_one_access",{access:"all"})}})],4),accesses:u,selectedList:s,accessMod:function(e){return a("set",{access:e})},grantAll:function(){return a("grant_all")},denyAll:function(){return a("clear_all")},grantDep:function(e){return a("grant_region",{region:e})},denyDep:function(e){return a("deny_region",{region:e})}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AppearanceChanger=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AppearanceChanger=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.change_race,u=s.species,p=s.specimen,m=s.change_gender,h=s.gender,f=s.has_gender,C=s.change_eye_color,g=s.change_skin_tone,N=s.change_skin_color,b=s.change_head_accessory_color,V=s.change_hair_color,v=s.change_secondary_hair_color,x=s.change_facial_hair_color,y=s.change_secondary_facial_hair_color,k=s.change_head_marking_color,w=s.change_body_marking_color,_=s.change_tail_marking_color,B=s.change_head_accessory,S=s.head_accessory_styles,L=s.head_accessory_style,A=s.change_hair,I=s.hair_styles,E=s.hair_style,D=s.change_hair_gradient,T=s.change_facial_hair,F=s.facial_hair_styles,M=s.facial_hair_style,P=s.change_head_markings,O=s.head_marking_styles,R=s.head_marking_style,j=s.change_body_markings,U=s.body_marking_styles,z=s.body_marking_style,W=s.change_tail_markings,H=s.tail_marking_styles,K=s.tail_marking_style,q=s.change_body_accessory,Y=s.body_accessory_styles,G=s.body_accessory_style,X=s.change_alt_head,J=s.alt_head_styles,$=s.alt_head_style,Z=!1;return(C||g||N||b||V||v||x||y||k||w||_)&&(Z=!0),(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!d&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Species",children:u.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.specimen,selected:e.specimen===p,onClick:function(){return l("race",{race:e.specimen})}},e.specimen)}))}),!!m&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Gender",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Male",selected:"male"===h,onClick:function(){return l("gender",{gender:"male"})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Female",selected:"female"===h,onClick:function(){return l("gender",{gender:"female"})}}),!f&&(0,o.createComponentVNode)(2,i.Button,{content:"Genderless",selected:"plural"===h,onClick:function(){return l("gender",{gender:"plural"})}})]}),!!Z&&(0,o.createComponentVNode)(2,c),!!B&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Head accessory",children:S.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.headaccessorystyle,selected:e.headaccessorystyle===L,onClick:function(){return l("head_accessory",{head_accessory:e.headaccessorystyle})}},e.headaccessorystyle)}))}),!!A&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hair",children:I.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.hairstyle,selected:e.hairstyle===E,onClick:function(){return l("hair",{hair:e.hairstyle})}},e.hairstyle)}))}),!!D&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hair Gradient",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Change Style",onClick:function(){return l("hair_gradient")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Change Offset",onClick:function(){return l("hair_gradient_offset")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Change Color",onClick:function(){return l("hair_gradient_colour")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Change Alpha",onClick:function(){return l("hair_gradient_alpha")}})]}),!!T&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Facial hair",children:F.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.facialhairstyle,selected:e.facialhairstyle===M,onClick:function(){return l("facial_hair",{facial_hair:e.facialhairstyle})}},e.facialhairstyle)}))}),!!P&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Head markings",children:O.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.headmarkingstyle,selected:e.headmarkingstyle===R,onClick:function(){return l("head_marking",{head_marking:e.headmarkingstyle})}},e.headmarkingstyle)}))}),!!j&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Body markings",children:U.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.bodymarkingstyle,selected:e.bodymarkingstyle===z,onClick:function(){return l("body_marking",{body_marking:e.bodymarkingstyle})}},e.bodymarkingstyle)}))}),!!W&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tail markings",children:H.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.tailmarkingstyle,selected:e.tailmarkingstyle===K,onClick:function(){return l("tail_marking",{tail_marking:e.tailmarkingstyle})}},e.tailmarkingstyle)}))}),!!q&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Body accessory",children:Y.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.bodyaccessorystyle,selected:e.bodyaccessorystyle===G,onClick:function(){return l("body_accessory",{body_accessory:e.bodyaccessorystyle})}},e.bodyaccessorystyle)}))}),!!X&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alternate head",children:J.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.altheadstyle,selected:e.altheadstyle===$,onClick:function(){return l("alt_head",{alt_head:e.altheadstyle})}},e.altheadstyle)}))})]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data;return(0,o.createComponentVNode)(2,i.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!!c[e.key]&&(0,o.createComponentVNode)(2,i.Button,{content:e.text,onClick:function(){return a(e.action)}},e.key)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosAlertConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AtmosAlertConsole=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.priority||[],d=l.minor||[];return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Alarms",children:(0,o.createVNode)(1,"ul",null,[0===s.length&&(0,o.createVNode)(1,"li","color-good","No Priority Alerts",16),s.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:e,color:"bad",onClick:function(){return c("clear",{zone:e})}}),2,null,e)})),0===d.length&&(0,o.createVNode)(1,"li","color-good","No Minor Alerts",16),d.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:e,color:"average",onClick:function(){return c("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),i=n(2),a=n(80),c=n(3);t.AtmosControl=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data,(0,r.useLocalState)(t,"tabIndex",0)),d=a[0],u=a[1];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.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===d,onClick:function(){return u(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===d,onClick:function(){return u(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,l);case 1:return(0,o.createComponentVNode)(2,s);default:return"WE SHOULDN'T BE HERE!"}}(d)]})})})};var l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.alarms;return(0,o.createComponentVNode)(2,i.Box,{children:(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:"Access"})]}),l.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,a.TableCell,{children:e.name}),(0,o.createComponentVNode)(2,a.TableCell,{children:(t=e.danger,0===t?(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Good"}):1===t?(0,o.createComponentVNode)(2,i.Box,{color:"orange",bold:!0,children:"Warning"}):2===t?(0,o.createComponentVNode)(2,i.Box,{color:"red",bold:!0,children:"DANGER"}):void 0)}),(0,o.createComponentVNode)(2,a.TableCell,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"cog",content:"Access",onClick:function(){return c("open_alarm",{aref:e.ref})}})})]},e.name);var t}))]})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=(0,r.useLocalState)(t,"zoom",1),s=l[0],d=l[1],u=c.alarms,p=c.stationLevel;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 d(e)},children:u.filter((function(e){return e.z===p})).map((function(e){return(0,o.createComponentVNode)(2,i.NanoMap.Marker,{x:e.x,y:e.y,zoom:s,icon:"circle",tooltip:e.name,color:(t=e.danger,0===t?"green":1===t?"orange":2===t?"red":void 0),onClick:function(){return a("open_alarm",{aref:e.ref})}},e.ref);var t}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosFilter=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AtmosFilter=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.on,d=l.pressure,u=l.max_pressure,p=l.filter_type,m=l.filter_type_list;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:s?"On":"Off",color:s?null:"red",selected:s,onClick:function(){return c("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",textAlign:"center",disabled:0===d,width:2.2,onClick:function(){return c("min_pressure")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,unit:"kPa",width:6.1,lineHeight:1.5,step:10,minValue:0,maxValue:u,value:d,onDrag:function(e,t){return c("custom_pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",textAlign:"center",disabled:d===u,width:2.2,onClick:function(){return c("max_pressure")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Filter",children:m.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{selected:e.gas_type===p,content:e.label,onClick:function(){return c("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),i=n(2),a=n(3);t.AtmosMixer=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.on,u=s.pressure,p=s.max_pressure,m=s.node1_concentration,h=s.node2_concentration;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:d?"On":"Off",color:d?null:"red",selected:d,onClick:function(){return l("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",textAlign:"center",disabled:0===u,width:2.2,onClick:function(){return l("min_pressure")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,unit:"kPa",width:6.1,lineHeight:1.5,step:10,minValue:0,maxValue:p,value:u,onDrag:function(e,t){return l("custom_pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",textAlign:"center",disabled:u===p,width:2.2,onClick:function(){return l("max_pressure")}})]}),(0,o.createComponentVNode)(2,c,{node_name:"Node 1",node_ref:m}),(0,o.createComponentVNode)(2,c,{node_name:"Node 2",node_ref:h})]})})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=(n.data,e.node_name),l=e.node_ref;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:c,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",textAlign:"center",width:2.2,disabled:0===l,onClick:function(){return a("set_node",{node_name:c,concentration:(l-10)/100})}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,unit:"%",width:6.1,lineHeight:1.5,stepPixelSize:10,minValue:0,maxValue:100,value:l,onChange:function(e,t){return a("set_node",{node_name:c,concentration:t/100})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",textAlign:"center",width:2.2,disabled:100===l,onClick:function(){return a("set_node",{node_name:c,concentration:(l+10)/100})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosPump=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.AtmosPump=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.on,d=l.rate,u=l.max_rate,p=l.gas_unit,m=l.step;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",content:s?"On":"Off",color:s?null:"red",selected:s,onClick:function(){return c("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",textAlign:"center",disabled:0===d,width:2.2,onClick:function(){return c("min_rate")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,unit:p,width:6.1,lineHeight:1.5,step:m,minValue:0,maxValue:u,value:d,onDrag:function(e,t){return c("custom_rate",{rate:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",textAlign:"center",disabled:d===u,width:2.2,onClick:function(){return c("max_rate")}})]})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Autolathe=void 0;var o=n(0),r=n(43),i=n(24),a=n(1),c=n(2),l=n(3),s=n(18),d=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,a.useBackend)(t),u=n.act,p=n.data,m=p.total_amount,h=(p.max_amount,p.metal_amount),f=p.glass_amount,C=p.busyname,g=(p.busyamt,p.showhacked,p.buildQueue),N=p.buildQueueLen,b=p.recipes,V=p.categories,v=(0,a.useSharedState)(t,"category",0),x=v[0],y=v[1];0===x&&(x="Tools");var k=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),w=f.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),_=m.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),B=(0,a.useSharedState)(t,"search_text",""),S=B[0],L=B[1],A=(0,s.createSearch)(S,(function(e){return e.name})),I="";N>0&&(I=g.map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,c.Button,{icon:"times",content:g[t][0],onClick:function(){return u("remove_from_queue",{remove_from_queue:g.indexOf(e)+1})}},e)},t)})));var E=(0,r.flow)([(0,i.filter)((function(e){return(e.category.indexOf(x)>-1||S)&&(p.showhacked||!e.hacked)})),S&&(0,i.filter)(A),(0,i.sortBy)((function(e){return e.name.toLowerCase()}))])(b),D="Build";S?D="Results for: '"+S+"':":x&&(D="Build ("+x+")");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,c.Section,{title:D,buttons:(0,o.createComponentVNode)(2,c.Dropdown,{width:"190px",options:V,selected:x,onSelected:function(e){return y(e)}}),children:[(0,o.createComponentVNode)(2,c.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return L(t)},mb:1}),E.map((function(e){return(0,o.createComponentVNode)(2,c.Flex,{justify:"space-between",align:"center",children:[(0,o.createComponentVNode)(2,c.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,c.Button,{icon:"hammer",selected:p.busyname===e.name&&1===p.busyamt,disabled:!d(e,p.metal_amount,p.glass_amount,1),onClick:function(){return u("make",{make:e.uid,multiplier:1})},children:(0,s.toTitleCase)(e.name)}),e.max_multiplier>=10&&(0,o.createComponentVNode)(2,c.Button,{icon:"hammer",selected:p.busyname===e.name&&10===p.busyamt,disabled:!d(e,p.metal_amount,p.glass_amount,10),onClick:function(){return u("make",{make:e.uid,multiplier:10})},children:"10x"}),e.max_multiplier>=25&&(0,o.createComponentVNode)(2,c.Button,{icon:"hammer",selected:p.busyname===e.name&&25===p.busyamt,disabled:!d(e,p.metal_amount,p.glass_amount,25),onClick:function(){return u("make",{make:e.uid,multiplier:25})},children:"25x"}),e.max_multiplier>25&&(0,o.createComponentVNode)(2,c.Button,{icon:"hammer",selected:p.busyname===e.name&&p.busyamt===e.max_multiplier,disabled:!d(e,p.metal_amount,p.glass_amount,e.max_multiplier),onClick:function(){return u("make",{make:e.uid,multiplier:e.max_multiplier})},children:[e.max_multiplier,"x"]})]}),(0,o.createComponentVNode)(2,c.Flex.Item,{children:e.requirements&&Object.keys(e.requirements).map((function(t){return(0,s.toTitleCase)(t)+": "+e.requirements[t]})).join(", ")||(0,o.createComponentVNode)(2,c.Box,{children:"No resources required."})})]},e.ref)}))]}),2,{style:{float:"left",width:"68%"}}),(0,o.createVNode)(1,"div",null,[(0,o.createComponentVNode)(2,c.Section,{title:"Materials",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Metal",children:k}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Glass",children:w}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Total",children:_}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Storage",children:[p.fill_percent,"% Full"]})]})}),(0,o.createComponentVNode)(2,c.Section,{title:"Building",children:(0,o.createComponentVNode)(2,c.Box,{color:C?"green":"",children:C||"Nothing"})}),(0,o.createComponentVNode)(2,c.Section,{title:"Build Queue",children:[I,(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,c.Button,{icon:"times",content:"Clear All",disabled:!p.buildQueueLen,onClick:function(){return u("clear_queue")}}),2,{align:"right"})]})],4,{style:{float:"right",width:"30%"}})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Biogenerator=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.Biogenerator=function(){return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{display:"flex",className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,d)]})})};var c=function(e,t){if((0,r.useBackend)(t).data.processing)return(0,o.createComponentVNode)(2,i.Dimmer,{children:(0,o.createComponentVNode)(2,i.Flex,{mb:"30px",children:(0,o.createComponentVNode)(2,i.Flex.Item,{bold:!0,color:"silver",textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"spinner",spin:!0,size:4,mb:"15px"}),(0,o.createVNode)(1,"br"),"The biogenerator is processing..."]})})})},l=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data),c=a.biomass,l=a.container,s=a.container_curr_reagents,d=a.container_max_reagents;return(0,o.createComponentVNode)(2,i.Section,{title:"Storage",children:[(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mr:"20px",color:"silver",children:"Biomass:"}),(0,o.createComponentVNode)(2,i.Flex.Item,{mr:"5px",children:c}),(0,o.createComponentVNode)(2,i.Icon,{name:"leaf",size:1.2,color:"#3d8c40"})]}),(0,o.createComponentVNode)(2,i.Flex,{height:"21px",mt:"8px",align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mr:"10px",color:"silver",children:"Container:"}),l?(0,o.createComponentVNode)(2,i.ProgressBar,{value:s,maxValue:d,children:(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",children:s+" / "+d+" units"})}):(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"None"})})]})]})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.has_plants,s=c.container;return(0,o.createComponentVNode)(2,i.Section,{title:"Controls",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"30%",mr:"3px",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"power-off",disabled:!l,tooltip:l?"":"There are no plants in the biogenerator.",tooltipPosition:"top-right",content:"Activate",onClick:function(){return a("activate")}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"40%",mr:"3px",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"flask",disabled:!s,tooltip:s?"":"The biogenerator does not have a container.",tooltipPosition:"top",content:"Detach Container",onClick:function(){return a("detach_container")}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"30%",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"eject",disabled:!l,tooltip:l?"":"There are no stored plants to eject.",tooltipPosition:"top-left",content:"Eject Plants",onClick:function(){return a("eject_plants")}})})]})})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.biomass,s=c.product_list,d=c.container,u=(0,r.useSharedState)(t,"vendAmount",1),p=u[0],m=u[1],h=Object.entries(s).map((function(e,t){var n=Object.entries(e[1]).map((function(e){return e[1]}));return(0,o.createComponentVNode)(2,i.Collapsible,{title:e[0],open:!0,children:n.map((function(e){return(0,o.createComponentVNode)(2,i.Flex,{py:"2px",className:"candystripe",align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"40%",ml:"2px",children:e.name}),(0,o.createComponentVNode)(2,i.Flex.Item,{textAlign:"right",width:"20%",children:[e.cost*p,(0,o.createComponentVNode)(2,i.Icon,{ml:"5px",name:"leaf",size:1.2,color:"#3d8c40"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{textAlign:"right",width:"40%",children:e.needs_container&&!d?(0,o.createComponentVNode)(2,i.Button,{content:"No container",disabled:!0,icon:"flask",tooltip:"\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043e\u043f\u0446\u0438\u0438",tooltipPosition:"top-left"}):(0,o.createComponentVNode)(2,i.Button,{content:"Vend",disabled:l0?Math.floor(c/u):0,f=d?"@?%%!\u2116@"+u:u,C=c>=u,g=p-p%5+(p%5>0?5:0);return(0,o.createComponentVNode)(2,i.Section,{title:"\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0420\u0430\u0437\u043b\u043e\u043c\u0430",children:[(0,o.createComponentVNode)(2,i.Box,{color:"silver",bold:!0,children:n}),(0,o.createComponentVNode)(2,i.ProgressBar,{color:0===m?"bad":m<100?"average":"good",value:a,maxValue:r,mt:1,mb:2,children:[m<=100?m:100," %"]}),(0,o.createComponentVNode)(2,i.Box,{children:["\u0414\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0437\u043e\u043d\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: ",(0,o.createComponentVNode)(2,i.Box,{color:c?C?"good":"average":"bad",as:"span",children:Math.floor(c)}),(0,o.createComponentVNode)(2,i.Button,{icon:"atom",tooltip:"\u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043e\u043d\u0434\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c "+f+" \u0434\u0430\u043d\u043d\u044b\u0445.",content:p>0?"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 "+g+" \u0441\u0435\u043a\u0443\u043d\u0434":"\u0417\u043e\u043d\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c ("+h+")",disabled:!C||p>0,onClick:function(){return l("probe",{rift_id:t})},mx:2}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",content:s?"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439",disabled:s||m<100,onClick:function(){return l("reward",{rift_id:t})},mt:1.4})]})]})}(e)})),(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u043a\u0430\u043d\u0435\u0440\u044b \u0432 \u0441\u0435\u0442\u0438",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:f&&f.map((function(e){return function(e){var t=e.scannerId,n=e.scannerName,r=e.scanStatus,a=e.canSwitch,s=e.switching,d=c[r],u="OFF"===d?[" ","silver"]:"NO_RIFTS"===d?["\u041d\u0435\u0442 \u0440\u0430\u0437\u043b\u043e\u043c\u043e\u0432","silver"]:"SOME_RIFTS"===d?["\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442","good"]:"DANGER"===d?["\u041e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c! \u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0441\u043a\u0430\u043d\u0435\u0440!","bad"]:void 0;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:n,py:0,children:[s?(0,o.createComponentVNode)(2,i.Icon,{name:"circle-notch",color:"silver",spin:!0,ml:1.85,mr:1.79,my:.84}):a?(0,o.createComponentVNode)(2,i.Button,{icon:"power-off",color:"OFF"===d?"bad":"good",onClick:function(){return l("toggle_scanner",{scanner_id:t})},ml:1,mr:1}):(0,o.createComponentVNode)(2,i.Icon,{name:"power-off",color:"OFF"===d?"bad":"good",ml:1.85,mr:1.79,my:.84}),"OFF"!==d&&(0,o.createComponentVNode)(2,i.Box,{as:"span",color:u[1],children:u[0]})]})}(e)}))})}),(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u0435\u0440\u0432\u0435\u0440\u044b \u0432 \u0441\u0435\u0442\u0438",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:h&&h.map((function(e){return function(e){var t=e.servName,n=e.servData;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:t,children:n.length?n.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{children:[e.riftName," \u2014 ",Math.floor(e.probePoints)," \u0434\u0430\u043d\u043d\u044b\u0445."]},t)})):(0,o.createComponentVNode)(2,i.Box,{children:"\u041d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445"})})}(e)}))})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BluespaceTap=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(103);t.BluespaceTap=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.product||[],u=s.desiredLevel,p=s.inputLevel,m=s.points,h=s.totalPoints,f=s.powerUse,C=s.availablePower,g=s.maxLevel,N=s.emagged,b=s.safeLevels,V=s.nextLevelPower,v=u>p?"bad":"good";return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!!N&&(0,o.createComponentVNode)(2,i.NoticeBox,{danger:1,children:"Safety Protocols disabled"}),!!(p>b)&&(0,o.createComponentVNode)(2,i.NoticeBox,{danger:1,children:"High Power, Instability likely"}),(0,o.createComponentVNode)(2,i.Collapsible,{title:"Input Management",children:(0,o.createComponentVNode)(2,i.Section,{title:"Input",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Input Level",children:p}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Desired Level",children:(0,o.createComponentVNode)(2,i.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:0===u,tooltip:"Set to 0",onClick:function(){return l("set",{set_level:0})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"step-backward",tooltip:"Decrease to actual input level",disabled:0===u,onClick:function(){return l("set",{set_level:p})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"backward",disabled:0===u,tooltip:"Decrease one step",onClick:function(){return l("decrease")}})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,i.Slider,{value:u,fillValue:p,minValue:0,color:v,maxValue:g,stepPixelSize:20,step:1,onChange:function(e,t){return l("set",{set_level:t})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"forward",disabled:u===g,tooltip:"Increase one step",tooltipPosition:"left",onClick:function(){return l("increase")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:u===g,tooltip:"Set to max",tooltipPosition:"left",onClick:function(){return l("set",{set_level:g})}})]})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Power Use",children:(0,c.formatPower)(f)}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power for next level",children:(0,c.formatPower)(V)}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Surplus Power",children:(0,c.formatPower)(C)})]})})}),(0,o.createComponentVNode)(2,i.Section,{title:"Output",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available Points",children:m}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Points",children:h})]})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{align:"end",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:d.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:(0,o.createComponentVNode)(2,i.Button,{disabled:e.price>=m,onClick:function(){return l("vend",{target:e.key})},content:e.price})},e.key)}))})})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BodyScanner=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],s=[["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."]],d=[["Respiratory","oxyLoss"],["Brain","brainLoss"],["Toxin","toxLoss"],["Radioactive","radLoss"],["Brute","bruteLoss"],["Genetic","cloneLoss"],["Burn","fireLoss"],["Paralysis","paralysis"]],u={average:[.25,.5],bad:[.5,Infinity]},p=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,a.Box,{children:t},t)],0)}),null):null},h=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,i.useBackend)(t).data,r=n.occupied,a=n.occupant,l=void 0===a?{}:a,s=r?(0,o.createComponentVNode)(2,f,{occupant:l}):(0,o.createComponentVNode)(2,x);return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:s})})};var f=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,C,{occupant:t}),(0,o.createComponentVNode)(2,g,{occupant:t}),(0,o.createComponentVNode)(2,N,{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,i.useBackend)(t),c=n.act,s=n.data.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"print",onClick:function(){return c("print_p")},children:"Print Report"}),(0,o.createComponentVNode)(2,a.Button,{icon:"user-slash",onClick:function(){return c("ejectify")},children:"Eject"})],4),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:"0",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.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:(0,r.round)(s.bodyTempC,0)}),"\xb0C,\xa0",(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:(0,r.round)(s.bodyTempF,0)}),"\xb0F"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Implants",children:s.implant_len?(0,o.createComponentVNode)(2,a.Box,{children:s.implant.map((function(e){return e.name})).join(", ")}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"None"})})]})})},g=function(e){var t=e.occupant;return t.hasBorer||t.blind||t.colourblind||t.nearsighted||t.hasVirus?(0,o.createComponentVNode)(2,a.Section,{title:"Abnormalities",children:s.map((function(e,n){if(t[e[0]])return(0,o.createComponentVNode)(2,a.Box,{color:e[1],bold:"bad"===e[1],children:e[2]},n)}))}):(0,o.createComponentVNode)(2,a.Section,{title:"Abnormalities",children:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No abnormalities found."})})},N=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Damage",children:(0,o.createComponentVNode)(2,a.Table,{children:p(d,(function(e,n,r){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Table.Row,{color:"label",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:[e[0],":"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:!!n&&n[0]+":"})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,b,{value:t[e[1]],marginBottom:r100)&&"average":"bad")||!!e.status.robotic&&"label",width:"33%",children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",q:!0,children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:e.maxHealth,mt:t>0&&"0.5rem",value:e.totalLoss/e.maxHealth,ranges:u,children:[(0,o.createComponentVNode)(2,a.Box,{float:"left",display:"inline",children:[!!e.bruteLoss&&(0,o.createComponentVNode)(2,a.Box,{display:"inline",position:"relative",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"bone"}),(0,r.round)(e.bruteLoss,0),"\xa0",(0,o.createComponentVNode)(2,a.Tooltip,{position:"top",content:"Brute damage"})]}),!!e.fireLoss&&(0,o.createComponentVNode)(2,a.Box,{display:"inline",position:"relative",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"fire"}),(0,r.round)(e.fireLoss,0),(0,o.createComponentVNode)(2,a.Tooltip,{position:"top",content:"Burn damage"})]})]}),(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:(0,r.round)(e.totalLoss,0)})]})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",verticalAlign:"top",width:"33%",pt:t>0&&"calc(0.5rem + 2px)",children:[(0,o.createComponentVNode)(2,a.Box,{color:"average",display:"inline",children:m([!!e.internalBleeding&&"Internal bleeding",!!e.lungRuptured&&"Ruptured lung",!!e.status.broken&&e.status.broken,h(e.germ_level),!!e.open&&"Open incision"])}),(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:[m([!!e.status.splinted&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Splinted"}),!!e.status.robotic&&(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Robotic"}),!!e.status.dead&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",bold:!0,children:"DEAD"})]),m(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,a.Section,{title:"Internal Organs",children:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"N/A"})}):(0,o.createComponentVNode)(2,a.Section,{title:"Internal Organs",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:"Name"}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:"Damage"}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",children:"Injuries"})]}),e.organs.map((function(e,t){return(0,o.createComponentVNode)(2,a.Table.Row,{textTransform:"capitalize",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{color:(!e.dead?e.germ_level>100&&"average":"bad")||e.robotic>0&&"label",width:"33%",children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:e.maxHealth,value:e.damage/e.maxHealth,mt:t>0&&"0.5rem",ranges:u,children:(0,r.round)(e.damage,0)})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",verticalAlign:"top",width:"33%",pt:t>0&&"calc(0.5rem + 2px)",children:[(0,o.createComponentVNode)(2,a.Box,{color:"average",display:"inline",children:m([h(e.germ_level)])}),(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:m([1===e.robotic&&(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Robotic"}),2===e.robotic&&(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Assisted"}),!!e.dead&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",bold:!0,children:"DEAD"})])})]})]},t)}))]})})},x=function(){return(0,o.createComponentVNode)(2,a.Section,{textAlign:"center",flexGrow:"1",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:"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.BorgPanel=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.BorgPanel=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.borg||{},d=l.cell||{},u=d.charge/d.maxcharge,p=l.channels||[],m=l.modules||[],h=l.upgrades||[],f=l.ais||[],C=l.laws||[];return(0,o.createComponentVNode)(2,a.Window,{title:"Borg Panel",width:700,height:700,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Section,{title:s.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:"Rename",onClick:function(){return c("rename")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,i.Button,{icon:s.emagged?"check-square-o":"square-o",content:"Emagged",selected:s.emagged,onClick:function(){return c("toggle_emagged")}}),(0,o.createComponentVNode)(2,i.Button,{icon:s.lockdown?"check-square-o":"square-o",content:"Locked Down",selected:s.lockdown,onClick:function(){return c("toggle_lockdown")}}),(0,o.createComponentVNode)(2,i.Button,{icon:s.scrambledcodes?"check-square-o":"square-o",content:"Scrambled Codes",selected:s.scrambledcodes,onClick:function(){return c("toggle_scrambledcodes")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Reset Module",onClick:function(){return c("reset_module")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Charge",children:[d.missing?(0,o.createVNode)(1,"span","color-bad","No cell installed",16):(0,o.createComponentVNode)(2,i.ProgressBar,{value:u,children:d.charge+" / "+d.maxcharge}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:"Set",onClick:function(){return c("set_charge")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Change",onClick:function(){return c("change_cell")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"trash",content:"Remove",color:"bad",onClick:function(){return c("remove_cell")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Radio Channels",children:p.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.installed?"check-square-o":"square-o",content:e.name,selected:e.installed,onClick:function(){return c("toggle_radio",{channel:e.name})}},e.name)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Model",children:m.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:s.active_module===e.name?"check-square-o":"square-o",content:e.name+" module",selected:s.active_module===e.name,onClick:function(){return c("setmodule",{module:e.name})}},e.type)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Upgrades",children:h.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.installed?"check-square-o":"square-o",content:e.name,selected:e.installed,onClick:function(){return c("toggle_upgrade",{upgrade:e.type})}},e.type)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Master AI",children:f.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.connected?"check-square-o":"square-o",content:e.name,selected:e.connected,onClick:function(){return c("slavetoai",{slavetoai:e.ref})}},e.ref)}))})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Laws",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Law Manager",selected:s.lawmanager,onClick:function(){return c("lawmanager")}}),(0,o.createComponentVNode)(2,i.Button,{icon:s.lawupdate?"check-square-o":"square-o",content:"Lawsync",selected:s.lawupdate,onClick:function(){return c("toggle_lawupdate")}})],4),children:C.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:e},e)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BotClean=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.BotClean=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.locked,d=l.noaccess,u=l.maintpanel,p=l.on,m=l.autopatrol,h=l.canhack,f=l.emagged,C=l.remote_disabled,g=l.painame,N=l.cleanblood;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.NoticeBox,{children:["Swipe an ID card to ",s?"unlock":"lock"," this interface."]}),(0,o.createComponentVNode)(2,i.Section,{title:"General Settings",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,i.Button,{icon:p?"power-off":"times",content:p?"On":"Off",selected:p,disabled:d,onClick:function(){return c("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Patrol",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:m,content:"Auto Patrol",disabled:d,onClick:function(){return c("autopatrol")}})}),!!u&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Maintenance Panel",children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Panel Open!"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safety System",children:(0,o.createComponentVNode)(2,i.Box,{color:f?"bad":"good",children:f?"DISABLED!":"Enabled"})}),!!h&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hacking",children:(0,o.createComponentVNode)(2,i.Button,{icon:"terminal",content:f?"Restore Safties":"Hack",disabled:d,color:"bad",onClick:function(){return c("hack")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Remote Access",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:!C,content:"AI Remote Control",disabled:d,onClick:function(){return c("disableremote")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Cleaning Settings",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:N,content:"Clean Blood",disabled:d,onClick:function(){return c("blood")}})}),g&&(0,o.createComponentVNode)(2,i.Section,{title:"pAI",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:g,disabled:d,onClick:function(){return c("ejectpai")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BotSecurity=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.BotSecurity=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.locked,d=l.noaccess,u=l.maintpanel,p=l.on,m=l.autopatrol,h=l.canhack,f=l.emagged,C=l.remote_disabled,g=l.painame,N=l.check_id,b=l.check_weapons,V=l.check_warrant,v=l.arrest_mode,x=l.arrest_declare;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.NoticeBox,{children:["Swipe an ID card to ",s?"unlock":"lock"," this interface."]}),(0,o.createComponentVNode)(2,i.Section,{title:"General Settings",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,i.Button,{icon:p?"power-off":"times",content:p?"On":"Off",selected:p,disabled:d,onClick:function(){return c("power")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Patrol",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:m,content:"Auto Patrol",disabled:d,onClick:function(){return c("autopatrol")}})}),!!u&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Maintenance Panel",children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Panel Open!"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safety System",children:(0,o.createComponentVNode)(2,i.Box,{color:f?"bad":"good",children:f?"DISABLED!":"Enabled"})}),!!h&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hacking",children:(0,o.createComponentVNode)(2,i.Button,{icon:"terminal",content:f?"Restore Safties":"Hack",disabled:d,color:"bad",onClick:function(){return c("hack")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Remote Access",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:!C,content:"AI Remote Control",disabled:d,onClick:function(){return c("disableremote")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Who To Arrest",children:[(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:N,content:"Unidentifiable Persons",disabled:d,onClick:function(){return c("authid")}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:b,content:"Unauthorized Weapons",disabled:d,onClick:function(){return c("authweapon")}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:V,content:"Wanted Criminals",disabled:d,onClick:function(){return c("authwarrant")}})]}),(0,o.createComponentVNode)(2,i.Section,{title:"Arrest Procedure",children:[(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:v,content:"Detain Targets Indefinitely",disabled:d,onClick:function(){return c("arrtype")}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{fluid:!0,checked:x,content:"Announce Arrests On Radio",disabled:d,onClick:function(){return c("arrdeclare")}})]}),g&&(0,o.createComponentVNode)(2,i.Section,{title:"pAI",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:g,disabled:d,onClick:function(){return c("ejectpai")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigCells=void 0;var o=n(0),r=n(3),i=n(2),a=n(1),c=function(e,t){var n=e.cell,r=(0,a.useBackend)(t).act,c=n.cell_id,l=n.occupant,s=n.crimes,d=n.brigged_by,u=n.time_left_seconds,p=n.time_set_seconds,m=n.ref,h="";u>0&&(h+=" BrigCells__listRow--active");return(0,o.createComponentVNode)(2,i.Table.Row,{className:h,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:c}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:l}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:s}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:d}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.TimeDisplay,{totalSeconds:p})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.TimeDisplay,{totalSeconds:u})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{type:"button",onClick:function(){r("release",{ref:m})},children:"Release"})})]})},l=function(e){var t=e.cells;return(0,o.createComponentVNode)(2,i.Table,{className:"BrigCells__list",children:[(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Cell"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Occupant"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Crimes"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Brigged By"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Time Brigged For"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Time Left"}),(0,o.createComponentVNode)(2,i.Table.Cell,{header:!0,children:"Release"})]}),t.map((function(e){return(0,o.createComponentVNode)(2,c,{cell:e},e.ref)}))]})};t.BrigCells=function(e,t){var n=(0,a.useBackend)(t),c=(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,i.Flex,{direction:"column",height:"100%",children:(0,o.createComponentVNode)(2,i.Section,{height:"100%",flexGrow:"1",children:(0,o.createComponentVNode)(2,l,{cells:c})})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigTimer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.BrigTimer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;l.nameText=l.occupant,l.timing&&(l.prisoner_hasrec?l.nameText=(0,o.createComponentVNode)(2,i.Box,{color:"green",children:l.occupant}):l.nameText=(0,o.createComponentVNode)(2,i.Box,{color:"red",children:l.occupant}));var s="pencil-alt";l.prisoner_name&&(l.prisoner_hasrec||(s="exclamation-triangle"));var d=[],u=0;for(u=0;u60||!l.isAllowed,onClick:function(){return c("start")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CameraConsoleOldContent=t.CameraConsoleMapContent=t.CameraConsole=void 0;var o=n(0),r=n(24),i=n(43),a=n(7),c=n(18),l=n(1),s=n(2),d=n(3),u=function(e,t){var n,o;if(!t)return[];var r=e.findIndex((function(e){return e.name===t.name}));return[null==(n=e[r-1])?void 0:n.name,null==(o=e[r+1])?void 0:o.name]},p=function(e,t){void 0===t&&(t="");var n=(0,c.createSearch)(t,(function(e){return e.name}));return(0,i.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)};t.CameraConsole=function(e,t){var n=(0,l.useLocalState)(t,"tabIndex",0),r=n[0],i=n[1];return(0,o.createComponentVNode)(2,d.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,d.Window.Content,{children:(0,o.createComponentVNode)(2,s.Box,{fillPositionedParent:!0,overflow:"hidden",children:[(0,o.createComponentVNode)(2,s.Tabs,{children:[(0,o.createComponentVNode)(2,s.Tabs.Tab,{selected:0===r,onClick:function(){return i(0)},children:[(0,o.createComponentVNode)(2,s.Icon,{name:"map-marked-alt"})," Map"]},"Map"),(0,o.createComponentVNode)(2,s.Tabs.Tab,{selected:1===r,onClick:function(){return i(1)},children:[(0,o.createComponentVNode)(2,s.Icon,{name:"table"})," List"]},"List")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,m);case 1:return(0,o.createComponentVNode)(2,h);default:return"WE SHOULDN'T BE HERE!"}}(r)]})})})};var m=function(e,t){var n=(0,l.useBackend)(t),r=n.act,i=n.data,a=n.config,c=p(i.cameras),d=(0,l.useLocalState)(t,"zoom",1),m=d[0],h=d[1],f=i.mapRef,C=i.activeCamera,g=i.stationLevel,N=u(c,C),b=N[0],V=N[1];return(0,o.createComponentVNode)(2,s.Box,{height:"100%",display:"flex",children:[(0,o.createComponentVNode)(2,s.Box,{height:"100%",flex:"0 0 500px",display:"flex",children:(0,o.createComponentVNode)(2,s.NanoMap,{onZoom:function(e){return h(e)},children:c.filter((function(e){return e.z===g})).map((function(e){return(0,o.createComponentVNode)(2,s.NanoMap.NanoButton,{activeCamera:C,x:e.x,y:e.y,context:t,zoom:m,icon:"circle",tooltip:e.name,name:e.name,color:"blue",status:e.status},e.ref)}))})}),(0,o.createComponentVNode)(2,s.Box,{height:"100%",resizable:!0,className:"CameraConsole__new__right",children:[(0,o.createVNode)(1,"div","CameraConsole__header",[(0,o.createVNode)(1,"div","CameraConsole__title",[(0,o.createVNode)(1,"b",null,"Camera: ",16),C&&C.name||"\u2014"],0),(0,o.createVNode)(1,"div","CameraConsole__toolbarRight",[(0,o.createComponentVNode)(2,s.Button,{icon:"chevron-left",disabled:!b,onClick:function(){return r("switch_camera",{name:b})}}),(0,o.createComponentVNode)(2,s.Button,{icon:"chevron-right",disabled:!V,onClick:function(){return r("switch_camera",{name:V})}})],4)],4),(0,o.createComponentVNode)(2,s.ByondUi,{resizable:!0,className:"CameraConsole__map",overflow:"hidden",params:{id:f,parent:a.window,type:"map"}})]})]})};t.CameraConsoleMapContent=m;var h=function(e,t){var n=(0,l.useBackend)(t),r=n.act,i=n.data,c=n.config,m=i.mapRef,h=i.activeCamera,f=(0,l.useLocalState)(t,"searchText",""),C=f[0],g=f[1],N=p(i.cameras,C),b=u(N,h),V=b[0],v=b[1];return(0,o.createComponentVNode)(2,s.Box,{children:[(0,o.createVNode)(1,"div","CameraConsole__left",(0,o.createComponentVNode)(2,d.Window.Content,{scrollable:!0,children:(0,o.createFragment)([(0,o.createComponentVNode)(2,s.Input,{fluid:!0,mb:1,placeholder:"Search for a camera",onInput:function(e,t){return g(t)}}),(0,o.createComponentVNode)(2,s.Section,{children:N.map((function(e){return(0,o.createVNode)(1,"div",(0,a.classes)(["Button","Button--fluid",e.status?"Button--color--transparent":"Button--color--danger","Button--ellipsis",h&&e.name===h.name&&"Button--selected"]),e.name,0,{title:e.name,onClick:function(){(0,d.refocusLayout)(),r("switch_camera",{name:e.name})}},e.name)}))})],4)}),2),(0,o.createVNode)(1,"div","CameraConsole__right",[(0,o.createVNode)(1,"div","CameraConsole__toolbar",[(0,o.createVNode)(1,"b",null,"Camera: ",16),h&&h.name||"\u2014"],0),(0,o.createVNode)(1,"div","CameraConsole__toolbarRight",[(0,o.createComponentVNode)(2,s.Button,{icon:"chevron-left",disabled:!V,onClick:function(){return r("switch_camera",{name:V})}}),(0,o.createComponentVNode)(2,s.Button,{icon:"chevron-right",disabled:!v,onClick:function(){return r("switch_camera",{name:v})}})],4),(0,o.createComponentVNode)(2,s.ByondUi,{className:"CameraConsole__map",params:{id:m,parent:c.window,type:"map"}})],4)]})};t.CameraConsoleOldContent=h},function(e,t,n){"use strict";t.__esModule=!0,t.Canister=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(103),l=n(3);t.Canister=function(e,t){var n=(0,i.useBackend)(t),s=n.act,d=n.data,u=d.portConnected,p=d.tankPressure,m=d.releasePressure,h=d.defaultReleasePressure,f=d.minReleasePressure,C=d.maxReleasePressure,g=d.valveOpen,N=d.name,b=d.canLabel,V=d.colorContainer,v=d.color_index,x=d.hasHoldingTank,y=d.holdingTank,k="";v.prim&&(k=V.prim.options[v.prim].name);var w="";v.sec&&(w=V.sec.options[v.sec].name);var _="";v.ter&&(_=V.ter.options[v.ter].name);var B="";v.quart&&(B=V.quart.options[v.quart].name);var S=[],L=[],A=[],I=[],E=0;for(E=0;Ee.current_positions&&(0,o.createComponentVNode)(2,i.Box,{color:"green",children:e.total_positions-e.current_positions})||(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"0"})}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,i.Button,{content:"-",disabled:d.cooldown_time||!e.can_close,onClick:function(){return s("make_job_unavailable",{job:e.title})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,i.Button,{content:"+",disabled:d.cooldown_time||!e.can_open,onClick:function(){return s("make_job_available",{job:e.title})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"center",children:d.target_dept&&(0,o.createComponentVNode)(2,i.Box,{color:"green",children:d.priority_jobs.indexOf(e.title)>-1?"Yes":""})||(0,o.createComponentVNode)(2,i.Button,{content:"Priority",selected:d.priority_jobs.indexOf(e.title)>-1,disabled:d.cooldown_time||!e.can_prioritize,onClick:function(){return s("prioritize_job",{job:e.title})}})})]},e.title)}))]})})],4):(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 2:n=d.authenticated&&d.scan_name?d.modify_name?(0,o.createComponentVNode)(2,c.AccessList,{accesses:d.regions,selectedList:d.selectedAccess,accessMod:function(e){return s("set",{access:e})},grantAll:function(){return s("grant_all")},denyAll:function(){return s("clear_all")},grantDep:function(e){return s("grant_region",{region:e})},denyDep:function(e){return s("deny_region",{region:e})}}):(0,o.createComponentVNode)(2,i.Section,{title:"Card Missing",color:"red",children:"No card to modify."}):(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 3:n=d.authenticated?d.records.length?(0,o.createComponentVNode)(2,i.Section,{title:"Records",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Delete All Records",disabled:!d.authenticated||0===d.records.length||d.target_dept,onClick:function(){return s("wipe_all_logs")}}),children:[(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Crewman"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Old Rank"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"New Rank"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Authorized By"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Time"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Reason"}),!!d.iscentcom&&(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Deleted By"})]}),d.records.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.transferee}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.oldvalue}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.newvalue}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.whodidit}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.timestamp}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.reason}),!!d.iscentcom&&(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.deletedby})]},e.timestamp)}))]}),!!d.iscentcom&&(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:"Delete MY Records",color:"purple",disabled:!d.authenticated||0===d.records.length,onClick:function(){return s("wipe_my_logs")}})})]}):(0,o.createComponentVNode)(2,i.Section,{title:"Records",children:"No records."}):(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 4:n=d.authenticated&&d.scan_name?(0,o.createComponentVNode)(2,i.Section,{title:"Your Team",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Name"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Rank"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Sec Status"}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Actions"})]}),d.people_dept.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.title}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.crimstat}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:e.buttontext,disabled:!e.demotable,onClick:function(){return s("remote_demote",{remote_demote:e.name})}})})]},e.title)}))]})}):(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"Not logged in."});break;default:n=(0,o.createComponentVNode)(2,i.Section,{title:"Warning",color:"red",children:"ERROR: Unknown Mode."})}return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[u,p,n]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CargoConsole=void 0;var o=n(0),r=n(43),i=n(24),a=n(1),c=n(2),l=n(3),s=(n(52),n(18));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,d),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})})};var d=function(e,t){var n=(0,a.useLocalState)(t,"contentsModal",null),r=n[0],i=n[1],l=(0,a.useLocalState)(t,"contentsModalTitle",null),s=l[0],d=l[1];return null!==r&&null!==s?(0,o.createComponentVNode)(2,c.Modal,{maxWidth:"75%",width:window.innerWidth+"px",maxHeight:.75*window.innerHeight+"px",mx:"auto",children:[(0,o.createComponentVNode)(2,c.Box,{width:"100%",bold:!0,children:(0,o.createVNode)(1,"h1",null,[s,(0,o.createTextVNode)(" contents:")],0)}),(0,o.createComponentVNode)(2,c.Box,{children:r.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:["- ",e]},e)}))}),(0,o.createComponentVNode)(2,c.Box,{m:2,children:(0,o.createComponentVNode)(2,c.Button,{content:"Close",onClick:function(){i(null),d(null)}})})]}):void 0},u=function(e,t){var n,r,i=(0,a.useBackend)(t),l=i.act,s=i.data,d=s.is_public,u=s.points,p=s.credits,m=s.timeleft,h=s.moving,f=s.at_station;return h||f?!h&&f?(n="Docked at the station",r="Return Shuttle"):h&&(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,c.Section,{title:"Status",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Points Available",children:u}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Credits Available",children:p}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Shuttle Status",children:n}),0===d&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,c.Button,{content:r,disabled:h,onClick:function(){return l("moveShuttle")}}),(0,o.createComponentVNode)(2,c.Button,{content:"View Central Command Messages",onClick:function(){return l("showMessages")}})]})]})})},p=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data,u=d.categories,p=d.supply_packs,m=(0,a.useSharedState)(t,"category","Emergency"),h=m[0],f=m[1],C=(0,a.useSharedState)(t,"search_text",""),g=C[0],N=C[1],b=(0,a.useLocalState)(t,"contentsModal",null),V=(b[0],b[1]),v=(0,a.useLocalState)(t,"contentsModalTitle",null),x=(v[0],v[1]),y=(0,s.createSearch)(g,(function(e){return e.name})),k=(0,r.flow)([(0,i.filter)((function(e){return e.cat===u.filter((function(e){return e.name===h}))[0].category||g})),g&&(0,i.filter)(y),(0,i.sortBy)((function(e){return e.name.toLowerCase()}))])(p),w="Crate Catalogue";return g?w="Results for '"+g+"':":h&&(w="Browsing "+h),(0,o.createComponentVNode)(2,c.Section,{title:w,buttons:(0,o.createComponentVNode)(2,c.Dropdown,{width:"190px",options:u.map((function(e){return e.name})),selected:h,onSelected:function(e){return f(e)}}),children:[(0,o.createComponentVNode)(2,c.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return N(t)},mb:1}),(0,o.createComponentVNode)(2,c.Box,{maxHeight:25,overflowY:"auto",overflowX:"hidden",children:(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:k.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{bold:!0,children:(0,o.createComponentVNode)(2,c.Box,{color:e.has_sale?"good":"default",children:[e.name," ",e.cost?e.cost+" Points":""," ",e.creditsCost?e.creditsCost+" Credits":""]})}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,c.Button,{content:"Order 1",icon:"shopping-cart",onClick:function(){return l("order",{crate:e.ref,multiple:0})}}),(0,o.createComponentVNode)(2,c.Button,{content:"Order Multiple",icon:"cart-plus",onClick:function(){return l("order",{crate:e.ref,multiple:1})}}),(0,o.createComponentVNode)(2,c.Button,{content:"View Contents",icon:"search",onClick:function(){V(e.contents),x(e.name)}})]})]},e.name)}))})})]})},m=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.requests,s=i.canapprove,d=i.orders;return(0,o.createComponentVNode)(2,c.Section,{title:"Details",children:(0,o.createComponentVNode)(2,c.Box,{maxHeight:15,overflowY:"auto",overflowX:"hidden",children:[(0,o.createComponentVNode)(2,c.Box,{bold:!0,children:"Requests"}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:l.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Reason: ",e.comment]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Required Techs: ",e.pack_techs]})]}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,c.Button,{content:"Approve",color:"green",disabled:!s,onClick:function(){return r("approve",{ordernum:e.ordernum})}}),(0,o.createComponentVNode)(2,c.Button,{content:"Deny",color:"red",onClick:function(){return r("deny",{ordernum:e.ordernum})}})]})]},e.ordernum)}))}),(0,o.createComponentVNode)(2,c.Box,{bold:!0,children:"Confirmed Orders"}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Reason: ",e.comment]})]})},e.ordernum)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Changelog=void 0;var o=n(0),r=n(7),i=n(1),a=n(2),c=n(3),l=u(n(494)),s=u(n(495)),d=u(n(521));function u(e){return e&&e.__esModule?e:{"default":e}}function p(e,t,n,o,r,i,a){try{var c=e[i](a),l=c.value}catch(s){return void n(s)}c.done?t(l):Promise.resolve(l).then(o,r)}var m={add:{icon:"check-circle",color:"green"},admin:{icon:"user-shield",color:"purple"},balance:{icon:"balance-scale-right",color:"yellow"},bugfix:{icon:"bug",color:"green"},code_imp:{icon:"code",color:"green"},config:{icon:"cogs",color:"purple"},del:{icon:"minus",color:"red"},expansion:{icon:"check-circle",color:"green"},experiment:{icon:"radiation",color:"yellow"},image:{icon:"image",color:"green"},imageadd:{icon:"tg-image-plus",color:"green"},imagedel:{icon:"tg-image-minus",color:"red"},qol:{icon:"hand-holding-heart",color:"green"},refactor:{icon:"tools",color:"green"},rscadd:{icon:"check-circle",color:"green"},rscdel:{icon:"times-circle",color:"red"},server:{icon:"server",color:"purple"},sound:{icon:"volume-high",color:"green"},soundadd:{icon:"tg-sound-plus",color:"green"},sounddel:{icon:"tg-sound-minus",color:"red"},spellcheck:{icon:"spell-check",color:"green"},tgs:{icon:"toolbox",color:"purple"},tweak:{icon:"wrench",color:"green"},unknown:{icon:"info-circle",color:"label"},wip:{icon:"hammer",color:"orange"}},h=function(e){var t,n;function u(){var t;return(t=e.call(this)||this).state={data:"Loading changelog data...",selectedDate:"",selectedIndex:0},t.dateChoices=[],t}n=e,(t=u).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var h=u.prototype;return h.setData=function(e){this.setState({data:e})},h.setSelectedDate=function(e){this.setState({selectedDate:e})},h.setSelectedIndex=function(e){this.setState({selectedIndex:e})},h.getData=function(e,t){void 0===t&&(t=1);var n=(0,i.useBackend)(this.context).act,o=this;if(t>6)return this.setData("Failed to load data after 6 attempts");n("get_month",{date:e}),(0,d["default"])(e+".yml").then(function(){var n,r=(n=regeneratorRuntime.mark((function i(n){var r,a;return regeneratorRuntime.wrap((function(i){for(;;)switch(i.prev=i.next){case 0:return i.next=2,n.text();case 2:r=i.sent,/^Cannot find/.test(r)?(a=50+50*t,o.setData("Loading changelog data"+".".repeat(t+3)),setTimeout((function(){o.getData(e,t+1)}),a)):o.setData(s["default"].load(r,{schema:s["default"].CORE_SCHEMA}));case 5:case"end":return i.stop()}}),i)})),function(){var e=this,t=arguments;return new Promise((function(o,r){var i=n.apply(e,t);function a(e){p(i,o,r,a,c,"next",e)}function c(e){p(i,o,r,a,c,"throw",e)}a(undefined)}))});return function(e){return r.apply(this,arguments)}}())},h.componentDidMount=function(){var e=this,t=(0,i.useBackend)(this.context).data.dates,n=void 0===t?[]:t;n&&(n.forEach((function(t){return e.dateChoices.push((0,l["default"])(t,"mmmm yyyy",!0))})),this.setSelectedDate(this.dateChoices[0]),this.getData(n[0]))},h.render=function(){var e=this,t=this.state,n=t.data,s=t.selectedDate,d=t.selectedIndex,u=(0,i.useBackend)(this.context).data.dates,p=this.dateChoices,h=p.length>0&&(0,o.createComponentVNode)(2,a.Stack,{mb:1,children:[(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{className:"Changelog__Button",disabled:0===d,icon:"chevron-left",onClick:function(){var t=d-1;return e.setData("Loading changelog data..."),e.setSelectedIndex(t),e.setSelectedDate(p[t]),window.scrollTo(0,document.body.scrollHeight||document.documentElement.scrollHeight),e.getData(u[t])}})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Dropdown,{displayText:s,options:p,onSelected:function(t){var n=p.indexOf(t);return e.setData("Loading changelog data..."),e.setSelectedIndex(n),e.setSelectedDate(t),window.scrollTo(0,document.body.scrollHeight||document.documentElement.scrollHeight),e.getData(u[n])},selected:s,width:"150px"})}),(0,o.createComponentVNode)(2,a.Stack.Item,{children:(0,o.createComponentVNode)(2,a.Button,{className:"Changelog__Button",disabled:d===p.length-1,icon:"chevron-right",onClick:function(){var t=d+1;return e.setData("Loading changelog data..."),e.setSelectedIndex(t),e.setSelectedDate(p[t]),window.scrollTo(0,document.body.scrollHeight||document.documentElement.scrollHeight),e.getData(u[t])}})})]}),f=(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createVNode)(1,"h1",null,"Paradise Station",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Thanks to: ",16),(0,o.createTextVNode)("Baystation 12, /tg/station, /vg/station, NTstation, CDK Station devs, FacepunchStation, GoonStation devs, the original SpaceStation developers and Radithor for the title image. Also a thanks to anybody who has contributed who is not listed here :( Ask to be added here on irc.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Recent GitHub contributors can be found "),(0,o.createVNode)(1,"a",null,"here",16,{href:"https://github.com/ss220-space/Paradise/pulse/monthly"}),(0,o.createTextVNode)(".")],0),h]}),C=(0,o.createComponentVNode)(2,a.Section,{children:[h,(0,o.createVNode)(1,"h3",null,"GoonStation 13 Development Team",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Coders: ",16),(0,o.createTextVNode)("Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Spriters: ",16),(0,o.createTextVNode)("Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Traditional Games Space Station 13 is thankful to the GoonStation 13 Development Team for its work on the game up to the"),(0,o.createTextVNode)(" r4407 release. The changelog for changes up to r4407 can be seen "),(0,o.createVNode)(1,"a",null,"here",16,{href:"https://wiki.ss13.co/Changelog#April_2010"}),(0,o.createTextVNode)(".")],0),(0,o.createVNode)(1,"p",null,["Except where otherwise noted, Goon Station 13 is licensed under a ",(0,o.createVNode)(1,"a",null,"Creative Commons Attribution-Noncommercial-Share Alike 3.0 License",16,{href:"https://creativecommons.org/licenses/by-nc-sa/3.0/"}),". Rights are currently extended to ",(0,o.createVNode)(1,"a",null,"SomethingAwful Goons",16,{href:"http://forums.somethingawful.com/"})," only."],0),(0,o.createVNode)(1,"h3",null,"Traditional Games Space Station 13 License",16),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Some icons by "),(0,o.createVNode)(1,"a",null,"Yusuke Kamiyamane",16,{href:"http://p.yusukekamiyamane.com/"}),(0,o.createTextVNode)(". All rights reserved. Licensed under a "),(0,o.createVNode)(1,"a",null,"Creative Commons Attribution 3.0 License",16,{href:"http://creativecommons.org/licenses/by/3.0/"}),(0,o.createTextVNode)(".")],4)]}),g=/#\d+/,N="object"==typeof n&&Object.keys(n).length>0&&Object.entries(n).reverse().map((function(e){var t=e[0],n=e[1];return(0,o.createComponentVNode)(2,a.Section,{title:(0,l["default"])(t,"d mmmm yyyy",!0),children:(0,o.createComponentVNode)(2,a.Box,{ml:3,children:Object.entries(n).map((function(e){var t=e[0],n=e[1];return(0,o.createFragment)([(0,o.createVNode)(1,"h4",null,[t,(0,o.createTextVNode)(" changed:")],0),(0,o.createComponentVNode)(2,a.Box,{ml:3,children:(0,o.createComponentVNode)(2,a.Table,{children:n.map((function(e){var t=Object.keys(e)[0],n=e[t],i=n.match(g),c=(0,o.createComponentVNode)(2,a.Table.Cell,{className:(0,r.classes)(["Changelog__Cell","Changelog__Cell--Icon"]),children:(0,o.createComponentVNode)(2,a.Icon,{color:m[t]?m[t].color:m.unknown.color,name:m[t]?m[t].icon:m.unknown.icon})});return null!==i&&(0,o.createComponentVNode)(2,a.Table.Row,{children:[c,(0,o.createComponentVNode)(2,a.Table.Cell,{className:"Changelog__Cell",children:(0,o.createVNode)(1,"a",null,[(0,o.createTextVNode)(" "),n,(0,o.createTextVNode)(" ")],0,{href:"https://github.com/ss220-space/Paradise/pull/"+i[0].substring(1)})})]},t+n)||(0,o.createComponentVNode)(2,a.Table.Row,{children:[c,(0,o.createComponentVNode)(2,a.Table.Cell,{className:"Changelog__Cell",children:n})]},t+n)}))})})],4,t)}))})},t)}));return(0,o.createComponentVNode)(2,c.Window,{title:"Changelog",width:675,height:650,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[f,N,"string"==typeof n&&(0,o.createVNode)(1,"p",null,n,0),C]})})},u}(o.Component);t.Changelog=h},function(e,t,n){"use strict";var o;function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(i){var a,c,l,s=arguments,d=(a=/d{1,4}|D{3,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|W{1,2}|[LlopSZN]|"[^"]*"|'[^']*'/g,c=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,l=/[^-+\dA-Z]/g,function(e,t,n,o){if(1!==s.length||"string"!==f(e)||/\d/.test(e)||(t=e,e=undefined),(e=e||0===e?e:new Date)instanceof Date||(e=new Date(e)),isNaN(e))throw TypeError("Invalid date");var r=(t=String(d.masks[t]||t||d.masks["default"])).slice(0,4);"UTC:"!==r&&"GMT:"!==r||(t=t.slice(4),n=!0,"GMT:"===r&&(o=!0));var i=function(){return n?"getUTC":"get"},C=function(){return e[i()+"Date"]()},g=function(){return e[i()+"Day"]()},N=function(){return e[i()+"Month"]()},b=function(){return e[i()+"FullYear"]()},V=function(){return e[i()+"Hours"]()},v=function(){return e[i()+"Minutes"]()},x=function(){return e[i()+"Seconds"]()},y=function(){return e[i()+"Milliseconds"]()},k=function(){return n?0:e.getTimezoneOffset()},w=function(){return m(e)},_=function(){return h(e)},B={d:function(){return C()},dd:function(){return u(C())},ddd:function(){return d.i18n.dayNames[g()]},DDD:function(){return p({y:b(),m:N(),d:C(),_:i(),dayName:d.i18n.dayNames[g()],short:!0})},dddd:function(){return d.i18n.dayNames[g()+7]},DDDD:function(){return p({y:b(),m:N(),d:C(),_:i(),dayName:d.i18n.dayNames[g()+7]})},m:function(){return N()+1},mm:function(){return u(N()+1)},mmm:function(){return d.i18n.monthNames[N()]},mmmm:function(){return d.i18n.monthNames[N()+12]},yy:function(){return String(b()).slice(2)},yyyy:function(){return u(b(),4)},h:function(){return V()%12||12},hh:function(){return u(V()%12||12)},H:function(){return V()},HH:function(){return u(V())},M:function(){return v()},MM:function(){return u(v())},s:function(){return x()},ss:function(){return u(x())},l:function(){return u(y(),3)},L:function(){return u(Math.floor(y()/10))},t:function(){return V()<12?d.i18n.timeNames[0]:d.i18n.timeNames[1]},tt:function(){return V()<12?d.i18n.timeNames[2]:d.i18n.timeNames[3]},T:function(){return V()<12?d.i18n.timeNames[4]:d.i18n.timeNames[5]},TT:function(){return V()<12?d.i18n.timeNames[6]:d.i18n.timeNames[7]},Z:function(){return o?"GMT":n?"UTC":(String(e).match(c)||[""]).pop().replace(l,"").replace(/GMT\+0000/g,"UTC")},o:function(){return(k()>0?"-":"+")+u(100*Math.floor(Math.abs(k())/60)+Math.abs(k())%60,4)},p:function(){return(k()>0?"-":"+")+u(Math.floor(Math.abs(k())/60),2)+":"+u(Math.floor(Math.abs(k())%60),2)},S:function(){return["th","st","nd","rd"][C()%10>3?0:(C()%100-C()%10!=10)*C()%10]},W:function(){return w()},WW:function(){return u(w())},N:function(){return _()}};return t.replace(a,(function(e){return e in B?B[e]():e.slice(1,e.length-1)}))});d.masks={"default":"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",paddedShortDate:"mm/dd/yyyy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:sso",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",expiresHeaderFormat:"ddd, dd mmm yyyy HH:MM:ss Z"},d.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],timeNames:["a","p","am","pm","A","P","AM","PM"]};var u=function(e,t){for(e=String(e),t=t||2;e.length>10),56320+(e-65536&1023))}for(var x=new Array(256),y=new Array(256),k=0;k<256;k++)x[k]=V(k)?1:0,y[k]=V(k);function w(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||c,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function _(e,t){return new r(t,new i(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function B(e,t){throw _(e,t)}function S(e,t){e.onWarning&&e.onWarning.call(null,_(e,t))}var L={YAML:function(e,t,n){var o,r,i;null!==e.version&&B(e,"duplication of %YAML directive"),1!==n.length&&B(e,"YAML directive accepts exactly one argument"),null===(o=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&B(e,"ill-formed argument of the YAML directive"),r=parseInt(o[1],10),i=parseInt(o[2],10),1!==r&&B(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=i<2,1!==i&&2!==i&&S(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var o,r;2!==n.length&&B(e,"TAG directive accepts exactly two arguments"),o=n[0],r=n[1],p.test(o)||B(e,"ill-formed tag handle (first argument) of the TAG directive"),l.call(e.tagMap,o)&&B(e,'there is a previously declared suffix for "'+o+'" tag handle'),m.test(r)||B(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[o]=r}};function A(e,t,n,o){var r,i,a,c;if(t1&&(e.result+=o.repeat("\n",t-1))}function P(e,t){var n,o,r=e.tag,i=e.anchor,a=[],c=!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),o=e.input.charCodeAt(e.position);0!==o&&45===o&&g(e.input.charCodeAt(e.position+1));)if(c=!0,e.position++,T(e,!0,-1)&&e.lineIndent<=t)a.push(null),o=e.input.charCodeAt(e.position);else if(n=e.line,j(e,t,3,!1,!0),a.push(e.result),T(e,!0,-1),o=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==o)B(e,"bad indentation of a sequence entry");else if(e.lineIndentt?V=1:e.lineIndent===t?V=0:e.lineIndentt?V=1:e.lineIndent===t?V=0:e.lineIndentt)&&(j(e,t,4,!0,r)&&(f?m=e.result:h=e.result),f||(E(e,d,u,p,m,h,i,a),p=m=h=null),T(e,!0,-1),c=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==c)B(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===i?B(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):d?B(e,"repeat of an indentation width identifier"):(u=t+i-1,d=!0)}if(C(a)){do{a=e.input.charCodeAt(++e.position)}while(C(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!f(a)&&0!==a)}for(;0!==a;){for(D(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!d||e.lineIndentu&&(u=e.lineIndent),f(a))p++;else{if(e.lineIndent0){for(r=a,i=0;r>0;r--)(a=b(c=e.input.charCodeAt(++e.position)))>=0?i=(i<<4)+a:B(e,"expected hexadecimal character");e.result+=v(i),e.position++}else B(e,"unknown escape sequence");n=o=e.position}else f(c)?(A(e,n,o,!0),M(e,T(e,!1,t)),n=o=e.position):e.position===e.lineStart&&F(e)?B(e,"unexpected end of the document within a double quoted scalar"):(e.position++,o=e.position)}B(e,"unexpected end of the stream within a double quoted scalar")}(e,m)?w=!0:!function(e){var t,n,o;if(42!==(o=e.input.charCodeAt(e.position)))return!1;for(o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!g(o)&&!N(o);)o=e.input.charCodeAt(++e.position);return e.position===t&&B(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),e.anchorMap.hasOwnProperty(n)||B(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],T(e,!0,-1),!0}(e)?function(e,t,n){var o,r,i,a,c,l,s,d,u=e.kind,p=e.result;if(g(d=e.input.charCodeAt(e.position))||N(d)||35===d||38===d||42===d||33===d||124===d||62===d||39===d||34===d||37===d||64===d||96===d)return!1;if((63===d||45===d)&&(g(o=e.input.charCodeAt(e.position+1))||n&&N(o)))return!1;for(e.kind="scalar",e.result="",r=i=e.position,a=!1;0!==d;){if(58===d){if(g(o=e.input.charCodeAt(e.position+1))||n&&N(o))break}else if(35===d){if(g(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&F(e)||n&&N(d))break;if(f(d)){if(c=e.line,l=e.lineStart,s=e.lineIndent,T(e,!1,-1),e.lineIndent>=t){a=!0,d=e.input.charCodeAt(e.position);continue}e.position=i,e.line=c,e.lineStart=l,e.lineIndent=s;break}}a&&(A(e,r,i,!1),M(e,e.line-c),r=i=e.position,a=!1),C(d)||(i=e.position+1),d=e.input.charCodeAt(++e.position)}return A(e,r,i,!1),!!e.result||(e.kind=u,e.result=p,!1)}(e,m,1===n)&&(w=!0,null===e.tag&&(e.tag="?")):(w=!0,null===e.tag&&null===e.anchor||B(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===V&&(w=s&&P(e,h))),null!==e.tag&&"!"!==e.tag)if("?"===e.tag){for(d=0,u=e.implicitTypes.length;d tag; it should be "'+p.kind+'", not "'+e.kind+'"'),p.resolve(e.result)?(e.result=p.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):B(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):B(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||w}function U(e){var t,n,o,r,i=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(r=e.input.charCodeAt(e.position))&&(T(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!g(r);)r=e.input.charCodeAt(++e.position);for(o=[],(n=e.input.slice(t,e.position)).length<1&&B(e,"directive name must not be less than one character in length");0!==r;){for(;C(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!f(r));break}if(f(r))break;for(t=e.position;0!==r&&!g(r);)r=e.input.charCodeAt(++e.position);o.push(e.input.slice(t,e.position))}0!==r&&D(e),l.call(L,n)?L[n](e,n,o):S(e,'unknown document directive "'+n+'"')}T(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,T(e,!0,-1)):a&&B(e,"directives end mark is expected"),j(e,e.lineIndent-1,4,!1,!0),T(e,!0,-1),e.checkLineBreaks&&d.test(e.input.slice(i,e.position))&&S(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&F(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,T(e,!0,-1)):e.position0&&-1==="\0\r\n\x85\u2028\u2029".indexOf(this.buffer.charAt(r-1));)if(r-=1,this.position-r>t/2-1){n=" ... ",r+=5;break}for(i="",a=this.position;at/2-1){i=" ... ",a-=5;break}return c=this.buffer.slice(r,a),o.repeat(" ",e)+n+c+i+"\n"+o.repeat(" ",e+this.position-r+n.length)+"^"},r.prototype.toString=function(e){var t,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet())&&(n+=":\n"+t),n},e.exports=r},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return null!==e?e:""}})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return null!==e?e:[]}})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)},construct:function(e){return"true"===e||"True"===e||"TRUE"===e},predicate:function(e){return"[object Boolean]"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},function(e,t,n){"use strict";var o=n(65),r=n(20);function i(e){return 48<=e&&e<=55}function a(e){return 48<=e&&e<=57}e.exports=new r("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,o=e.length,r=0,c=!1;if(!o)return!1;if("-"!==(t=e[r])&&"+"!==t||(t=e[++r]),"0"===t){if(r+1===o)return!0;if("b"===(t=e[++r])){for(r++;r=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0"+e.toString(8):"-0"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},function(e,t,n){"use strict";var o=n(65),r=n(20),i=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var a=/^[-+]?[0-9]+e/;e.exports=new r("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!i.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n,o,r;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,r=[],"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:t.indexOf(":")>=0?(t.split(":").forEach((function(e){r.unshift(parseFloat(e,10))})),t=0,o=1,r.forEach((function(e){t+=e*o,o*=60})),n*t):n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||o.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(o.isNegativeZero(e))return"-0.0";return n=e.toString(10),a.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"})},function(e,t,n){"use strict";var o=n(20),r=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),i=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");e.exports=new o("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==r.exec(e)||null!==i.exec(e))},construct:function(e){var t,n,o,a,c,l,s,d,u=0,p=null;if(null===(t=r.exec(e))&&(t=i.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],o=+t[2]-1,a=+t[3],!t[4])return new Date(Date.UTC(n,o,a));if(c=+t[4],l=+t[5],s=+t[6],t[7]){for(u=t[7].slice(0,3);u.length<3;)u+="0";u=+u}return t[9]&&(p=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(p=-p)),d=new Date(Date.UTC(n,o,a,c,l,s,u)),p&&d.setTime(d.getTime()-p),d},instanceOf:Date,represent:function(e){return e.toISOString()}})},function(e,t,n){"use strict";var o=n(20);e.exports=new o("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}})},function(e,t,n){"use strict";var o;try{o=n(509).Buffer}catch(a){}var r=n(20),i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";e.exports=new r("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,o=0,r=e.length,a=i;for(n=0;n64)){if(t<0)return!1;o+=6}return o%8==0},construct:function(e){var t,n,r=e.replace(/[\r\n=]/g,""),a=r.length,c=i,l=0,s=[];for(t=0;t>16&255),s.push(l>>8&255),s.push(255&l)),l=l<<6|c.indexOf(r.charAt(t));return 0===(n=a%4*6)?(s.push(l>>16&255),s.push(l>>8&255),s.push(255&l)):18===n?(s.push(l>>10&255),s.push(l>>2&255)):12===n&&s.push(l>>4&255),o?o.from?o.from(s):new o(s):s},predicate:function(e){return o&&o.isBuffer(e)},represent:function(e){var t,n,o="",r=0,a=e.length,c=i;for(t=0;t>18&63],o+=c[r>>12&63],o+=c[r>>6&63],o+=c[63&r]),r=(r<<8)+e[t];return 0===(n=a%3)?(o+=c[r>>18&63],o+=c[r>>12&63],o+=c[r>>6&63],o+=c[63&r]):2===n?(o+=c[r>>10&63],o+=c[r>>4&63],o+=c[r<<2&63],o+=c[64]):1===n&&(o+=c[r>>2&63],o+=c[r<<4&63],o+=c[64],o+=c[64]),o}})},function(e,t,n){"use strict";(function(e){ /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ -var o=n(510),r=n(511),i=n(512);function a(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function c(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function h(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var o=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case undefined:return j(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return U(e).length;default:if(o)return j(e).length;t=(""+t).toLowerCase(),o=!0}}function f(e,t,n){var o=!1;if((t===undefined||t<0)&&(t=0),t>this.length)return"";if((n===undefined||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return L(this,t,n);case"utf8":case"utf-8":return _(this,t,n);case"ascii":return B(this,t,n);case"latin1":case"binary":return S(this,t,n);case"base64":return w(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,n);default:if(o)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),o=!0}}function C(e,t,n){var o=e[t];e[t]=e[n],e[n]=o}function g(e,t,n,o,r){if(0===e.length)return-1;if("string"==typeof n?(o=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(r)return-1;n=e.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof t&&(t=l.from(t,o)),l.isBuffer(t))return 0===t.length?-1:N(e,t,n,o,r);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):N(e,[t],n,o,r);throw new TypeError("val must be string, number or Buffer")}function N(e,t,n,o,r){var i,a=1,c=e.length,l=t.length;if(o!==undefined&&("ucs2"===(o=String(o).toLowerCase())||"ucs-2"===o||"utf16le"===o||"utf-16le"===o)){if(e.length<2||t.length<2)return-1;a=2,c/=2,l/=2,n/=2}function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(r){var d=-1;for(i=n;ic&&(n=c-l),i=n;i>=0;i--){for(var u=!0,p=0;pr&&(o=r):o=r;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");o>i/2&&(o=i/2);for(var a=0;a>8,r=n%256,i.push(r),i.push(o);return i}(t,e.length-n),e,n,o)}function w(e,t,n){return 0===t&&n===e.length?o.fromByteArray(e):o.fromByteArray(e.slice(t,n))}function _(e,t,n){n=Math.min(e.length,n);for(var o=[],r=t;r239?4:s>223?3:s>191?2:1;if(r+u<=n)switch(u){case 1:s<128&&(d=s);break;case 2:128==(192&(i=e[r+1]))&&(l=(31&s)<<6|63&i)>127&&(d=l);break;case 3:i=e[r+1],a=e[r+2],128==(192&i)&&128==(192&a)&&(l=(15&s)<<12|(63&i)<<6|63&a)>2047&&(l<55296||l>57343)&&(d=l);break;case 4:i=e[r+1],a=e[r+2],c=e[r+3],128==(192&i)&&128==(192&a)&&128==(192&c)&&(l=(15&s)<<18|(63&i)<<12|(63&a)<<6|63&c)>65535&&l<1114112&&(d=l)}null===d?(d=65533,u=1):d>65535&&(d-=65536,o.push(d>>>10&1023|55296),d=56320|1023&d),o.push(d),r+=u}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",o=0;for(;o0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},l.prototype.compare=function(e,t,n,o,r){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(t===undefined&&(t=0),n===undefined&&(n=e?e.length:0),o===undefined&&(o=0),r===undefined&&(r=this.length),t<0||n>e.length||o<0||r>this.length)throw new RangeError("out of range index");if(o>=r&&t>=n)return 0;if(o>=r)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(r>>>=0)-(o>>>=0),a=(n>>>=0)-(t>>>=0),c=Math.min(i,a),s=this.slice(o,r),d=e.slice(t,n),u=0;ur)&&(n=r),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");o||(o="utf8");for(var i=!1;;)switch(o){case"hex":return b(this,e,t,n);case"utf8":case"utf-8":return V(this,e,t,n);case"ascii":return v(this,e,t,n);case"latin1":case"binary":return x(this,e,t,n);case"base64":return y(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+o);o=(""+o).toLowerCase(),i=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function B(e,t,n){var o="";n=Math.min(e.length,n);for(var r=t;ro)&&(n=o);for(var r="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function E(e,t,n,o,r,i){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||te.length)throw new RangeError("Index out of range")}function D(e,t,n,o){t<0&&(t=65535+t+1);for(var r=0,i=Math.min(e.length-n,2);r>>8*(o?r:1-r)}function T(e,t,n,o){t<0&&(t=4294967295+t+1);for(var r=0,i=Math.min(e.length-n,4);r>>8*(o?r:3-r)&255}function F(e,t,n,o,r,i){if(n+o>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function M(e,t,n,o,i){return i||F(e,0,n,4),r.write(e,t,n,o,23,4),n+4}function P(e,t,n,o,i){return i||F(e,0,n,8),r.write(e,t,n,o,52,8),n+8}l.prototype.slice=function(e,t){var n,o=this.length;if((e=~~e)<0?(e+=o)<0&&(e=0):e>o&&(e=o),(t=t===undefined?o:~~t)<0?(t+=o)<0&&(t=0):t>o&&(t=o),t0&&(r*=256);)o+=this[e+--t]*r;return o},l.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var o=this[e],r=1,i=0;++i=(r*=128)&&(o-=Math.pow(2,8*t)),o},l.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var o=t,r=1,i=this[e+--o];o>0&&(r*=256);)i+=this[e+--o]*r;return i>=(r*=128)&&(i-=Math.pow(2,8*t)),i},l.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),r.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),r.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),r.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),r.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,n,o){e=+e,t|=0,n|=0,o||E(this,e,t,n,Math.pow(2,8*n)-1,0);var r=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+r]=e/i&255;return t+n},l.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):T(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):T(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,n,o){if(e=+e,t|=0,!o){var r=Math.pow(2,8*n-1);E(this,e,t,n,r-1,-r)}var i=0,a=1,c=0;for(this[t]=255&e;++i>0)-c&255;return t+n},l.prototype.writeIntBE=function(e,t,n,o){if(e=+e,t|=0,!o){var r=Math.pow(2,8*n-1);E(this,e,t,n,r-1,-r)}var i=n-1,a=1,c=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===c&&0!==this[t+i+1]&&(c=1),this[t+i]=(e/a>>0)-c&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):T(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):T(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,n){return M(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return M(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return P(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return P(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,o){if(n||(n=0),o||0===o||(o=this.length),t>=e.length&&(t=e.length),t||(t=0),o>0&&o=this.length)throw new RangeError("sourceStart out of bounds");if(o<0)throw new RangeError("sourceEnd out of bounds");o>this.length&&(o=this.length),e.length-t=0;--r)e[r+t]=this[r+n];else if(i<1e3||!l.TYPED_ARRAY_SUPPORT)for(r=0;r>>=0,n=n===undefined?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!r){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===o){(t-=3)>-1&&i.push(239,191,189);continue}r=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(t-=3)>-1&&i.push(239,191,189);if(r=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function U(e){return o.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(O,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function z(e,t,n,o){for(var r=0;r=t.length||r>=e.length);++r)t[r+n]=e[r];return r}}).call(this,n(107))},function(e,t,n){"use strict";t.byteLength=function(e){var t=s(e),n=t[0],o=t[1];return 3*(n+o)/4-o},t.toByteArray=function(e){var t,n,o=s(e),a=o[0],c=o[1],l=new i(function(e,t,n){return 3*(t+n)/4-n}(0,a,c)),d=0,u=c>0?a-4:a;for(n=0;n>16&255,l[d++]=t>>8&255,l[d++]=255&t;2===c&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,l[d++]=255&t);1===c&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,l[d++]=t>>8&255,l[d++]=255&t);return l},t.fromByteArray=function(e){for(var t,n=e.length,r=n%3,i=[],a=0,c=n-r;ac?c:a+16383));1===r?(t=e[n-1],i.push(o[t>>2]+o[t<<4&63]+"==")):2===r&&(t=(e[n-2]<<8)+e[n-1],i.push(o[t>>10]+o[t>>4&63]+o[t<<2&63]+"="));return i.join("")};for(var o=[],r=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=0,l=a.length;c0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function d(e,t,n){for(var r,i,a=[],c=t;c>18&63]+o[i>>12&63]+o[i>>6&63]+o[63&i]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},function(e,t,n){"use strict";t.read=function(e,t,n,o,r){var i,a,c=8*r-o-1,l=(1<>1,d=-7,u=n?r-1:0,p=n?-1:1,m=e[t+u];for(u+=p,i=m&(1<<-d)-1,m>>=-d,d+=c;d>0;i=256*i+e[t+u],u+=p,d-=8);for(a=i&(1<<-d)-1,i>>=-d,d+=o;d>0;a=256*a+e[t+u],u+=p,d-=8);if(0===i)i=1-s;else{if(i===l)return a?NaN:(m?-1:1)*Infinity;a+=Math.pow(2,o),i-=s}return(m?-1:1)*a*Math.pow(2,i-o)},t.write=function(e,t,n,o,r,i){var a,c,l,s=8*i-r-1,d=(1<>1,p=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,m=o?0:i-1,h=o?1:-1,f=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===Infinity?(c=isNaN(t)?1:0,a=d):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+u>=1?p/l:p*Math.pow(2,1-u))*l>=2&&(a++,l/=2),a+u>=d?(c=0,a=d):a+u>=1?(c=(t*l-1)*Math.pow(2,r),a+=u):(c=t*Math.pow(2,u-1)*Math.pow(2,r),a=0));r>=8;e[n+m]=255&c,m+=h,c/=256,r-=8);for(a=a<0;e[n+m]=255&a,m+=h,a/=256,s-=8);e[n+m-h]|=128*f}},function(e,t,n){"use strict";var o={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==o.call(e)}},function(e,t,n){"use strict";var o=n(20),r=Object.prototype.hasOwnProperty,i=Object.prototype.toString;e.exports=new o("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,o,a,c,l=[],s=e;for(t=0,n=s.length;t3)return!1;if("/"!==t[t.length-o.length-1])return!1}return!0},construct:function(e){var t=e,n=/\/([gim]*)$/.exec(e),o="";return"/"===t[0]&&(n&&(o=n[1]),t=t.slice(1,t.length-o.length-1)),new RegExp(t,o)},predicate:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},represent:function(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}})},function(e,t,n){"use strict";var o;try{o=n(519)}catch(i){"undefined"!=typeof window&&(o=window.esprima)}var r=n(20);e.exports=new r("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:function(e){if(null===e)return!1;try{var t="("+e+")",n=o.parse(t,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&("ArrowFunctionExpression"===n.body[0].expression.type||"FunctionExpression"===n.body[0].expression.type)}catch(r){return!1}},construct:function(e){var t,n="("+e+")",r=o.parse(n,{range:!0}),i=[];if("Program"!==r.type||1!==r.body.length||"ExpressionStatement"!==r.body[0].type||"ArrowFunctionExpression"!==r.body[0].expression.type&&"FunctionExpression"!==r.body[0].expression.type)throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach((function(e){i.push(e.name)})),t=r.body[0].expression.body.range,"BlockStatement"===r.body[0].expression.body.type?new Function(i,n.slice(t[0]+1,t[1]-1)):new Function(i,"return "+n.slice(t[0],t[1]))},predicate:function(e){return"[object Function]"===Object.prototype.toString.call(e)},represent:function(e){return e.toString()}})},function(e,t,n){"use strict";var o;o=function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={exports:{},id:o,loaded:!1};return e[o].call(r.exports,r,r.exports,n),r.loaded=!0,r.exports}return n.m=e,n.c=t,n.p="",n(0)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),r=n(3),i=n(8),a=n(15);function c(e,t,n){var a=null,c=function(e,t){n&&n(e,t),a&&a.visit(e,t)},l="function"==typeof n?c:null,s=!1;if(t){s="boolean"==typeof t.comment&&t.comment;var d="boolean"==typeof t.attachComment&&t.attachComment;(s||d)&&((a=new o.CommentHandler).attach=d,t.comment=!0,l=c)}var u,p=!1;t&&"string"==typeof t.sourceType&&(p="module"===t.sourceType),u=t&&"boolean"==typeof t.jsx&&t.jsx?new r.JSXParser(e,t,l):new i.Parser(e,t,l);var m=p?u.parseModule():u.parseScript();return s&&a&&(m.comments=a.comments),u.config.tokens&&(m.tokens=u.tokens),u.config.tolerant&&(m.errors=u.errorHandler.errors),m}t.parse=c,t.parseModule=function(e,t,n){var o=t||{};return o.sourceType="module",c(e,o,n)},t.parseScript=function(e,t,n){var o=t||{};return o.sourceType="script",c(e,o,n)},t.tokenize=function(e,t,n){var o,r=new a.Tokenizer(e,t);o=[];try{for(;;){var i=r.getNextToken();if(!i)break;n&&(i=n(i)),o.push(i)}}catch(c){r.errorHandler.tolerate(c)}return r.errorHandler.tolerant&&(o.errors=r.errors()),o};var l=n(2);t.Syntax=l.Syntax,t.version="4.0.1"},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=function(){function e(){this.attach=!1,this.comments=[],this.stack=[],this.leading=[],this.trailing=[]}return e.prototype.insertInnerComments=function(e,t){if(e.type===o.Syntax.BlockStatement&&0===e.body.length){for(var n=[],r=this.leading.length-1;r>=0;--r){var i=this.leading[r];t.end.offset>=i.start&&(n.unshift(i.comment),this.leading.splice(r,1),this.trailing.splice(r,1))}n.length&&(e.innerComments=n)}},e.prototype.findTrailingComments=function(e){var t=[];if(this.trailing.length>0){for(var n=this.trailing.length-1;n>=0;--n){var o=this.trailing[n];o.start>=e.end.offset&&t.unshift(o.comment)}return this.trailing.length=0,t}var r=this.stack[this.stack.length-1];if(r&&r.node.trailingComments){var i=r.node.trailingComments[0];i&&i.range[0]>=e.end.offset&&(t=r.node.trailingComments,delete r.node.trailingComments)}return t},e.prototype.findLeadingComments=function(e){for(var t,n=[];this.stack.length>0&&((i=this.stack[this.stack.length-1])&&i.start>=e.start.offset);)t=i.node,this.stack.pop();if(t){for(var o=(t.leadingComments?t.leadingComments.length:0)-1;o>=0;--o){var r=t.leadingComments[o];r.range[1]<=e.start.offset&&(n.unshift(r),t.leadingComments.splice(o,1))}return t.leadingComments&&0===t.leadingComments.length&&delete t.leadingComments,n}for(o=this.leading.length-1;o>=0;--o){var i;(i=this.leading[o]).start<=e.start.offset&&(n.unshift(i.comment),this.leading.splice(o,1))}return n},e.prototype.visitNode=function(e,t){if(!(e.type===o.Syntax.Program&&e.body.length>0)){this.insertInnerComments(e,t);var n=this.findTrailingComments(t),r=this.findLeadingComments(t);r.length>0&&(e.leadingComments=r),n.length>0&&(e.trailingComments=n),this.stack.push({node:e,start:t.start.offset})}},e.prototype.visitComment=function(e,t){var n="L"===e.type[0]?"Line":"Block",o={type:n,value:e.value};if(e.range&&(o.range=e.range),e.loc&&(o.loc=e.loc),this.comments.push(o),this.attach){var r={comment:{type:n,value:e.value,range:[t.start.offset,t.end.offset]},start:t.start.offset};e.loc&&(r.comment.loc=e.loc),e.type=n,this.leading.push(r),this.trailing.push(r)}},e.prototype.visit=function(e,t){"LineComment"===e.type||"BlockComment"===e.type?this.visitComment(e,t):this.attach&&this.visitNode(e,t)},e}();t.CommentHandler=r},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",AwaitExpression:"AwaitExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function(e,t,n){var o,r=this&&this.__extends||(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var i=n(4),a=n(5),c=n(6),l=n(7),s=n(8),d=n(13),u=n(14);function p(e){var t;switch(e.type){case c.JSXSyntax.JSXIdentifier:t=e.name;break;case c.JSXSyntax.JSXNamespacedName:var n=e;t=p(n.namespace)+":"+p(n.name);break;case c.JSXSyntax.JSXMemberExpression:var o=e;t=p(o.object)+"."+p(o.property)}return t}d.TokenName[100]="JSXIdentifier",d.TokenName[101]="JSXText";var m=function(e){function t(t,n,o){return e.call(this,t,n,o)||this}return r(t,e),t.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():e.prototype.parsePrimaryExpression.call(this)},t.prototype.startJSX=function(){this.scanner.index=this.startMarker.index,this.scanner.lineNumber=this.startMarker.line,this.scanner.lineStart=this.startMarker.index-this.startMarker.column},t.prototype.finishJSX=function(){this.nextToken()},t.prototype.reenterJSX=function(){this.startJSX(),this.expectJSX("}"),this.config.tokens&&this.tokens.pop()},t.prototype.createJSXNode=function(){return this.collectComments(),{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.scanXHTMLEntity=function(e){for(var t="&",n=!0,o=!1,r=!1,a=!1;!this.scanner.eof()&&n&&!o;){var c=this.scanner.source[this.scanner.index];if(c===e)break;if(o=";"===c,t+=c,++this.scanner.index,!o)switch(t.length){case 2:r="#"===c;break;case 3:r&&(n=(a="x"===c)||i.Character.isDecimalDigit(c.charCodeAt(0)),r=r&&!a);break;default:n=(n=n&&!(r&&!i.Character.isDecimalDigit(c.charCodeAt(0))))&&!(a&&!i.Character.isHexDigit(c.charCodeAt(0)))}}if(n&&o&&t.length>2){var l=t.substr(1,t.length-2);r&&l.length>1?t=String.fromCharCode(parseInt(l.substr(1),10)):a&&l.length>2?t=String.fromCharCode(parseInt("0"+l.substr(1),16)):r||a||!u.XHTMLEntities[l]||(t=u.XHTMLEntities[l])}return t},t.prototype.lexJSX=function(){var e=this.scanner.source.charCodeAt(this.scanner.index);if(60===e||62===e||47===e||58===e||61===e||123===e||125===e)return{type:7,value:c=this.scanner.source[this.scanner.index++],lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index};if(34===e||39===e){for(var t=this.scanner.index,n=this.scanner.source[this.scanner.index++],o="";!this.scanner.eof()&&(l=this.scanner.source[this.scanner.index++])!==n;)o+="&"===l?this.scanXHTMLEntity(n):l;return{type:8,value:o,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:t,end:this.scanner.index}}if(46===e){var r=this.scanner.source.charCodeAt(this.scanner.index+1),a=this.scanner.source.charCodeAt(this.scanner.index+2),c=46===r&&46===a?"...":".";return t=this.scanner.index,this.scanner.index+=c.length,{type:7,value:c,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:t,end:this.scanner.index}}if(96===e)return{type:10,value:"",lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index};if(i.Character.isIdentifierStart(e)&&92!==e){for(t=this.scanner.index,++this.scanner.index;!this.scanner.eof();){var l=this.scanner.source.charCodeAt(this.scanner.index);if(i.Character.isIdentifierPart(l)&&92!==l)++this.scanner.index;else{if(45!==l)break;++this.scanner.index}}return{type:100,value:this.scanner.source.slice(t,this.scanner.index),lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:t,end:this.scanner.index}}return this.scanner.lex()},t.prototype.nextJSXToken=function(){this.collectComments(),this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;var e=this.lexJSX();return this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart,this.config.tokens&&this.tokens.push(this.convertToken(e)),e},t.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;for(var e=this.scanner.index,t="";!this.scanner.eof();){var n=this.scanner.source[this.scanner.index];if("{"===n||"<"===n)break;++this.scanner.index,t+=n,i.Character.isLineTerminator(n.charCodeAt(0))&&(++this.scanner.lineNumber,"\r"===n&&"\n"===this.scanner.source[this.scanner.index]&&++this.scanner.index,this.scanner.lineStart=this.scanner.index)}this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart;var o={type:101,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:e,end:this.scanner.index};return t.length>0&&this.config.tokens&&this.tokens.push(this.convertToken(o)),o},t.prototype.peekJSXToken=function(){var e=this.scanner.saveState();this.scanner.scanComments();var t=this.lexJSX();return this.scanner.restoreState(e),t},t.prototype.expectJSX=function(e){var t=this.nextJSXToken();7===t.type&&t.value===e||this.throwUnexpectedToken(t)},t.prototype.matchJSX=function(e){var t=this.peekJSXToken();return 7===t.type&&t.value===e},t.prototype.parseJSXIdentifier=function(){var e=this.createJSXNode(),t=this.nextJSXToken();return 100!==t.type&&this.throwUnexpectedToken(t),this.finalize(e,new a.JSXIdentifier(t.value))},t.prototype.parseJSXElementName=function(){var e=this.createJSXNode(),t=this.parseJSXIdentifier();if(this.matchJSX(":")){var n=t;this.expectJSX(":");var o=this.parseJSXIdentifier();t=this.finalize(e,new a.JSXNamespacedName(n,o))}else if(this.matchJSX("."))for(;this.matchJSX(".");){var r=t;this.expectJSX(".");var i=this.parseJSXIdentifier();t=this.finalize(e,new a.JSXMemberExpression(r,i))}return t},t.prototype.parseJSXAttributeName=function(){var e,t=this.createJSXNode(),n=this.parseJSXIdentifier();if(this.matchJSX(":")){var o=n;this.expectJSX(":");var r=this.parseJSXIdentifier();e=this.finalize(t,new a.JSXNamespacedName(o,r))}else e=n;return e},t.prototype.parseJSXStringLiteralAttribute=function(){var e=this.createJSXNode(),t=this.nextJSXToken();8!==t.type&&this.throwUnexpectedToken(t);var n=this.getTokenRaw(t);return this.finalize(e,new l.Literal(t.value,n))},t.prototype.parseJSXExpressionAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.finishJSX(),this.match("}")&&this.tolerateError("JSX attributes must only be assigned a non-empty expression");var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new a.JSXExpressionContainer(t))},t.prototype.parseJSXAttributeValue=function(){return this.matchJSX("{")?this.parseJSXExpressionAttribute():this.matchJSX("<")?this.parseJSXElement():this.parseJSXStringLiteralAttribute()},t.prototype.parseJSXNameValueAttribute=function(){var e=this.createJSXNode(),t=this.parseJSXAttributeName(),n=null;return this.matchJSX("=")&&(this.expectJSX("="),n=this.parseJSXAttributeValue()),this.finalize(e,new a.JSXAttribute(t,n))},t.prototype.parseJSXSpreadAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.expectJSX("..."),this.finishJSX();var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new a.JSXSpreadAttribute(t))},t.prototype.parseJSXAttributes=function(){for(var e=[];!this.matchJSX("/")&&!this.matchJSX(">");){var t=this.matchJSX("{")?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();e.push(t)}return e},t.prototype.parseJSXOpeningElement=function(){var e=this.createJSXNode();this.expectJSX("<");var t=this.parseJSXElementName(),n=this.parseJSXAttributes(),o=this.matchJSX("/");return o&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new a.JSXOpeningElement(t,o,n))},t.prototype.parseJSXBoundaryElement=function(){var e=this.createJSXNode();if(this.expectJSX("<"),this.matchJSX("/")){this.expectJSX("/");var t=this.parseJSXElementName();return this.expectJSX(">"),this.finalize(e,new a.JSXClosingElement(t))}var n=this.parseJSXElementName(),o=this.parseJSXAttributes(),r=this.matchJSX("/");return r&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new a.JSXOpeningElement(n,r,o))},t.prototype.parseJSXEmptyExpression=function(){var e=this.createJSXChildNode();return this.collectComments(),this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart,this.finalize(e,new a.JSXEmptyExpression)},t.prototype.parseJSXExpressionContainer=function(){var e,t=this.createJSXNode();return this.expectJSX("{"),this.matchJSX("}")?(e=this.parseJSXEmptyExpression(),this.expectJSX("}")):(this.finishJSX(),e=this.parseAssignmentExpression(),this.reenterJSX()),this.finalize(t,new a.JSXExpressionContainer(e))},t.prototype.parseJSXChildren=function(){for(var e=[];!this.scanner.eof();){var t=this.createJSXChildNode(),n=this.nextJSXText();if(n.start0))break;i=this.finalize(e.node,new a.JSXElement(e.opening,e.children,e.closing)),(e=t[t.length-1]).children.push(i),t.pop()}}return e},t.prototype.parseJSXElement=function(){var e=this.createJSXNode(),t=this.parseJSXOpeningElement(),n=[],o=null;if(!t.selfClosing){var r=this.parseComplexJSXElement({node:e,opening:t,closing:o,children:n});n=r.children,o=r.closing}return this.finalize(e,new a.JSXElement(t,n,o))},t.prototype.parseJSXRoot=function(){this.config.tokens&&this.tokens.pop(),this.startJSX();var e=this.parseJSXElement();return this.finishJSX(),e},t.prototype.isStartOfExpression=function(){return e.prototype.isStartOfExpression.call(this)||this.match("<")},t}(s.Parser);t.JSXParser=m},function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/};t.Character={fromCodePoint:function(e){return e<65536?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))},isWhiteSpace:function(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0},isLineTerminator:function(e){return 10===e||13===e||8232===e||8233===e},isIdentifierStart:function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&n.NonAsciiIdentifierStart.test(t.Character.fromCodePoint(e))},isIdentifierPart:function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&n.NonAsciiIdentifierPart.test(t.Character.fromCodePoint(e))},isDecimalDigit:function(e){return e>=48&&e<=57},isHexDigit:function(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102},isOctalDigit:function(e){return e>=48&&e<=55}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(6),r=function(e){this.type=o.JSXSyntax.JSXClosingElement,this.name=e};t.JSXClosingElement=r;var i=function(e,t,n){this.type=o.JSXSyntax.JSXElement,this.openingElement=e,this.children=t,this.closingElement=n};t.JSXElement=i;var a=function(){this.type=o.JSXSyntax.JSXEmptyExpression};t.JSXEmptyExpression=a;var c=function(e){this.type=o.JSXSyntax.JSXExpressionContainer,this.expression=e};t.JSXExpressionContainer=c;var l=function(e){this.type=o.JSXSyntax.JSXIdentifier,this.name=e};t.JSXIdentifier=l;var s=function(e,t){this.type=o.JSXSyntax.JSXMemberExpression,this.object=e,this.property=t};t.JSXMemberExpression=s;var d=function(e,t){this.type=o.JSXSyntax.JSXAttribute,this.name=e,this.value=t};t.JSXAttribute=d;var u=function(e,t){this.type=o.JSXSyntax.JSXNamespacedName,this.namespace=e,this.name=t};t.JSXNamespacedName=u;var p=function(e,t,n){this.type=o.JSXSyntax.JSXOpeningElement,this.name=e,this.selfClosing=t,this.attributes=n};t.JSXOpeningElement=p;var m=function(e){this.type=o.JSXSyntax.JSXSpreadAttribute,this.argument=e};t.JSXSpreadAttribute=m;var h=function(e,t){this.type=o.JSXSyntax.JSXText,this.value=e,this.raw=t};t.JSXText=h},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.JSXSyntax={JSXAttribute:"JSXAttribute",JSXClosingElement:"JSXClosingElement",JSXElement:"JSXElement",JSXEmptyExpression:"JSXEmptyExpression",JSXExpressionContainer:"JSXExpressionContainer",JSXIdentifier:"JSXIdentifier",JSXMemberExpression:"JSXMemberExpression",JSXNamespacedName:"JSXNamespacedName",JSXOpeningElement:"JSXOpeningElement",JSXSpreadAttribute:"JSXSpreadAttribute",JSXText:"JSXText"}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=function(e){this.type=o.Syntax.ArrayExpression,this.elements=e};t.ArrayExpression=r;var i=function(e){this.type=o.Syntax.ArrayPattern,this.elements=e};t.ArrayPattern=i;var a=function(e,t,n){this.type=o.Syntax.ArrowFunctionExpression,this.id=null,this.params=e,this.body=t,this.generator=!1,this.expression=n,this.async=!1};t.ArrowFunctionExpression=a;var c=function(e,t,n){this.type=o.Syntax.AssignmentExpression,this.operator=e,this.left=t,this.right=n};t.AssignmentExpression=c;var l=function(e,t){this.type=o.Syntax.AssignmentPattern,this.left=e,this.right=t};t.AssignmentPattern=l;var s=function(e,t,n){this.type=o.Syntax.ArrowFunctionExpression,this.id=null,this.params=e,this.body=t,this.generator=!1,this.expression=n,this.async=!0};t.AsyncArrowFunctionExpression=s;var d=function(e,t,n){this.type=o.Syntax.FunctionDeclaration,this.id=e,this.params=t,this.body=n,this.generator=!1,this.expression=!1,this.async=!0};t.AsyncFunctionDeclaration=d;var u=function(e,t,n){this.type=o.Syntax.FunctionExpression,this.id=e,this.params=t,this.body=n,this.generator=!1,this.expression=!1,this.async=!0};t.AsyncFunctionExpression=u;var p=function(e){this.type=o.Syntax.AwaitExpression,this.argument=e};t.AwaitExpression=p;var m=function(e,t,n){var r="||"===e||"&&"===e;this.type=r?o.Syntax.LogicalExpression:o.Syntax.BinaryExpression,this.operator=e,this.left=t,this.right=n};t.BinaryExpression=m;var h=function(e){this.type=o.Syntax.BlockStatement,this.body=e};t.BlockStatement=h;var f=function(e){this.type=o.Syntax.BreakStatement,this.label=e};t.BreakStatement=f;var C=function(e,t){this.type=o.Syntax.CallExpression,this.callee=e,this.arguments=t};t.CallExpression=C;var g=function(e,t){this.type=o.Syntax.CatchClause,this.param=e,this.body=t};t.CatchClause=g;var N=function(e){this.type=o.Syntax.ClassBody,this.body=e};t.ClassBody=N;var b=function(e,t,n){this.type=o.Syntax.ClassDeclaration,this.id=e,this.superClass=t,this.body=n};t.ClassDeclaration=b;var V=function(e,t,n){this.type=o.Syntax.ClassExpression,this.id=e,this.superClass=t,this.body=n};t.ClassExpression=V;var v=function(e,t){this.type=o.Syntax.MemberExpression,this.computed=!0,this.object=e,this.property=t};t.ComputedMemberExpression=v;var x=function(e,t,n){this.type=o.Syntax.ConditionalExpression,this.test=e,this.consequent=t,this.alternate=n};t.ConditionalExpression=x;var y=function(e){this.type=o.Syntax.ContinueStatement,this.label=e};t.ContinueStatement=y;var k=function(){this.type=o.Syntax.DebuggerStatement};t.DebuggerStatement=k;var w=function(e,t){this.type=o.Syntax.ExpressionStatement,this.expression=e,this.directive=t};t.Directive=w;var _=function(e,t){this.type=o.Syntax.DoWhileStatement,this.body=e,this.test=t};t.DoWhileStatement=_;var B=function(){this.type=o.Syntax.EmptyStatement};t.EmptyStatement=B;var S=function(e){this.type=o.Syntax.ExportAllDeclaration,this.source=e};t.ExportAllDeclaration=S;var L=function(e){this.type=o.Syntax.ExportDefaultDeclaration,this.declaration=e};t.ExportDefaultDeclaration=L;var A=function(e,t,n){this.type=o.Syntax.ExportNamedDeclaration,this.declaration=e,this.specifiers=t,this.source=n};t.ExportNamedDeclaration=A;var I=function(e,t){this.type=o.Syntax.ExportSpecifier,this.exported=t,this.local=e};t.ExportSpecifier=I;var E=function(e){this.type=o.Syntax.ExpressionStatement,this.expression=e};t.ExpressionStatement=E;var D=function(e,t,n){this.type=o.Syntax.ForInStatement,this.left=e,this.right=t,this.body=n,this.each=!1};t.ForInStatement=D;var T=function(e,t,n){this.type=o.Syntax.ForOfStatement,this.left=e,this.right=t,this.body=n};t.ForOfStatement=T;var F=function(e,t,n,r){this.type=o.Syntax.ForStatement,this.init=e,this.test=t,this.update=n,this.body=r};t.ForStatement=F;var M=function(e,t,n,r){this.type=o.Syntax.FunctionDeclaration,this.id=e,this.params=t,this.body=n,this.generator=r,this.expression=!1,this.async=!1};t.FunctionDeclaration=M;var P=function(e,t,n,r){this.type=o.Syntax.FunctionExpression,this.id=e,this.params=t,this.body=n,this.generator=r,this.expression=!1,this.async=!1};t.FunctionExpression=P;var O=function(e){this.type=o.Syntax.Identifier,this.name=e};t.Identifier=O;var R=function(e,t,n){this.type=o.Syntax.IfStatement,this.test=e,this.consequent=t,this.alternate=n};t.IfStatement=R;var j=function(e,t){this.type=o.Syntax.ImportDeclaration,this.specifiers=e,this.source=t};t.ImportDeclaration=j;var U=function(e){this.type=o.Syntax.ImportDefaultSpecifier,this.local=e};t.ImportDefaultSpecifier=U;var z=function(e){this.type=o.Syntax.ImportNamespaceSpecifier,this.local=e};t.ImportNamespaceSpecifier=z;var W=function(e,t){this.type=o.Syntax.ImportSpecifier,this.local=e,this.imported=t};t.ImportSpecifier=W;var H=function(e,t){this.type=o.Syntax.LabeledStatement,this.label=e,this.body=t};t.LabeledStatement=H;var K=function(e,t){this.type=o.Syntax.Literal,this.value=e,this.raw=t};t.Literal=K;var q=function(e,t){this.type=o.Syntax.MetaProperty,this.meta=e,this.property=t};t.MetaProperty=q;var Y=function(e,t,n,r,i){this.type=o.Syntax.MethodDefinition,this.key=e,this.computed=t,this.value=n,this.kind=r,this["static"]=i};t.MethodDefinition=Y;var G=function(e){this.type=o.Syntax.Program,this.body=e,this.sourceType="module"};t.Module=G;var X=function(e,t){this.type=o.Syntax.NewExpression,this.callee=e,this.arguments=t};t.NewExpression=X;var J=function(e){this.type=o.Syntax.ObjectExpression,this.properties=e};t.ObjectExpression=J;var $=function(e){this.type=o.Syntax.ObjectPattern,this.properties=e};t.ObjectPattern=$;var Z=function(e,t,n,r,i,a){this.type=o.Syntax.Property,this.key=t,this.computed=n,this.value=r,this.kind=e,this.method=i,this.shorthand=a};t.Property=Z;var Q=function(e,t,n,r){this.type=o.Syntax.Literal,this.value=e,this.raw=t,this.regex={pattern:n,flags:r}};t.RegexLiteral=Q;var ee=function(e){this.type=o.Syntax.RestElement,this.argument=e};t.RestElement=ee;var te=function(e){this.type=o.Syntax.ReturnStatement,this.argument=e};t.ReturnStatement=te;var ne=function(e){this.type=o.Syntax.Program,this.body=e,this.sourceType="script"};t.Script=ne;var oe=function(e){this.type=o.Syntax.SequenceExpression,this.expressions=e};t.SequenceExpression=oe;var re=function(e){this.type=o.Syntax.SpreadElement,this.argument=e};t.SpreadElement=re;var ie=function(e,t){this.type=o.Syntax.MemberExpression,this.computed=!1,this.object=e,this.property=t};t.StaticMemberExpression=ie;var ae=function(){this.type=o.Syntax.Super};t.Super=ae;var ce=function(e,t){this.type=o.Syntax.SwitchCase,this.test=e,this.consequent=t};t.SwitchCase=ce;var le=function(e,t){this.type=o.Syntax.SwitchStatement,this.discriminant=e,this.cases=t};t.SwitchStatement=le;var se=function(e,t){this.type=o.Syntax.TaggedTemplateExpression,this.tag=e,this.quasi=t};t.TaggedTemplateExpression=se;var de=function(e,t){this.type=o.Syntax.TemplateElement,this.value=e,this.tail=t};t.TemplateElement=de;var ue=function(e,t){this.type=o.Syntax.TemplateLiteral,this.quasis=e,this.expressions=t};t.TemplateLiteral=ue;var pe=function(){this.type=o.Syntax.ThisExpression};t.ThisExpression=pe;var me=function(e){this.type=o.Syntax.ThrowStatement,this.argument=e};t.ThrowStatement=me;var he=function(e,t,n){this.type=o.Syntax.TryStatement,this.block=e,this.handler=t,this.finalizer=n};t.TryStatement=he;var fe=function(e,t){this.type=o.Syntax.UnaryExpression,this.operator=e,this.argument=t,this.prefix=!0};t.UnaryExpression=fe;var Ce=function(e,t,n){this.type=o.Syntax.UpdateExpression,this.operator=e,this.argument=t,this.prefix=n};t.UpdateExpression=Ce;var ge=function(e,t){this.type=o.Syntax.VariableDeclaration,this.declarations=e,this.kind=t};t.VariableDeclaration=ge;var Ne=function(e,t){this.type=o.Syntax.VariableDeclarator,this.id=e,this.init=t};t.VariableDeclarator=Ne;var be=function(e,t){this.type=o.Syntax.WhileStatement,this.test=e,this.body=t};t.WhileStatement=be;var Ve=function(e,t){this.type=o.Syntax.WithStatement,this.object=e,this.body=t};t.WithStatement=Ve;var ve=function(e,t){this.type=o.Syntax.YieldExpression,this.argument=e,this.delegate=t};t.YieldExpression=ve},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),r=n(10),i=n(11),a=n(7),c=n(12),l=n(2),s=n(13),d=function(){function e(e,t,n){void 0===t&&(t={}),this.config={range:"boolean"==typeof t.range&&t.range,loc:"boolean"==typeof t.loc&&t.loc,source:null,tokens:"boolean"==typeof t.tokens&&t.tokens,comment:"boolean"==typeof t.comment&&t.comment,tolerant:"boolean"==typeof t.tolerant&&t.tolerant},this.config.loc&&t.source&&null!==t.source&&(this.config.source=String(t.source)),this.delegate=n,this.errorHandler=new r.ErrorHandler,this.errorHandler.tolerant=this.config.tolerant,this.scanner=new c.Scanner(e,this.errorHandler),this.scanner.trackComment=this.config.comment,this.operatorPrecedence={")":0,";":0,",":0,"=":0,"]":0,"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":11,"/":11,"%":11},this.lookahead={type:2,value:"",lineNumber:this.scanner.lineNumber,lineStart:0,start:0,end:0},this.hasLineTerminator=!1,this.context={isModule:!1,await:!1,allowIn:!0,allowStrictDirective:!0,allowYield:!0,firstCoverInitializedNameError:null,isAssignmentTarget:!1,isBindingElement:!1,inFunctionBody:!1,inIteration:!1,inSwitch:!1,labelSet:{},strict:!1},this.tokens=[],this.startMarker={index:0,line:this.scanner.lineNumber,column:0},this.lastMarker={index:0,line:this.scanner.lineNumber,column:0},this.nextToken(),this.lastMarker={index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}}return e.prototype.throwError=function(e){for(var t=[],n=1;n0&&this.delegate)for(var t=0;t>="===e||">>>="===e||"&="===e||"^="===e||"|="===e},e.prototype.isolateCoverGrammar=function(e){var t=this.context.isBindingElement,n=this.context.isAssignmentTarget,o=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var r=e.call(this);return null!==this.context.firstCoverInitializedNameError&&this.throwUnexpectedToken(this.context.firstCoverInitializedNameError),this.context.isBindingElement=t,this.context.isAssignmentTarget=n,this.context.firstCoverInitializedNameError=o,r},e.prototype.inheritCoverGrammar=function(e){var t=this.context.isBindingElement,n=this.context.isAssignmentTarget,o=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var r=e.call(this);return this.context.isBindingElement=this.context.isBindingElement&&t,this.context.isAssignmentTarget=this.context.isAssignmentTarget&&n,this.context.firstCoverInitializedNameError=o||this.context.firstCoverInitializedNameError,r},e.prototype.consumeSemicolon=function(){this.match(";")?this.nextToken():this.hasLineTerminator||(2===this.lookahead.type||this.match("}")||this.throwUnexpectedToken(this.lookahead),this.lastMarker.index=this.startMarker.index,this.lastMarker.line=this.startMarker.line,this.lastMarker.column=this.startMarker.column)},e.prototype.parsePrimaryExpression=function(){var e,t,n,o=this.createNode();switch(this.lookahead.type){case 3:(this.context.isModule||this.context.await)&&"await"===this.lookahead.value&&this.tolerateUnexpectedToken(this.lookahead),e=this.matchAsyncFunction()?this.parseFunctionExpression():this.finalize(o,new a.Identifier(this.nextToken().value));break;case 6:case 8:this.context.strict&&this.lookahead.octal&&this.tolerateUnexpectedToken(this.lookahead,i.Messages.StrictOctalLiteral),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),n=this.getTokenRaw(t),e=this.finalize(o,new a.Literal(t.value,n));break;case 1:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),n=this.getTokenRaw(t),e=this.finalize(o,new a.Literal("true"===t.value,n));break;case 5:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),n=this.getTokenRaw(t),e=this.finalize(o,new a.Literal(null,n));break;case 10:e=this.parseTemplateLiteral();break;case 7:switch(this.lookahead.value){case"(":this.context.isBindingElement=!1,e=this.inheritCoverGrammar(this.parseGroupExpression);break;case"[":e=this.inheritCoverGrammar(this.parseArrayInitializer);break;case"{":e=this.inheritCoverGrammar(this.parseObjectInitializer);break;case"/":case"/=":this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.scanner.index=this.startMarker.index,t=this.nextRegexToken(),n=this.getTokenRaw(t),e=this.finalize(o,new a.RegexLiteral(t.regex,n,t.pattern,t.flags));break;default:e=this.throwUnexpectedToken(this.nextToken())}break;case 4:!this.context.strict&&this.context.allowYield&&this.matchKeyword("yield")?e=this.parseIdentifierName():!this.context.strict&&this.matchKeyword("let")?e=this.finalize(o,new a.Identifier(this.nextToken().value)):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.matchKeyword("function")?e=this.parseFunctionExpression():this.matchKeyword("this")?(this.nextToken(),e=this.finalize(o,new a.ThisExpression)):e=this.matchKeyword("class")?this.parseClassExpression():this.throwUnexpectedToken(this.nextToken()));break;default:e=this.throwUnexpectedToken(this.nextToken())}return e},e.prototype.parseSpreadElement=function(){var e=this.createNode();this.expect("...");var t=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(e,new a.SpreadElement(t))},e.prototype.parseArrayInitializer=function(){var e=this.createNode(),t=[];for(this.expect("[");!this.match("]");)if(this.match(","))this.nextToken(),t.push(null);else if(this.match("...")){var n=this.parseSpreadElement();this.match("]")||(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.expect(",")),t.push(n)}else t.push(this.inheritCoverGrammar(this.parseAssignmentExpression)),this.match("]")||this.expect(",");return this.expect("]"),this.finalize(e,new a.ArrayExpression(t))},e.prototype.parsePropertyMethod=function(e){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var t=this.context.strict,n=this.context.allowStrictDirective;this.context.allowStrictDirective=e.simple;var o=this.isolateCoverGrammar(this.parseFunctionSourceElements);return this.context.strict&&e.firstRestricted&&this.tolerateUnexpectedToken(e.firstRestricted,e.message),this.context.strict&&e.stricted&&this.tolerateUnexpectedToken(e.stricted,e.message),this.context.strict=t,this.context.allowStrictDirective=n,o},e.prototype.parsePropertyMethodFunction=function(){var e=this.createNode(),t=this.context.allowYield;this.context.allowYield=!0;var n=this.parseFormalParameters(),o=this.parsePropertyMethod(n);return this.context.allowYield=t,this.finalize(e,new a.FunctionExpression(null,n.params,o,!1))},e.prototype.parsePropertyMethodAsyncFunction=function(){var e=this.createNode(),t=this.context.allowYield,n=this.context.await;this.context.allowYield=!1,this.context.await=!0;var o=this.parseFormalParameters(),r=this.parsePropertyMethod(o);return this.context.allowYield=t,this.context.await=n,this.finalize(e,new a.AsyncFunctionExpression(null,o.params,r))},e.prototype.parseObjectPropertyKey=function(){var e,t=this.createNode(),n=this.nextToken();switch(n.type){case 8:case 6:this.context.strict&&n.octal&&this.tolerateUnexpectedToken(n,i.Messages.StrictOctalLiteral);var o=this.getTokenRaw(n);e=this.finalize(t,new a.Literal(n.value,o));break;case 3:case 1:case 5:case 4:e=this.finalize(t,new a.Identifier(n.value));break;case 7:"["===n.value?(e=this.isolateCoverGrammar(this.parseAssignmentExpression),this.expect("]")):e=this.throwUnexpectedToken(n);break;default:e=this.throwUnexpectedToken(n)}return e},e.prototype.isPropertyKey=function(e,t){return e.type===l.Syntax.Identifier&&e.name===t||e.type===l.Syntax.Literal&&e.value===t},e.prototype.parseObjectProperty=function(e){var t,n=this.createNode(),o=this.lookahead,r=null,c=null,l=!1,s=!1,d=!1,u=!1;if(3===o.type){var p=o.value;this.nextToken(),l=this.match("["),r=(u=!(this.hasLineTerminator||"async"!==p||this.match(":")||this.match("(")||this.match("*")||this.match(",")))?this.parseObjectPropertyKey():this.finalize(n,new a.Identifier(p))}else this.match("*")?this.nextToken():(l=this.match("["),r=this.parseObjectPropertyKey());var m=this.qualifiedPropertyName(this.lookahead);if(3===o.type&&!u&&"get"===o.value&&m)t="get",l=this.match("["),r=this.parseObjectPropertyKey(),this.context.allowYield=!1,c=this.parseGetterMethod();else if(3===o.type&&!u&&"set"===o.value&&m)t="set",l=this.match("["),r=this.parseObjectPropertyKey(),c=this.parseSetterMethod();else if(7===o.type&&"*"===o.value&&m)t="init",l=this.match("["),r=this.parseObjectPropertyKey(),c=this.parseGeneratorMethod(),s=!0;else if(r||this.throwUnexpectedToken(this.lookahead),t="init",this.match(":")&&!u)!l&&this.isPropertyKey(r,"__proto__")&&(e.value&&this.tolerateError(i.Messages.DuplicateProtoProperty),e.value=!0),this.nextToken(),c=this.inheritCoverGrammar(this.parseAssignmentExpression);else if(this.match("("))c=u?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction(),s=!0;else if(3===o.type)if(p=this.finalize(n,new a.Identifier(o.value)),this.match("=")){this.context.firstCoverInitializedNameError=this.lookahead,this.nextToken(),d=!0;var h=this.isolateCoverGrammar(this.parseAssignmentExpression);c=this.finalize(n,new a.AssignmentPattern(p,h))}else d=!0,c=p;else this.throwUnexpectedToken(this.nextToken());return this.finalize(n,new a.Property(t,r,l,c,s,d))},e.prototype.parseObjectInitializer=function(){var e=this.createNode();this.expect("{");for(var t=[],n={value:!1};!this.match("}");)t.push(this.parseObjectProperty(n)),this.match("}")||this.expectCommaSeparator();return this.expect("}"),this.finalize(e,new a.ObjectExpression(t))},e.prototype.parseTemplateHead=function(){o.assert(this.lookahead.head,"Template literal must start with a template head");var e=this.createNode(),t=this.nextToken(),n=t.value,r=t.cooked;return this.finalize(e,new a.TemplateElement({raw:n,cooked:r},t.tail))},e.prototype.parseTemplateElement=function(){10!==this.lookahead.type&&this.throwUnexpectedToken();var e=this.createNode(),t=this.nextToken(),n=t.value,o=t.cooked;return this.finalize(e,new a.TemplateElement({raw:n,cooked:o},t.tail))},e.prototype.parseTemplateLiteral=function(){var e=this.createNode(),t=[],n=[],o=this.parseTemplateHead();for(n.push(o);!o.tail;)t.push(this.parseExpression()),o=this.parseTemplateElement(),n.push(o);return this.finalize(e,new a.TemplateLiteral(n,t))},e.prototype.reinterpretExpressionAsPattern=function(e){switch(e.type){case l.Syntax.Identifier:case l.Syntax.MemberExpression:case l.Syntax.RestElement:case l.Syntax.AssignmentPattern:break;case l.Syntax.SpreadElement:e.type=l.Syntax.RestElement,this.reinterpretExpressionAsPattern(e.argument);break;case l.Syntax.ArrayExpression:e.type=l.Syntax.ArrayPattern;for(var t=0;t")||this.expect("=>"),e={type:"ArrowParameterPlaceHolder",params:[],async:!1};else{var t=this.lookahead,n=[];if(this.match("..."))e=this.parseRestElement(n),this.expect(")"),this.match("=>")||this.expect("=>"),e={type:"ArrowParameterPlaceHolder",params:[e],async:!1};else{var o=!1;if(this.context.isBindingElement=!0,e=this.inheritCoverGrammar(this.parseAssignmentExpression),this.match(",")){var r=[];for(this.context.isAssignmentTarget=!1,r.push(e);2!==this.lookahead.type&&this.match(",");){if(this.nextToken(),this.match(")")){this.nextToken();for(var i=0;i")||this.expect("=>"),this.context.isBindingElement=!1,i=0;i")&&(e.type===l.Syntax.Identifier&&"yield"===e.name&&(o=!0,e={type:"ArrowParameterPlaceHolder",params:[e],async:!1}),!o)){if(this.context.isBindingElement||this.throwUnexpectedToken(this.lookahead),e.type===l.Syntax.SequenceExpression)for(i=0;i")){for(var l=0;l0){this.nextToken(),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;for(var r=[e,this.lookahead],i=t,c=this.isolateCoverGrammar(this.parseExponentiationExpression),l=[i,n.value,c],s=[o];!((o=this.binaryPrecedence(this.lookahead))<=0);){for(;l.length>2&&o<=s[s.length-1];){c=l.pop();var d=l.pop();s.pop(),i=l.pop(),r.pop();var u=this.startNode(r[r.length-1]);l.push(this.finalize(u,new a.BinaryExpression(d,i,c)))}l.push(this.nextToken().value),s.push(o),r.push(this.lookahead),l.push(this.isolateCoverGrammar(this.parseExponentiationExpression))}var p=l.length-1;t=l[p];for(var m=r.pop();p>1;){var h=r.pop(),f=m&&m.lineStart;u=this.startNode(h,f),d=l[p-1],t=this.finalize(u,new a.BinaryExpression(d,l[p-2],t)),p-=2,m=h}}return t},e.prototype.parseConditionalExpression=function(){var e=this.lookahead,t=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match("?")){this.nextToken();var n=this.context.allowIn;this.context.allowIn=!0;var o=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=n,this.expect(":");var r=this.isolateCoverGrammar(this.parseAssignmentExpression);t=this.finalize(this.startNode(e),new a.ConditionalExpression(t,o,r)),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}return t},e.prototype.checkPatternParam=function(e,t){switch(t.type){case l.Syntax.Identifier:this.validateParam(e,t,t.name);break;case l.Syntax.RestElement:this.checkPatternParam(e,t.argument);break;case l.Syntax.AssignmentPattern:this.checkPatternParam(e,t.left);break;case l.Syntax.ArrayPattern:for(var n=0;n")){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var r=e.async,c=this.reinterpretAsCoverFormalsList(e);if(c){this.hasLineTerminator&&this.tolerateUnexpectedToken(this.lookahead),this.context.firstCoverInitializedNameError=null;var s=this.context.strict,d=this.context.allowStrictDirective;this.context.allowStrictDirective=c.simple;var u=this.context.allowYield,p=this.context.await;this.context.allowYield=!0,this.context.await=r;var m=this.startNode(t);this.expect("=>");var h=void 0;if(this.match("{")){var f=this.context.allowIn;this.context.allowIn=!0,h=this.parseFunctionSourceElements(),this.context.allowIn=f}else h=this.isolateCoverGrammar(this.parseAssignmentExpression);var C=h.type!==l.Syntax.BlockStatement;this.context.strict&&c.firstRestricted&&this.throwUnexpectedToken(c.firstRestricted,c.message),this.context.strict&&c.stricted&&this.tolerateUnexpectedToken(c.stricted,c.message),e=r?this.finalize(m,new a.AsyncArrowFunctionExpression(c.params,h,C)):this.finalize(m,new a.ArrowFunctionExpression(c.params,h,C)),this.context.strict=s,this.context.allowStrictDirective=d,this.context.allowYield=u,this.context.await=p}}else if(this.matchAssign()){if(this.context.isAssignmentTarget||this.tolerateError(i.Messages.InvalidLHSInAssignment),this.context.strict&&e.type===l.Syntax.Identifier){var g=e;this.scanner.isRestrictedWord(g.name)&&this.tolerateUnexpectedToken(n,i.Messages.StrictLHSAssignment),this.scanner.isStrictModeReservedWord(g.name)&&this.tolerateUnexpectedToken(n,i.Messages.StrictReservedWord)}this.match("=")?this.reinterpretExpressionAsPattern(e):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1);var N=(n=this.nextToken()).value,b=this.isolateCoverGrammar(this.parseAssignmentExpression);e=this.finalize(this.startNode(t),new a.AssignmentExpression(N,e,b)),this.context.firstCoverInitializedNameError=null}}return e},e.prototype.parseExpression=function(){var e=this.lookahead,t=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var n=[];for(n.push(t);2!==this.lookahead.type&&this.match(",");)this.nextToken(),n.push(this.isolateCoverGrammar(this.parseAssignmentExpression));t=this.finalize(this.startNode(e),new a.SequenceExpression(n))}return t},e.prototype.parseStatementListItem=function(){var e;if(this.context.isAssignmentTarget=!0,this.context.isBindingElement=!0,4===this.lookahead.type)switch(this.lookahead.value){case"export":this.context.isModule||this.tolerateUnexpectedToken(this.lookahead,i.Messages.IllegalExportDeclaration),e=this.parseExportDeclaration();break;case"import":this.context.isModule||this.tolerateUnexpectedToken(this.lookahead,i.Messages.IllegalImportDeclaration),e=this.parseImportDeclaration();break;case"const":e=this.parseLexicalDeclaration({inFor:!1});break;case"function":e=this.parseFunctionDeclaration();break;case"class":e=this.parseClassDeclaration();break;case"let":e=this.isLexicalDeclaration()?this.parseLexicalDeclaration({inFor:!1}):this.parseStatement();break;default:e=this.parseStatement()}else e=this.parseStatement();return e},e.prototype.parseBlock=function(){var e=this.createNode();this.expect("{");for(var t=[];!this.match("}");)t.push(this.parseStatementListItem());return this.expect("}"),this.finalize(e,new a.BlockStatement(t))},e.prototype.parseLexicalBinding=function(e,t){var n=this.createNode(),o=this.parsePattern([],e);this.context.strict&&o.type===l.Syntax.Identifier&&this.scanner.isRestrictedWord(o.name)&&this.tolerateError(i.Messages.StrictVarName);var r=null;return"const"===e?this.matchKeyword("in")||this.matchContextualKeyword("of")||(this.match("=")?(this.nextToken(),r=this.isolateCoverGrammar(this.parseAssignmentExpression)):this.throwError(i.Messages.DeclarationMissingInitializer,"const")):(!t.inFor&&o.type!==l.Syntax.Identifier||this.match("="))&&(this.expect("="),r=this.isolateCoverGrammar(this.parseAssignmentExpression)),this.finalize(n,new a.VariableDeclarator(o,r))},e.prototype.parseBindingList=function(e,t){for(var n=[this.parseLexicalBinding(e,t)];this.match(",");)this.nextToken(),n.push(this.parseLexicalBinding(e,t));return n},e.prototype.isLexicalDeclaration=function(){var e=this.scanner.saveState();this.scanner.scanComments();var t=this.scanner.lex();return this.scanner.restoreState(e),3===t.type||7===t.type&&"["===t.value||7===t.type&&"{"===t.value||4===t.type&&"let"===t.value||4===t.type&&"yield"===t.value},e.prototype.parseLexicalDeclaration=function(e){var t=this.createNode(),n=this.nextToken().value;o.assert("let"===n||"const"===n,"Lexical declaration must be either let or const");var r=this.parseBindingList(n,e);return this.consumeSemicolon(),this.finalize(t,new a.VariableDeclaration(r,n))},e.prototype.parseBindingRestElement=function(e,t){var n=this.createNode();this.expect("...");var o=this.parsePattern(e,t);return this.finalize(n,new a.RestElement(o))},e.prototype.parseArrayPattern=function(e,t){var n=this.createNode();this.expect("[");for(var o=[];!this.match("]");)if(this.match(","))this.nextToken(),o.push(null);else{if(this.match("...")){o.push(this.parseBindingRestElement(e,t));break}o.push(this.parsePatternWithDefault(e,t)),this.match("]")||this.expect(",")}return this.expect("]"),this.finalize(n,new a.ArrayPattern(o))},e.prototype.parsePropertyPattern=function(e,t){var n,o,r=this.createNode(),i=!1,c=!1;if(3===this.lookahead.type){var l=this.lookahead;n=this.parseVariableIdentifier();var s=this.finalize(r,new a.Identifier(l.value));if(this.match("=")){e.push(l),c=!0,this.nextToken();var d=this.parseAssignmentExpression();o=this.finalize(this.startNode(l),new a.AssignmentPattern(s,d))}else this.match(":")?(this.expect(":"),o=this.parsePatternWithDefault(e,t)):(e.push(l),c=!0,o=s)}else i=this.match("["),n=this.parseObjectPropertyKey(),this.expect(":"),o=this.parsePatternWithDefault(e,t);return this.finalize(r,new a.Property("init",n,i,o,!1,c))},e.prototype.parseObjectPattern=function(e,t){var n=this.createNode(),o=[];for(this.expect("{");!this.match("}");)o.push(this.parsePropertyPattern(e,t)),this.match("}")||this.expect(",");return this.expect("}"),this.finalize(n,new a.ObjectPattern(o))},e.prototype.parsePattern=function(e,t){var n;return this.match("[")?n=this.parseArrayPattern(e,t):this.match("{")?n=this.parseObjectPattern(e,t):(!this.matchKeyword("let")||"const"!==t&&"let"!==t||this.tolerateUnexpectedToken(this.lookahead,i.Messages.LetInLexicalBinding),e.push(this.lookahead),n=this.parseVariableIdentifier(t)),n},e.prototype.parsePatternWithDefault=function(e,t){var n=this.lookahead,o=this.parsePattern(e,t);if(this.match("=")){this.nextToken();var r=this.context.allowYield;this.context.allowYield=!0;var i=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowYield=r,o=this.finalize(this.startNode(n),new a.AssignmentPattern(o,i))}return o},e.prototype.parseVariableIdentifier=function(e){var t=this.createNode(),n=this.nextToken();return 4===n.type&&"yield"===n.value?this.context.strict?this.tolerateUnexpectedToken(n,i.Messages.StrictReservedWord):this.context.allowYield||this.throwUnexpectedToken(n):3!==n.type?this.context.strict&&4===n.type&&this.scanner.isStrictModeReservedWord(n.value)?this.tolerateUnexpectedToken(n,i.Messages.StrictReservedWord):(this.context.strict||"let"!==n.value||"var"!==e)&&this.throwUnexpectedToken(n):(this.context.isModule||this.context.await)&&3===n.type&&"await"===n.value&&this.tolerateUnexpectedToken(n),this.finalize(t,new a.Identifier(n.value))},e.prototype.parseVariableDeclaration=function(e){var t=this.createNode(),n=this.parsePattern([],"var");this.context.strict&&n.type===l.Syntax.Identifier&&this.scanner.isRestrictedWord(n.name)&&this.tolerateError(i.Messages.StrictVarName);var o=null;return this.match("=")?(this.nextToken(),o=this.isolateCoverGrammar(this.parseAssignmentExpression)):n.type===l.Syntax.Identifier||e.inFor||this.expect("="),this.finalize(t,new a.VariableDeclarator(n,o))},e.prototype.parseVariableDeclarationList=function(e){var t={inFor:e.inFor},n=[];for(n.push(this.parseVariableDeclaration(t));this.match(",");)this.nextToken(),n.push(this.parseVariableDeclaration(t));return n},e.prototype.parseVariableStatement=function(){var e=this.createNode();this.expectKeyword("var");var t=this.parseVariableDeclarationList({inFor:!1});return this.consumeSemicolon(),this.finalize(e,new a.VariableDeclaration(t,"var"))},e.prototype.parseEmptyStatement=function(){var e=this.createNode();return this.expect(";"),this.finalize(e,new a.EmptyStatement)},e.prototype.parseExpressionStatement=function(){var e=this.createNode(),t=this.parseExpression();return this.consumeSemicolon(),this.finalize(e,new a.ExpressionStatement(t))},e.prototype.parseIfClause=function(){return this.context.strict&&this.matchKeyword("function")&&this.tolerateError(i.Messages.StrictFunction),this.parseStatement()},e.prototype.parseIfStatement=function(){var e,t=this.createNode(),n=null;this.expectKeyword("if"),this.expect("(");var o=this.parseExpression();return!this.match(")")&&this.config.tolerant?(this.tolerateUnexpectedToken(this.nextToken()),e=this.finalize(this.createNode(),new a.EmptyStatement)):(this.expect(")"),e=this.parseIfClause(),this.matchKeyword("else")&&(this.nextToken(),n=this.parseIfClause())),this.finalize(t,new a.IfStatement(o,e,n))},e.prototype.parseDoWhileStatement=function(){var e=this.createNode();this.expectKeyword("do");var t=this.context.inIteration;this.context.inIteration=!0;var n=this.parseStatement();this.context.inIteration=t,this.expectKeyword("while"),this.expect("(");var o=this.parseExpression();return!this.match(")")&&this.config.tolerant?this.tolerateUnexpectedToken(this.nextToken()):(this.expect(")"),this.match(";")&&this.nextToken()),this.finalize(e,new a.DoWhileStatement(n,o))},e.prototype.parseWhileStatement=function(){var e,t=this.createNode();this.expectKeyword("while"),this.expect("(");var n=this.parseExpression();if(!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken()),e=this.finalize(this.createNode(),new a.EmptyStatement);else{this.expect(")");var o=this.context.inIteration;this.context.inIteration=!0,e=this.parseStatement(),this.context.inIteration=o}return this.finalize(t,new a.WhileStatement(n,e))},e.prototype.parseForStatement=function(){var e,t,n,o=null,r=null,c=null,s=!0,d=this.createNode();if(this.expectKeyword("for"),this.expect("("),this.match(";"))this.nextToken();else if(this.matchKeyword("var")){o=this.createNode(),this.nextToken();var u=this.context.allowIn;this.context.allowIn=!1;var p=this.parseVariableDeclarationList({inFor:!0});if(this.context.allowIn=u,1===p.length&&this.matchKeyword("in")){var m=p[0];m.init&&(m.id.type===l.Syntax.ArrayPattern||m.id.type===l.Syntax.ObjectPattern||this.context.strict)&&this.tolerateError(i.Messages.ForInOfLoopInitializer,"for-in"),o=this.finalize(o,new a.VariableDeclaration(p,"var")),this.nextToken(),e=o,t=this.parseExpression(),o=null}else 1===p.length&&null===p[0].init&&this.matchContextualKeyword("of")?(o=this.finalize(o,new a.VariableDeclaration(p,"var")),this.nextToken(),e=o,t=this.parseAssignmentExpression(),o=null,s=!1):(o=this.finalize(o,new a.VariableDeclaration(p,"var")),this.expect(";"))}else if(this.matchKeyword("const")||this.matchKeyword("let")){o=this.createNode();var h=this.nextToken().value;this.context.strict||"in"!==this.lookahead.value?(u=this.context.allowIn,this.context.allowIn=!1,p=this.parseBindingList(h,{inFor:!0}),this.context.allowIn=u,1===p.length&&null===p[0].init&&this.matchKeyword("in")?(o=this.finalize(o,new a.VariableDeclaration(p,h)),this.nextToken(),e=o,t=this.parseExpression(),o=null):1===p.length&&null===p[0].init&&this.matchContextualKeyword("of")?(o=this.finalize(o,new a.VariableDeclaration(p,h)),this.nextToken(),e=o,t=this.parseAssignmentExpression(),o=null,s=!1):(this.consumeSemicolon(),o=this.finalize(o,new a.VariableDeclaration(p,h)))):(o=this.finalize(o,new a.Identifier(h)),this.nextToken(),e=o,t=this.parseExpression(),o=null)}else{var f=this.lookahead;if(u=this.context.allowIn,this.context.allowIn=!1,o=this.inheritCoverGrammar(this.parseAssignmentExpression),this.context.allowIn=u,this.matchKeyword("in"))this.context.isAssignmentTarget&&o.type!==l.Syntax.AssignmentExpression||this.tolerateError(i.Messages.InvalidLHSInForIn),this.nextToken(),this.reinterpretExpressionAsPattern(o),e=o,t=this.parseExpression(),o=null;else if(this.matchContextualKeyword("of"))this.context.isAssignmentTarget&&o.type!==l.Syntax.AssignmentExpression||this.tolerateError(i.Messages.InvalidLHSInForLoop),this.nextToken(),this.reinterpretExpressionAsPattern(o),e=o,t=this.parseAssignmentExpression(),o=null,s=!1;else{if(this.match(",")){for(var C=[o];this.match(",");)this.nextToken(),C.push(this.isolateCoverGrammar(this.parseAssignmentExpression));o=this.finalize(this.startNode(f),new a.SequenceExpression(C))}this.expect(";")}}if(void 0===e&&(this.match(";")||(r=this.parseExpression()),this.expect(";"),this.match(")")||(c=this.parseExpression())),!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken()),n=this.finalize(this.createNode(),new a.EmptyStatement);else{this.expect(")");var g=this.context.inIteration;this.context.inIteration=!0,n=this.isolateCoverGrammar(this.parseStatement),this.context.inIteration=g}return void 0===e?this.finalize(d,new a.ForStatement(o,r,c,n)):s?this.finalize(d,new a.ForInStatement(e,t,n)):this.finalize(d,new a.ForOfStatement(e,t,n))},e.prototype.parseContinueStatement=function(){var e=this.createNode();this.expectKeyword("continue");var t=null;if(3===this.lookahead.type&&!this.hasLineTerminator){var n=this.parseVariableIdentifier();t=n;var o="$"+n.name;Object.prototype.hasOwnProperty.call(this.context.labelSet,o)||this.throwError(i.Messages.UnknownLabel,n.name)}return this.consumeSemicolon(),null!==t||this.context.inIteration||this.throwError(i.Messages.IllegalContinue),this.finalize(e,new a.ContinueStatement(t))},e.prototype.parseBreakStatement=function(){var e=this.createNode();this.expectKeyword("break");var t=null;if(3===this.lookahead.type&&!this.hasLineTerminator){var n=this.parseVariableIdentifier(),o="$"+n.name;Object.prototype.hasOwnProperty.call(this.context.labelSet,o)||this.throwError(i.Messages.UnknownLabel,n.name),t=n}return this.consumeSemicolon(),null!==t||this.context.inIteration||this.context.inSwitch||this.throwError(i.Messages.IllegalBreak),this.finalize(e,new a.BreakStatement(t))},e.prototype.parseReturnStatement=function(){this.context.inFunctionBody||this.tolerateError(i.Messages.IllegalReturn);var e=this.createNode();this.expectKeyword("return");var t=(this.match(";")||this.match("}")||this.hasLineTerminator||2===this.lookahead.type)&&8!==this.lookahead.type&&10!==this.lookahead.type?null:this.parseExpression();return this.consumeSemicolon(),this.finalize(e,new a.ReturnStatement(t))},e.prototype.parseWithStatement=function(){this.context.strict&&this.tolerateError(i.Messages.StrictModeWith);var e,t=this.createNode();this.expectKeyword("with"),this.expect("(");var n=this.parseExpression();return!this.match(")")&&this.config.tolerant?(this.tolerateUnexpectedToken(this.nextToken()),e=this.finalize(this.createNode(),new a.EmptyStatement)):(this.expect(")"),e=this.parseStatement()),this.finalize(t,new a.WithStatement(n,e))},e.prototype.parseSwitchCase=function(){var e,t=this.createNode();this.matchKeyword("default")?(this.nextToken(),e=null):(this.expectKeyword("case"),e=this.parseExpression()),this.expect(":");for(var n=[];!(this.match("}")||this.matchKeyword("default")||this.matchKeyword("case"));)n.push(this.parseStatementListItem());return this.finalize(t,new a.SwitchCase(e,n))},e.prototype.parseSwitchStatement=function(){var e=this.createNode();this.expectKeyword("switch"),this.expect("(");var t=this.parseExpression();this.expect(")");var n=this.context.inSwitch;this.context.inSwitch=!0;var o=[],r=!1;for(this.expect("{");!this.match("}");){var c=this.parseSwitchCase();null===c.test&&(r&&this.throwError(i.Messages.MultipleDefaultsInSwitch),r=!0),o.push(c)}return this.expect("}"),this.context.inSwitch=n,this.finalize(e,new a.SwitchStatement(t,o))},e.prototype.parseLabelledStatement=function(){var e,t=this.createNode(),n=this.parseExpression();if(n.type===l.Syntax.Identifier&&this.match(":")){this.nextToken();var o=n,r="$"+o.name;Object.prototype.hasOwnProperty.call(this.context.labelSet,r)&&this.throwError(i.Messages.Redeclaration,"Label",o.name),this.context.labelSet[r]=!0;var c=void 0;if(this.matchKeyword("class"))this.tolerateUnexpectedToken(this.lookahead),c=this.parseClassDeclaration();else if(this.matchKeyword("function")){var s=this.lookahead,d=this.parseFunctionDeclaration();this.context.strict?this.tolerateUnexpectedToken(s,i.Messages.StrictFunction):d.generator&&this.tolerateUnexpectedToken(s,i.Messages.GeneratorInLegacyContext),c=d}else c=this.parseStatement();delete this.context.labelSet[r],e=new a.LabeledStatement(o,c)}else this.consumeSemicolon(),e=new a.ExpressionStatement(n);return this.finalize(t,e)},e.prototype.parseThrowStatement=function(){var e=this.createNode();this.expectKeyword("throw"),this.hasLineTerminator&&this.throwError(i.Messages.NewlineAfterThrow);var t=this.parseExpression();return this.consumeSemicolon(),this.finalize(e,new a.ThrowStatement(t))},e.prototype.parseCatchClause=function(){var e=this.createNode();this.expectKeyword("catch"),this.expect("("),this.match(")")&&this.throwUnexpectedToken(this.lookahead);for(var t=[],n=this.parsePattern(t),o={},r=0;r0&&this.tolerateError(i.Messages.BadGetterArity);var o=this.parsePropertyMethod(n);return this.context.allowYield=t,this.finalize(e,new a.FunctionExpression(null,n.params,o,!1))},e.prototype.parseSetterMethod=function(){var e=this.createNode(),t=this.context.allowYield;this.context.allowYield=!0;var n=this.parseFormalParameters();1!==n.params.length?this.tolerateError(i.Messages.BadSetterArity):n.params[0]instanceof a.RestElement&&this.tolerateError(i.Messages.BadSetterRestParameter);var o=this.parsePropertyMethod(n);return this.context.allowYield=t,this.finalize(e,new a.FunctionExpression(null,n.params,o,!1))},e.prototype.parseGeneratorMethod=function(){var e=this.createNode(),t=this.context.allowYield;this.context.allowYield=!0;var n=this.parseFormalParameters();this.context.allowYield=!1;var o=this.parsePropertyMethod(n);return this.context.allowYield=t,this.finalize(e,new a.FunctionExpression(null,n.params,o,!0))},e.prototype.isStartOfExpression=function(){var e=!0,t=this.lookahead.value;switch(this.lookahead.type){case 7:e="["===t||"("===t||"{"===t||"+"===t||"-"===t||"!"===t||"~"===t||"++"===t||"--"===t||"/"===t||"/="===t;break;case 4:e="class"===t||"delete"===t||"function"===t||"let"===t||"new"===t||"super"===t||"this"===t||"typeof"===t||"void"===t||"yield"===t}return e},e.prototype.parseYieldExpression=function(){var e=this.createNode();this.expectKeyword("yield");var t=null,n=!1;if(!this.hasLineTerminator){var o=this.context.allowYield;this.context.allowYield=!1,(n=this.match("*"))?(this.nextToken(),t=this.parseAssignmentExpression()):this.isStartOfExpression()&&(t=this.parseAssignmentExpression()),this.context.allowYield=o}return this.finalize(e,new a.YieldExpression(t,n))},e.prototype.parseClassElement=function(e){var t=this.lookahead,n=this.createNode(),o="",r=null,c=null,l=!1,s=!1,d=!1,u=!1;if(this.match("*"))this.nextToken();else if(l=this.match("["),"static"===(r=this.parseObjectPropertyKey()).name&&(this.qualifiedPropertyName(this.lookahead)||this.match("*"))&&(t=this.lookahead,d=!0,l=this.match("["),this.match("*")?this.nextToken():r=this.parseObjectPropertyKey()),3===t.type&&!this.hasLineTerminator&&"async"===t.value){var p=this.lookahead.value;":"!==p&&"("!==p&&"*"!==p&&(u=!0,t=this.lookahead,r=this.parseObjectPropertyKey(),3===t.type&&"constructor"===t.value&&this.tolerateUnexpectedToken(t,i.Messages.ConstructorIsAsync))}var m=this.qualifiedPropertyName(this.lookahead);return 3===t.type?"get"===t.value&&m?(o="get",l=this.match("["),r=this.parseObjectPropertyKey(),this.context.allowYield=!1,c=this.parseGetterMethod()):"set"===t.value&&m&&(o="set",l=this.match("["),r=this.parseObjectPropertyKey(),c=this.parseSetterMethod()):7===t.type&&"*"===t.value&&m&&(o="init",l=this.match("["),r=this.parseObjectPropertyKey(),c=this.parseGeneratorMethod(),s=!0),!o&&r&&this.match("(")&&(o="init",c=u?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction(),s=!0),o||this.throwUnexpectedToken(this.lookahead),"init"===o&&(o="method"),l||(d&&this.isPropertyKey(r,"prototype")&&this.throwUnexpectedToken(t,i.Messages.StaticPrototype),!d&&this.isPropertyKey(r,"constructor")&&(("method"!==o||!s||c&&c.generator)&&this.throwUnexpectedToken(t,i.Messages.ConstructorSpecialMethod),e.value?this.throwUnexpectedToken(t,i.Messages.DuplicateConstructor):e.value=!0,o="constructor")),this.finalize(n,new a.MethodDefinition(r,l,c,o,d))},e.prototype.parseClassElementList=function(){var e=[],t={value:!1};for(this.expect("{");!this.match("}");)this.match(";")?this.nextToken():e.push(this.parseClassElement(t));return this.expect("}"),e},e.prototype.parseClassBody=function(){var e=this.createNode(),t=this.parseClassElementList();return this.finalize(e,new a.ClassBody(t))},e.prototype.parseClassDeclaration=function(e){var t=this.createNode(),n=this.context.strict;this.context.strict=!0,this.expectKeyword("class");var o=e&&3!==this.lookahead.type?null:this.parseVariableIdentifier(),r=null;this.matchKeyword("extends")&&(this.nextToken(),r=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall));var i=this.parseClassBody();return this.context.strict=n,this.finalize(t,new a.ClassDeclaration(o,r,i))},e.prototype.parseClassExpression=function(){var e=this.createNode(),t=this.context.strict;this.context.strict=!0,this.expectKeyword("class");var n=3===this.lookahead.type?this.parseVariableIdentifier():null,o=null;this.matchKeyword("extends")&&(this.nextToken(),o=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall));var r=this.parseClassBody();return this.context.strict=t,this.finalize(e,new a.ClassExpression(n,o,r))},e.prototype.parseModule=function(){this.context.strict=!0,this.context.isModule=!0,this.scanner.isModule=!0;for(var e=this.createNode(),t=this.parseDirectivePrologues();2!==this.lookahead.type;)t.push(this.parseStatementListItem());return this.finalize(e,new a.Module(t))},e.prototype.parseScript=function(){for(var e=this.createNode(),t=this.parseDirectivePrologues();2!==this.lookahead.type;)t.push(this.parseStatementListItem());return this.finalize(e,new a.Script(t))},e.prototype.parseModuleSpecifier=function(){var e=this.createNode();8!==this.lookahead.type&&this.throwError(i.Messages.InvalidModuleSpecifier);var t=this.nextToken(),n=this.getTokenRaw(t);return this.finalize(e,new a.Literal(t.value,n))},e.prototype.parseImportSpecifier=function(){var e,t,n=this.createNode();return 3===this.lookahead.type?(t=e=this.parseVariableIdentifier(),this.matchContextualKeyword("as")&&(this.nextToken(),t=this.parseVariableIdentifier())):(t=e=this.parseIdentifierName(),this.matchContextualKeyword("as")?(this.nextToken(),t=this.parseVariableIdentifier()):this.throwUnexpectedToken(this.nextToken())),this.finalize(n,new a.ImportSpecifier(t,e))},e.prototype.parseNamedImports=function(){this.expect("{");for(var e=[];!this.match("}");)e.push(this.parseImportSpecifier()),this.match("}")||this.expect(",");return this.expect("}"),e},e.prototype.parseImportDefaultSpecifier=function(){var e=this.createNode(),t=this.parseIdentifierName();return this.finalize(e,new a.ImportDefaultSpecifier(t))},e.prototype.parseImportNamespaceSpecifier=function(){var e=this.createNode();this.expect("*"),this.matchContextualKeyword("as")||this.throwError(i.Messages.NoAsAfterImportNamespace),this.nextToken();var t=this.parseIdentifierName();return this.finalize(e,new a.ImportNamespaceSpecifier(t))},e.prototype.parseImportDeclaration=function(){this.context.inFunctionBody&&this.throwError(i.Messages.IllegalImportDeclaration);var e,t=this.createNode();this.expectKeyword("import");var n=[];if(8===this.lookahead.type)e=this.parseModuleSpecifier();else{if(this.match("{")?n=n.concat(this.parseNamedImports()):this.match("*")?n.push(this.parseImportNamespaceSpecifier()):this.isIdentifierName(this.lookahead)&&!this.matchKeyword("default")?(n.push(this.parseImportDefaultSpecifier()),this.match(",")&&(this.nextToken(),this.match("*")?n.push(this.parseImportNamespaceSpecifier()):this.match("{")?n=n.concat(this.parseNamedImports()):this.throwUnexpectedToken(this.lookahead))):this.throwUnexpectedToken(this.nextToken()),!this.matchContextualKeyword("from")){var o=this.lookahead.value?i.Messages.UnexpectedToken:i.Messages.MissingFromClause;this.throwError(o,this.lookahead.value)}this.nextToken(),e=this.parseModuleSpecifier()}return this.consumeSemicolon(),this.finalize(t,new a.ImportDeclaration(n,e))},e.prototype.parseExportSpecifier=function(){var e=this.createNode(),t=this.parseIdentifierName(),n=t;return this.matchContextualKeyword("as")&&(this.nextToken(),n=this.parseIdentifierName()),this.finalize(e,new a.ExportSpecifier(t,n))},e.prototype.parseExportDeclaration=function(){this.context.inFunctionBody&&this.throwError(i.Messages.IllegalExportDeclaration);var e,t=this.createNode();if(this.expectKeyword("export"),this.matchKeyword("default"))if(this.nextToken(),this.matchKeyword("function")){var n=this.parseFunctionDeclaration(!0);e=this.finalize(t,new a.ExportDefaultDeclaration(n))}else this.matchKeyword("class")?(n=this.parseClassDeclaration(!0),e=this.finalize(t,new a.ExportDefaultDeclaration(n))):this.matchContextualKeyword("async")?(n=this.matchAsyncFunction()?this.parseFunctionDeclaration(!0):this.parseAssignmentExpression(),e=this.finalize(t,new a.ExportDefaultDeclaration(n))):(this.matchContextualKeyword("from")&&this.throwError(i.Messages.UnexpectedToken,this.lookahead.value),n=this.match("{")?this.parseObjectInitializer():this.match("[")?this.parseArrayInitializer():this.parseAssignmentExpression(),this.consumeSemicolon(),e=this.finalize(t,new a.ExportDefaultDeclaration(n)));else if(this.match("*")){if(this.nextToken(),!this.matchContextualKeyword("from")){var o=this.lookahead.value?i.Messages.UnexpectedToken:i.Messages.MissingFromClause;this.throwError(o,this.lookahead.value)}this.nextToken();var r=this.parseModuleSpecifier();this.consumeSemicolon(),e=this.finalize(t,new a.ExportAllDeclaration(r))}else if(4===this.lookahead.type){switch(n=void 0,this.lookahead.value){case"let":case"const":n=this.parseLexicalDeclaration({inFor:!1});break;case"var":case"class":case"function":n=this.parseStatementListItem();break;default:this.throwUnexpectedToken(this.lookahead)}e=this.finalize(t,new a.ExportNamedDeclaration(n,[],null))}else if(this.matchAsyncFunction())n=this.parseFunctionDeclaration(),e=this.finalize(t,new a.ExportNamedDeclaration(n,[],null));else{var c=[],l=null,s=!1;for(this.expect("{");!this.match("}");)s=s||this.matchKeyword("default"),c.push(this.parseExportSpecifier()),this.match("}")||this.expect(",");this.expect("}"),this.matchContextualKeyword("from")?(this.nextToken(),l=this.parseModuleSpecifier(),this.consumeSemicolon()):s?(o=this.lookahead.value?i.Messages.UnexpectedToken:i.Messages.MissingFromClause,this.throwError(o,this.lookahead.value)):this.consumeSemicolon(),e=this.finalize(t,new a.ExportNamedDeclaration(null,c,l))}return e},e}();t.Parser=d},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.assert=function(e,t){if(!e)throw new Error("ASSERT: "+t)}},function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(){this.errors=[],this.tolerant=!1}return e.prototype.recordError=function(e){this.errors.push(e)},e.prototype.tolerate=function(e){if(!this.tolerant)throw e;this.recordError(e)},e.prototype.constructError=function(e,t){var n=new Error(e);try{throw n}catch(o){Object.create&&Object.defineProperty&&(n=Object.create(o),Object.defineProperty(n,"column",{value:t}))}return n},e.prototype.createError=function(e,t,n,o){var r="Line "+t+": "+o,i=this.constructError(r,n);return i.index=e,i.lineNumber=t,i.description=o,i},e.prototype.throwError=function(e,t,n,o){throw this.createError(e,t,n,o)},e.prototype.tolerateError=function(e,t,n,o){var r=this.createError(e,t,n,o);if(!this.tolerant)throw r;this.recordError(r)},e}();t.ErrorHandler=n},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Messages={BadGetterArity:"Getter must not have any formal parameters",BadSetterArity:"Setter must have exactly one formal parameter",BadSetterRestParameter:"Setter function argument must not be a rest parameter",ConstructorIsAsync:"Class constructor may not be an async method",ConstructorSpecialMethod:"Class constructor may not be an accessor",DeclarationMissingInitializer:"Missing initializer in %0 declaration",DefaultRestParameter:"Unexpected token =",DuplicateBinding:"Duplicate binding %0",DuplicateConstructor:"A class may only have one constructor",DuplicateProtoProperty:"Duplicate __proto__ fields are not allowed in object literals",ForInOfLoopInitializer:"%0 loop variable declaration may not have an initializer",GeneratorInLegacyContext:"Generator declarations are not allowed in legacy contexts",IllegalBreak:"Illegal break statement",IllegalContinue:"Illegal continue statement",IllegalExportDeclaration:"Unexpected token",IllegalImportDeclaration:"Unexpected token",IllegalLanguageModeDirective:"Illegal 'use strict' directive in function with non-simple parameter list",IllegalReturn:"Illegal return statement",InvalidEscapedReservedWord:"Keyword must not contain escaped characters",InvalidHexEscapeSequence:"Invalid hexadecimal escape sequence",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",InvalidLHSInForLoop:"Invalid left-hand side in for-loop",InvalidModuleSpecifier:"Unexpected token",InvalidRegExp:"Invalid regular expression",LetInLexicalBinding:"let is disallowed as a lexically bound name",MissingFromClause:"Unexpected token",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NewlineAfterThrow:"Illegal newline after throw",NoAsAfterImportNamespace:"Unexpected token",NoCatchOrFinally:"Missing catch or finally after try",ParameterAfterRestParameter:"Rest parameter must be last formal parameter",Redeclaration:"%0 '%1' has already been declared",StaticPrototype:"Classes may not have static property named prototype",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictFunction:"In strict mode code, functions can only be declared at top level or inside a block",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictModeWith:"Strict mode code may not include a with statement",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictReservedWord:"Use of future reserved word in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",TemplateOctalLiteral:"Octal literals are not allowed in template strings.",UnexpectedEOS:"Unexpected end of input",UnexpectedIdentifier:"Unexpected identifier",UnexpectedNumber:"Unexpected number",UnexpectedReserved:"Unexpected reserved word",UnexpectedString:"Unexpected string",UnexpectedTemplate:"Unexpected quasi %0",UnexpectedToken:"Unexpected token %0",UnexpectedTokenIllegal:"Unexpected token ILLEGAL",UnknownLabel:"Undefined label '%0'",UnterminatedRegExp:"Invalid regular expression: missing /"}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),r=n(4),i=n(11);function a(e){return"0123456789abcdef".indexOf(e.toLowerCase())}function c(e){return"01234567".indexOf(e)}var l=function(){function e(e,t){this.source=e,this.errorHandler=t,this.trackComment=!1,this.isModule=!1,this.length=e.length,this.index=0,this.lineNumber=e.length>0?1:0,this.lineStart=0,this.curlyStack=[]}return e.prototype.saveState=function(){return{index:this.index,lineNumber:this.lineNumber,lineStart:this.lineStart}},e.prototype.restoreState=function(e){this.index=e.index,this.lineNumber=e.lineNumber,this.lineStart=e.lineStart},e.prototype.eof=function(){return this.index>=this.length},e.prototype.throwUnexpectedToken=function(e){return void 0===e&&(e=i.Messages.UnexpectedTokenIllegal),this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,e)},e.prototype.tolerateUnexpectedToken=function(e){void 0===e&&(e=i.Messages.UnexpectedTokenIllegal),this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,e)},e.prototype.skipSingleLineComment=function(e){var t,n,o=[];for(this.trackComment&&(o=[],t=this.index-e,n={start:{line:this.lineNumber,column:this.index-this.lineStart-e},end:{}});!this.eof();){var i=this.source.charCodeAt(this.index);if(++this.index,r.Character.isLineTerminator(i)){if(this.trackComment){n.end={line:this.lineNumber,column:this.index-this.lineStart-1};var a={multiLine:!1,slice:[t+e,this.index-1],range:[t,this.index-1],loc:n};o.push(a)}return 13===i&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,o}}return this.trackComment&&(n.end={line:this.lineNumber,column:this.index-this.lineStart},a={multiLine:!1,slice:[t+e,this.index],range:[t,this.index],loc:n},o.push(a)),o},e.prototype.skipMultiLineComment=function(){var e,t,n=[];for(this.trackComment&&(n=[],e=this.index-2,t={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}});!this.eof();){var o=this.source.charCodeAt(this.index);if(r.Character.isLineTerminator(o))13===o&&10===this.source.charCodeAt(this.index+1)&&++this.index,++this.lineNumber,++this.index,this.lineStart=this.index;else if(42===o){if(47===this.source.charCodeAt(this.index+1)){if(this.index+=2,this.trackComment){t.end={line:this.lineNumber,column:this.index-this.lineStart};var i={multiLine:!0,slice:[e+2,this.index-2],range:[e,this.index],loc:t};n.push(i)}return n}++this.index}else++this.index}return this.trackComment&&(t.end={line:this.lineNumber,column:this.index-this.lineStart},i={multiLine:!0,slice:[e+2,this.index],range:[e,this.index],loc:t},n.push(i)),this.tolerateUnexpectedToken(),n},e.prototype.scanComments=function(){var e;this.trackComment&&(e=[]);for(var t=0===this.index;!this.eof();){var n=this.source.charCodeAt(this.index);if(r.Character.isWhiteSpace(n))++this.index;else if(r.Character.isLineTerminator(n))++this.index,13===n&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,t=!0;else if(47===n)if(47===(n=this.source.charCodeAt(this.index+1))){this.index+=2;var o=this.skipSingleLineComment(2);this.trackComment&&(e=e.concat(o)),t=!0}else{if(42!==n)break;this.index+=2,o=this.skipMultiLineComment(),this.trackComment&&(e=e.concat(o))}else if(t&&45===n){if(45!==this.source.charCodeAt(this.index+1)||62!==this.source.charCodeAt(this.index+2))break;this.index+=3,o=this.skipSingleLineComment(3),this.trackComment&&(e=e.concat(o))}else{if(60!==n||this.isModule)break;if("!--"!==this.source.slice(this.index+1,this.index+4))break;this.index+=4,o=this.skipSingleLineComment(4),this.trackComment&&(e=e.concat(o))}}return e},e.prototype.isFutureReservedWord=function(e){switch(e){case"enum":case"export":case"import":case"super":return!0;default:return!1}},e.prototype.isStrictModeReservedWord=function(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}},e.prototype.isRestrictedWord=function(e){return"eval"===e||"arguments"===e},e.prototype.isKeyword=function(e){switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e||"let"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}},e.prototype.codePointAt=function(e){var t=this.source.charCodeAt(e);if(t>=55296&&t<=56319){var n=this.source.charCodeAt(e+1);n>=56320&&n<=57343&&(t=1024*(t-55296)+n-56320+65536)}return t},e.prototype.scanHexEscape=function(e){for(var t="u"===e?4:2,n=0,o=0;o1114111||"}"!==e)&&this.throwUnexpectedToken(),r.Character.fromCodePoint(t)},e.prototype.getIdentifier=function(){for(var e=this.index++;!this.eof();){var t=this.source.charCodeAt(this.index);if(92===t)return this.index=e,this.getComplexIdentifier();if(t>=55296&&t<57343)return this.index=e,this.getComplexIdentifier();if(!r.Character.isIdentifierPart(t))break;++this.index}return this.source.slice(e,this.index)},e.prototype.getComplexIdentifier=function(){var e,t=this.codePointAt(this.index),n=r.Character.fromCodePoint(t);for(this.index+=n.length,92===t&&(117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,e=this.scanUnicodeCodePointEscape()):null!==(e=this.scanHexEscape("u"))&&"\\"!==e&&r.Character.isIdentifierStart(e.charCodeAt(0))||this.throwUnexpectedToken(),n=e);!this.eof()&&(t=this.codePointAt(this.index),r.Character.isIdentifierPart(t));)n+=e=r.Character.fromCodePoint(t),this.index+=e.length,92===t&&(n=n.substr(0,n.length-1),117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,e=this.scanUnicodeCodePointEscape()):null!==(e=this.scanHexEscape("u"))&&"\\"!==e&&r.Character.isIdentifierPart(e.charCodeAt(0))||this.throwUnexpectedToken(),n+=e);return n},e.prototype.octalToDecimal=function(e){var t="0"!==e,n=c(e);return!this.eof()&&r.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(t=!0,n=8*n+c(this.source[this.index++]),"0123".indexOf(e)>=0&&!this.eof()&&r.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(n=8*n+c(this.source[this.index++]))),{code:n,octal:t}},e.prototype.scanIdentifier=function(){var e,t=this.index,n=92===this.source.charCodeAt(t)?this.getComplexIdentifier():this.getIdentifier();if(3!=(e=1===n.length?3:this.isKeyword(n)?4:"null"===n?5:"true"===n||"false"===n?1:3)&&t+n.length!==this.index){var o=this.index;this.index=t,this.tolerateUnexpectedToken(i.Messages.InvalidEscapedReservedWord),this.index=o}return{type:e,value:n,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.scanPunctuator=function(){var e=this.index,t=this.source[this.index];switch(t){case"(":case"{":"{"===t&&this.curlyStack.push("{"),++this.index;break;case".":++this.index,"."===this.source[this.index]&&"."===this.source[this.index+1]&&(this.index+=2,t="...");break;case"}":++this.index,this.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++this.index;break;default:">>>="===(t=this.source.substr(this.index,4))?this.index+=4:"==="===(t=t.substr(0,3))||"!=="===t||">>>"===t||"<<="===t||">>="===t||"**="===t?this.index+=3:"&&"===(t=t.substr(0,2))||"||"===t||"=="===t||"!="===t||"+="===t||"-="===t||"*="===t||"/="===t||"++"===t||"--"===t||"<<"===t||">>"===t||"&="===t||"|="===t||"^="===t||"%="===t||"<="===t||">="===t||"=>"===t||"**"===t?this.index+=2:(t=this.source[this.index],"<>=!+-*%&|^/".indexOf(t)>=0&&++this.index)}return this.index===e&&this.throwUnexpectedToken(),{type:7,value:t,lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanHexLiteral=function(e){for(var t="";!this.eof()&&r.Character.isHexDigit(this.source.charCodeAt(this.index));)t+=this.source[this.index++];return 0===t.length&&this.throwUnexpectedToken(),r.Character.isIdentifierStart(this.source.charCodeAt(this.index))&&this.throwUnexpectedToken(),{type:6,value:parseInt("0x"+t,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanBinaryLiteral=function(e){for(var t,n="";!this.eof()&&("0"===(t=this.source[this.index])||"1"===t);)n+=this.source[this.index++];return 0===n.length&&this.throwUnexpectedToken(),this.eof()||(t=this.source.charCodeAt(this.index),(r.Character.isIdentifierStart(t)||r.Character.isDecimalDigit(t))&&this.throwUnexpectedToken()),{type:6,value:parseInt(n,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanOctalLiteral=function(e,t){var n="",o=!1;for(r.Character.isOctalDigit(e.charCodeAt(0))?(o=!0,n="0"+this.source[this.index++]):++this.index;!this.eof()&&r.Character.isOctalDigit(this.source.charCodeAt(this.index));)n+=this.source[this.index++];return o||0!==n.length||this.throwUnexpectedToken(),(r.Character.isIdentifierStart(this.source.charCodeAt(this.index))||r.Character.isDecimalDigit(this.source.charCodeAt(this.index)))&&this.throwUnexpectedToken(),{type:6,value:parseInt(n,8),octal:o,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.isImplicitOctalLiteral=function(){for(var e=this.index+1;e=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,(function(e,t,n){var r=parseInt(t||n,16);return r>1114111&&o.throwUnexpectedToken(i.Messages.InvalidRegExp),r<=65535?String.fromCharCode(r):"\uffff"})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"\uffff"));try{RegExp(n)}catch(r){this.throwUnexpectedToken(i.Messages.InvalidRegExp)}try{return new RegExp(e,t)}catch(a){return null}},e.prototype.scanRegExpBody=function(){var e=this.source[this.index];o.assert("/"===e,"Regular expression literal must start with a slash");for(var t=this.source[this.index++],n=!1,a=!1;!this.eof();)if(t+=e=this.source[this.index++],"\\"===e)e=this.source[this.index++],r.Character.isLineTerminator(e.charCodeAt(0))&&this.throwUnexpectedToken(i.Messages.UnterminatedRegExp),t+=e;else if(r.Character.isLineTerminator(e.charCodeAt(0)))this.throwUnexpectedToken(i.Messages.UnterminatedRegExp);else if(n)"]"===e&&(n=!1);else{if("/"===e){a=!0;break}"["===e&&(n=!0)}return a||this.throwUnexpectedToken(i.Messages.UnterminatedRegExp),t.substr(1,t.length-2)},e.prototype.scanRegExpFlags=function(){for(var e="";!this.eof();){var t=this.source[this.index];if(!r.Character.isIdentifierPart(t.charCodeAt(0)))break;if(++this.index,"\\"!==t||this.eof())e+=t;else if("u"===(t=this.source[this.index])){++this.index;var n=this.index,o=this.scanHexEscape("u");if(null!==o)for(e+=o;n=55296&&e<57343&&r.Character.isIdentifierStart(this.codePointAt(this.index))?this.scanIdentifier():this.scanPunctuator()},e}();t.Scanner=l},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TokenName={},t.TokenName[1]="Boolean",t.TokenName[2]="",t.TokenName[3]="Identifier",t.TokenName[4]="Keyword",t.TokenName[5]="Null",t.TokenName[6]="Numeric",t.TokenName[7]="Punctuator",t.TokenName[8]="String",t.TokenName[9]="RegularExpression",t.TokenName[10]="Template"},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.XHTMLEntities={quot:'"',amp:"&",apos:"'",gt:">",nbsp:"\xa0",iexcl:"\xa1",cent:"\xa2",pound:"\xa3",curren:"\xa4",yen:"\xa5",brvbar:"\xa6",sect:"\xa7",uml:"\xa8",copy:"\xa9",ordf:"\xaa",laquo:"\xab",not:"\xac",shy:"\xad",reg:"\xae",macr:"\xaf",deg:"\xb0",plusmn:"\xb1",sup2:"\xb2",sup3:"\xb3",acute:"\xb4",micro:"\xb5",para:"\xb6",middot:"\xb7",cedil:"\xb8",sup1:"\xb9",ordm:"\xba",raquo:"\xbb",frac14:"\xbc",frac12:"\xbd",frac34:"\xbe",iquest:"\xbf",Agrave:"\xc0",Aacute:"\xc1",Acirc:"\xc2",Atilde:"\xc3",Auml:"\xc4",Aring:"\xc5",AElig:"\xc6",Ccedil:"\xc7",Egrave:"\xc8",Eacute:"\xc9",Ecirc:"\xca",Euml:"\xcb",Igrave:"\xcc",Iacute:"\xcd",Icirc:"\xce",Iuml:"\xcf",ETH:"\xd0",Ntilde:"\xd1",Ograve:"\xd2",Oacute:"\xd3",Ocirc:"\xd4",Otilde:"\xd5",Ouml:"\xd6",times:"\xd7",Oslash:"\xd8",Ugrave:"\xd9",Uacute:"\xda",Ucirc:"\xdb",Uuml:"\xdc",Yacute:"\xdd",THORN:"\xde",szlig:"\xdf",agrave:"\xe0",aacute:"\xe1",acirc:"\xe2",atilde:"\xe3",auml:"\xe4",aring:"\xe5",aelig:"\xe6",ccedil:"\xe7",egrave:"\xe8",eacute:"\xe9",ecirc:"\xea",euml:"\xeb",igrave:"\xec",iacute:"\xed",icirc:"\xee",iuml:"\xef",eth:"\xf0",ntilde:"\xf1",ograve:"\xf2",oacute:"\xf3",ocirc:"\xf4",otilde:"\xf5",ouml:"\xf6",divide:"\xf7",oslash:"\xf8",ugrave:"\xf9",uacute:"\xfa",ucirc:"\xfb",uuml:"\xfc",yacute:"\xfd",thorn:"\xfe",yuml:"\xff",OElig:"\u0152",oelig:"\u0153",Scaron:"\u0160",scaron:"\u0161",Yuml:"\u0178",fnof:"\u0192",circ:"\u02c6",tilde:"\u02dc",Alpha:"\u0391",Beta:"\u0392",Gamma:"\u0393",Delta:"\u0394",Epsilon:"\u0395",Zeta:"\u0396",Eta:"\u0397",Theta:"\u0398",Iota:"\u0399",Kappa:"\u039a",Lambda:"\u039b",Mu:"\u039c",Nu:"\u039d",Xi:"\u039e",Omicron:"\u039f",Pi:"\u03a0",Rho:"\u03a1",Sigma:"\u03a3",Tau:"\u03a4",Upsilon:"\u03a5",Phi:"\u03a6",Chi:"\u03a7",Psi:"\u03a8",Omega:"\u03a9",alpha:"\u03b1",beta:"\u03b2",gamma:"\u03b3",delta:"\u03b4",epsilon:"\u03b5",zeta:"\u03b6",eta:"\u03b7",theta:"\u03b8",iota:"\u03b9",kappa:"\u03ba",lambda:"\u03bb",mu:"\u03bc",nu:"\u03bd",xi:"\u03be",omicron:"\u03bf",pi:"\u03c0",rho:"\u03c1",sigmaf:"\u03c2",sigma:"\u03c3",tau:"\u03c4",upsilon:"\u03c5",phi:"\u03c6",chi:"\u03c7",psi:"\u03c8",omega:"\u03c9",thetasym:"\u03d1",upsih:"\u03d2",piv:"\u03d6",ensp:"\u2002",emsp:"\u2003",thinsp:"\u2009",zwnj:"\u200c",zwj:"\u200d",lrm:"\u200e",rlm:"\u200f",ndash:"\u2013",mdash:"\u2014",lsquo:"\u2018",rsquo:"\u2019",sbquo:"\u201a",ldquo:"\u201c",rdquo:"\u201d",bdquo:"\u201e",dagger:"\u2020",Dagger:"\u2021",bull:"\u2022",hellip:"\u2026",permil:"\u2030",prime:"\u2032",Prime:"\u2033",lsaquo:"\u2039",rsaquo:"\u203a",oline:"\u203e",frasl:"\u2044",euro:"\u20ac",image:"\u2111",weierp:"\u2118",real:"\u211c",trade:"\u2122",alefsym:"\u2135",larr:"\u2190",uarr:"\u2191",rarr:"\u2192",darr:"\u2193",harr:"\u2194",crarr:"\u21b5",lArr:"\u21d0",uArr:"\u21d1",rArr:"\u21d2",dArr:"\u21d3",hArr:"\u21d4",forall:"\u2200",part:"\u2202",exist:"\u2203",empty:"\u2205",nabla:"\u2207",isin:"\u2208",notin:"\u2209",ni:"\u220b",prod:"\u220f",sum:"\u2211",minus:"\u2212",lowast:"\u2217",radic:"\u221a",prop:"\u221d",infin:"\u221e",ang:"\u2220",and:"\u2227",or:"\u2228",cap:"\u2229",cup:"\u222a",int:"\u222b",there4:"\u2234",sim:"\u223c",cong:"\u2245",asymp:"\u2248",ne:"\u2260",equiv:"\u2261",le:"\u2264",ge:"\u2265",sub:"\u2282",sup:"\u2283",nsub:"\u2284",sube:"\u2286",supe:"\u2287",oplus:"\u2295",otimes:"\u2297",perp:"\u22a5",sdot:"\u22c5",lceil:"\u2308",rceil:"\u2309",lfloor:"\u230a",rfloor:"\u230b",loz:"\u25ca",spades:"\u2660",clubs:"\u2663",hearts:"\u2665",diams:"\u2666",lang:"\u27e8",rang:"\u27e9"}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(10),r=n(12),i=n(13),a=function(){function e(){this.values=[],this.curly=this.paren=-1}return e.prototype.beforeFunctionExpression=function(e){return["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","**","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="].indexOf(e)>=0},e.prototype.isRegexStart=function(){var e=this.values[this.values.length-1],t=null!==e;switch(e){case"this":case"]":t=!1;break;case")":var n=this.values[this.paren-1];t="if"===n||"while"===n||"for"===n||"with"===n;break;case"}":if(t=!1,"function"===this.values[this.curly-3])t=!!(o=this.values[this.curly-4])&&!this.beforeFunctionExpression(o);else if("function"===this.values[this.curly-4]){var o;t=!(o=this.values[this.curly-5])||!this.beforeFunctionExpression(o)}}return t},e.prototype.push=function(e){7===e.type||4===e.type?("{"===e.value?this.curly=this.values.length:"("===e.value&&(this.paren=this.values.length),this.values.push(e.value)):this.values.push(null)},e}(),c=function(){function e(e,t){this.errorHandler=new o.ErrorHandler,this.errorHandler.tolerant=!!t&&"boolean"==typeof t.tolerant&&t.tolerant,this.scanner=new r.Scanner(e,this.errorHandler),this.scanner.trackComment=!!t&&"boolean"==typeof t.comment&&t.comment,this.trackRange=!!t&&"boolean"==typeof t.range&&t.range,this.trackLoc=!!t&&"boolean"==typeof t.loc&&t.loc,this.buffer=[],this.reader=new a}return e.prototype.errors=function(){return this.errorHandler.errors},e.prototype.getNextToken=function(){if(0===this.buffer.length){var e=this.scanner.scanComments();if(this.scanner.trackComment)for(var t=0;to&&" "!==e[u+1],u=i);else if(!C(a))return 5;p=p&&g(a)}s=s||d&&i-u-1>o&&" "!==e[u+1]}return l||s?n>9&&N(e)?5:s?4:3:p&&!r(e)?1:2}function V(e,t,n,o){e.dump=function(){if(0===t.length)return"''";if(!e.noCompatMode&&-1!==d.indexOf(t))return"'"+t+"'";var i=e.indent*Math.max(1,n),a=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-i),c=o||e.flowLevel>-1&&n>=e.flowLevel;switch(b(t,c,e.indent,a,(function(t){return function(e,t){var n,o;for(n=0,o=e.implicitTypes.length;n"+v(t,e.indent)+x(m(function(e,t){var n,o,r=/(\n+)([^\n]*)/g,i=(c=e.indexOf("\n"),c=-1!==c?c:e.length,r.lastIndex=c,y(e.slice(0,c),t)),a="\n"===e[0]||" "===e[0];var c;for(;o=r.exec(e);){var l=o[1],s=o[2];n=" "===s[0],i+=l+(a||n||""===s?"":"\n")+y(s,t),a=n}return i}(t,a),i));case 5:return'"'+function(e){for(var t,n,o,r="",i=0;i=55296&&t<=56319&&(n=e.charCodeAt(i+1))>=56320&&n<=57343?(r+=u(1024*(t-55296)+n-56320+65536),i++):(o=s[t],r+=!o&&C(t)?e[i]:o||u(t));return r}(t)+'"';default:throw new r("impossible error: invalid scalar style")}}()}function v(e,t){var n=N(e)?String(t):"",o="\n"===e[e.length-1];return n+(o&&("\n"===e[e.length-2]||"\n"===e)?"+":o?"":"-")+"\n"}function x(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function y(e,t){if(""===e||" "===e[0])return e;for(var n,o,r=/ [^ ]/g,i=0,a=0,c=0,l="";n=r.exec(e);)(c=n.index)-i>t&&(o=a>i?a:c,l+="\n"+e.slice(i,o),i=o+1),a=c;return l+="\n",e.length-i>t&&a>i?l+=e.slice(i,a)+"\n"+e.slice(a+1):l+=e.slice(i),l.slice(1)}function k(e,t,n){var o,i,a,s,d,u;for(a=0,s=(i=n?e.explicitTypes:e.implicitTypes).length;a tag resolver accepts not "'+u+'" style');o=d.represent[u](t,u)}e.dump=o}return!0}return!1}function w(e,t,n,o,i,a){e.tag=null,e.dump=n,k(e,n,!1)||k(e,n,!0);var l=c.call(e.dump);o&&(o=e.flowLevel<0||e.flowLevel>t);var s,d,u="[object Object]"===l||"[object Array]"===l;if(u&&(d=-1!==(s=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||d||2!==e.indent&&t>0)&&(i=!1),d&&e.usedDuplicates[s])e.dump="*ref_"+s;else{if(u&&d&&!e.usedDuplicates[s]&&(e.usedDuplicates[s]=!0),"[object Object]"===l)o&&0!==Object.keys(e.dump).length?(!function(e,t,n,o){var i,a,c,l,s,d,u="",p=e.tag,m=Object.keys(n);if(!0===e.sortKeys)m.sort();else if("function"==typeof e.sortKeys)m.sort(e.sortKeys);else if(e.sortKeys)throw new r("sortKeys must be a boolean or a function");for(i=0,a=m.length;i1024)&&(e.dump&&10===e.dump.charCodeAt(0)?d+="?":d+="? "),d+=e.dump,s&&(d+=h(e,t)),w(e,t+1,l,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?d+=":":d+=": ",u+=d+=e.dump));e.tag=p,e.dump=u||"{}"}(e,t,e.dump,i),d&&(e.dump="&ref_"+s+e.dump)):(!function(e,t,n){var o,r,i,a,c,l="",s=e.tag,d=Object.keys(n);for(o=0,r=d.length;o1024&&(c+="? "),c+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),w(e,t,a,!1,!1)&&(l+=c+=e.dump));e.tag=s,e.dump="{"+l+"}"}(e,t,e.dump),d&&(e.dump="&ref_"+s+" "+e.dump));else if("[object Array]"===l){var p=e.noArrayIndent&&t>0?t-1:t;o&&0!==e.dump.length?(!function(e,t,n,o){var r,i,a="",c=e.tag;for(r=0,i=n.length;r "+e.dump)}return!0}function _(e,t){var n,o,r=[],i=[];for(function a(e,t,n){var o,r,i;if(null!==e&&"object"==typeof e)if(-1!==(r=t.indexOf(e)))-1===n.indexOf(r)&&n.push(r);else if(t.push(e),Array.isArray(e))for(r=0,i=e.length;r0}),(0,o.createComponentVNode)(2,p,{mode:g,bufferReagents:f}),(0,o.createComponentVNode)(2,m,{isCondiment:i,bufferNonEmpty:f.length>0}),(0,o.createComponentVNode)(2,C)]})]})};var u=function(e,t){var n=(0,r.useBackend)(t).act,a=e.beaker,d=e.beakerReagents,u=e.bufferNonEmpty;return(0,o.createComponentVNode)(2,i.Section,{title:"Beaker",flexGrow:"0",flexBasis:"300px",buttons:u?(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"eject",disabled:!a,content:"Eject and Clear Buffer",onClick:function(){return n("eject")}}):(0,o.createComponentVNode)(2,i.Button,{icon:"eject",disabled:!a,content:"Eject and Clear Buffer",onClick:function(){return n("eject")}}),children:a?(0,o.createComponentVNode)(2,c.BeakerContents,{beakerLoaded:!0,beakerContents:d,buttons:function(e,r){return(0,o.createComponentVNode)(2,i.Box,{mb:r0?(0,o.createComponentVNode)(2,c.BeakerContents,{beakerLoaded:!0,beakerContents:u,buttons:function(e,r){return(0,o.createComponentVNode)(2,i.Box,{mb:r0?l.desc:"N/A"}),l.blood_type&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood type",children:l.blood_type}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood DNA",className:"LabeledList__breakContents",children:l.blood_dna})],4),!c.condi&&(0,o.createComponentVNode)(2,i.Button,{icon:c.printing?"spinner":"print",disabled:c.printing,iconSpin:!!c.printing,ml:"0.5rem",content:"Print",onClick:function(){return a("print",{idx:l.idx,beaker:e.args.beaker})}})]})})})})),(0,l.modalRegisterBodyOverride)("change_patch_style",(function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.Flex,{spacingPrecise:"1",wrap:"wrap",my:"0.5rem",maxHeight:"1%",children:n.modal.choices.map((function(r,a){return(0,o.createComponentVNode)(2,i.Flex.Item,{flex:"1 1 auto",children:(0,o.createComponentVNode)(2,i.Button,{selected:a+1===parseInt(n.modal.value,10),onClick:function(){return(0,l.modalAnswer)(t,e.id,a+1)},children:(0,o.createVNode)(1,"div",null,null,1,{style:"display: inline-block;width: 32px;height: 32px;background: url(bandaid"+(a+1)+".png);background-size: 160%;background-position: left -9px bottom -14px;"})})},a)}))})}))},function(e,t,n){"use strict";t.__esModule=!0,t.CloningConsole=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(50),l=n(44),s=n(3),d=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data,s=e.args,d=s.activerecord,u=s.realname,p=s.health,m=s.unidentity,h=s.strucenzymes,f=p.split(" - ");return(0,o.createComponentVNode)(2,a.Section,{level:2,m:"-1rem",pb:"1rem",title:"Records of "+u,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Damage",children:f.length>1?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:c.COLORS.damageType.oxy,display:"inline",children:f[0]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,a.Box,{color:c.COLORS.damageType.toxin,display:"inline",children:f[2]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,a.Box,{color:c.COLORS.damageType.brute,display:"inline",children:f[3]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,a.Box,{color:c.COLORS.damageType.burn,display:"inline",children:f[1]})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Unknown"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"UI",className:"LabeledList__breakContents",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"SE",className:"LabeledList__breakContents",children:h}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Disk",children:[(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!l.disk,icon:"arrow-circle-down",content:"Import",onClick:function(){return r("disk",{option:"load"})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export UI",onClick:function(){return r("disk",{option:"save",savetype:"ui"})}}),(0,o.createComponentVNode)(2,a.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,a.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export SE",onClick:function(){return r("disk",{option:"save",savetype:"se"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,a.Button,{disabled:!l.podready,icon:"user-plus",content:"Clone",onClick:function(){return r("clone",{ref:d})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",content:"Delete",onClick:function(){return r("del_rec")}})]})]})})};t.CloningConsole=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data.menu;return(0,l.modalRegisterBodyOverride)("view_rec",d),(0,o.createComponentVNode)(2,s.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l.ComplexModal,{maxWidth:"75%",maxHeight:"75%"}),(0,o.createComponentVNode)(2,s.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,C),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,a.Section,{noTopPadding:!0,flexGrow:"1",children:(0,o.createComponentVNode)(2,p)})]})]})};var u=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data.menu;return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===c,icon:"home",onClick:function(){return r("menu",{num:1})},children:"Main"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===c,icon:"folder",onClick:function(){return r("menu",{num:2})},children:"Records"})]})},p=function(e,t){var n,r=(0,i.useBackend)(t).data.menu;return 1===r?n=(0,o.createComponentVNode)(2,m):2===r&&(n=(0,o.createComponentVNode)(2,h)),n},m=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data,s=l.loading,d=l.scantemp,u=l.occupant,p=l.locked,m=l.can_brainscan,h=l.scan_mode,f=l.numberofpods,C=l.pods,g=l.selected_pod,N=p&&!!u;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Scanner",level:"2",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{display:"inline",color:"label",children:"Scanner Lock:\xa0"}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u,selected:N,icon:N?"toggle-on":"toggle-off",content:N?"Engaged":"Disengaged",onClick:function(){return c("lock")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:N||!u,icon:"user-slash",content:"Eject Occupant",onClick:function(){return c("eject")}})],4),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:s?(0,o.createComponentVNode)(2,a.Box,{color:"average",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"spinner",spin:!0}),"\xa0 Scanning..."]}):(0,o.createComponentVNode)(2,a.Box,{color:d.color,children:d.text})}),!!m&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scan Mode",children:(0,o.createComponentVNode)(2,a.Button,{icon:h?"brain":"male",content:h?"Brain":"Body",onClick:function(){return c("toggle_mode")}})})]}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u||s,icon:"user",content:"Scan Occupant",mt:"0.5rem",mb:"0",onClick:function(){return c("scan")}})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Pods",level:"2",children:f?C.map((function(e,t){var n;return n="cloning"===e.status?(0,o.createComponentVNode)(2,a.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,a.Box,{textAlign:"center",children:(0,r.round)(e.progress,0)+"%"})}):"mess"===e.status?(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"bad",mt:"0.5rem",children:"ERROR"}):(0,o.createComponentVNode)(2,a.Button,{selected:g===e.pod,icon:g===e.pod&&"check",content:"Select",mt:"0.5rem",onClick:function(){return c("selectpod",{ref:e.pod})}}),(0,o.createComponentVNode)(2,a.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,a.Box,{color:"label",children:["Pod #",t+1]}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:e.biomass>=150?"good":"bad",display:"inline",children:[(0,o.createComponentVNode)(2,a.Icon,{name:e.biomass>=150?"circle":"circle-o"}),"\xa0",e.biomass]}),n]},t)})):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"No pods detected. Unable to clone."})})],4)},h=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data.records;return c.length?(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{icon:"user",mb:"0.5rem",content:e.realname,onClick:function(){return r("view_rec",{ref:e.record})}},t)}))}):(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 records found."]})})},f=function(e,t){var n,r=(0,i.useBackend)(t),c=r.act,l=r.data.temp;if(l&&l.text&&!(l.text.length<=0)){var s=((n={})[l.style]=!0,n);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.NoticeBox,Object.assign({},s,{children:[(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",children:l.text}),(0,o.createComponentVNode)(2,a.Button,{icon:"times-circle",float:"right",onClick:function(){return c("cleartemp")}}),(0,o.createComponentVNode)(2,a.Box,{clear:"both"})]})))}},C=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.scanner,s=c.numberofpods,d=c.autoallowed,u=c.autoprocess,p=c.disk;return(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createFragment)([!!d&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{display:"inline",color:"label",children:"Auto-processing:\xa0"}),(0,o.createComponentVNode)(2,a.Button,{selected:u,icon:u?"toggle-on":"toggle-off",content:u?"Enabled":"Disabled",onClick:function(){return r("autoprocess",{on:u?0:1})}})],4),(0,o.createComponentVNode)(2,a.Button,{disabled:!p,icon:"eject",content:"Eject Disk",onClick:function(){return r("disk",{option:"eject"})}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scanner",children:l?(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Connected"}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Not connected!"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pods",children:s?(0,o.createComponentVNode)(2,a.Box,{color:"good",children:[s," connected"]}):(0,o.createComponentVNode)(2,a.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),i=n(2),a=n(3);t.CommunicationsComputer=function(e,t){var n,c=(0,r.useBackend)(t),l=c.act,s=c.data;n=s.authenticated?s.is_ai?"AI":1===s.authenticated?"Command":2===s.authenticated?"Captain":"ERROR: Report This Bug!":"Not Logged In";var d="View ("+s.messages.length+")",u=(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Authentication",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:s.is_ai&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Access Level",children:"AI"})||(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,i.Button,{icon:s.authenticated?"sign-out-alt":"id-card",selected:s.authenticated,content:s.authenticated?"Log Out ("+n+")":"Log In",onClick:function(){return l("auth")}})})})}),!!s.esc_section&&(0,o.createComponentVNode)(2,i.Section,{title:"Escape Shuttle",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!s.esc_status&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:s.esc_status}),!!s.esc_callable&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,i.Button,{icon:"rocket",content:"Call Shuttle",disabled:!s.authenticated,onClick:function(){return l("callshuttle")}})}),!!s.esc_recallable&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Recall Shuttle",disabled:!s.authenticated||s.is_ai,onClick:function(){return l("cancelshuttle")}})}),!!s.lastCallLoc&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Last Call/Recall From",children:s.lastCallLoc})]})})],0),p="Make Priority Announcement";s.msg_cooldown>0&&(p+=" ("+s.msg_cooldown+"s)");var m=s.emagged?"Message [UNKNOWN]":"Message CentComm",h="Request Authentication Codes";s.cc_cooldown>0&&(m+=" ("+s.cc_cooldown+"s)",h+=" ("+s.cc_cooldown+"s)");var f,C=s.str_security_level,g=s.levels.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.icon,content:e.name,disabled:!s.authmax||e.id===s.security_level,onClick:function(){return l("newalertlevel",{level:e.id})}},e.name)})),N=s.stat_display.presets.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.label,selected:e.name===s.stat_display.type,disabled:!s.authenticated,onClick:function(){return l("setstat",{statdisp:e.name})}},e.name)})),b=s.stat_display.alerts.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.label,selected:e.alert===s.stat_display.icon,disabled:!s.authenticated,onClick:function(){return l("setstat",{statdisp:"alert",alert:e.alert})}},e.alert)}));if(s.current_message_title)f=(0,o.createComponentVNode)(2,i.Section,{title:s.current_message_title,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Return To Message List",disabled:!s.authenticated,onClick:function(){return l("messagelist")}}),children:(0,o.createComponentVNode)(2,i.Box,{children:s.current_message})});else{var V=s.messages.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.title,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"eye",content:"View",disabled:!s.authenticated||s.current_message_title===e.title,onClick:function(){return l("messagelist",{msgid:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Delete",disabled:!s.authenticated,onClick:function(){return l("delmessage",{msgid:e.id})}})]},e.id)}));f=(0,o.createComponentVNode)(2,i.Section,{title:"Messages Received",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return l("main")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:V})})}switch(s.menu_state){case 1:return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[u,(0,o.createComponentVNode)(2,i.Section,{title:"Captain-Only Actions",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Alert",color:s.security_level_color,children:C}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Change Alert",children:g}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Announcement",children:(0,o.createComponentVNode)(2,i.Button,{icon:"bullhorn",content:p,disabled:!s.authmax||s.msg_cooldown>0,onClick:function(){return l("announce")}})}),!!s.emagged&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transmit",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"broadcast-tower",color:"red",content:m,disabled:!s.authmax||s.cc_cooldown>0,onClick:function(){return l("MessageSyndicate")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"sync-alt",content:"Reset Relays",disabled:!s.authmax,onClick:function(){return l("RestoreBackup")}})]})||(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transmit",children:(0,o.createComponentVNode)(2,i.Button,{icon:"broadcast-tower",content:m,disabled:!s.authmax||s.cc_cooldown>0,onClick:function(){return l("MessageCentcomm")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nuclear Device",children:(0,o.createComponentVNode)(2,i.Button,{icon:"bomb",content:h,disabled:!s.authmax||s.cc_cooldown>0,onClick:function(){return l("nukerequest")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Command Staff Actions",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Displays",children:(0,o.createComponentVNode)(2,i.Button,{icon:"tv",content:"Change Status Displays",disabled:!s.authenticated,onClick:function(){return l("status")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Incoming Messages",children:(0,o.createComponentVNode)(2,i.Button,{icon:"folder-open",content:d,disabled:!s.authenticated,onClick:function(){return l("messagelist")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Misc",children:(0,o.createComponentVNode)(2,i.Button,{icon:"sync-alt",content:"Restart Nano-Mob Hunter GO! Server",disabled:!s.authenticated,onClick:function(){return l("RestartNanoMob")}})})]})})]})});case 2:return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[u,(0,o.createComponentVNode)(2,i.Section,{title:"Modify Status Screens",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return l("main")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Presets",children:N}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alerts",children:b}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message Line 1",children:(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:s.stat_display.line_1,disabled:!s.authenticated,onClick:function(){return l("setmsg1")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message Line 2",children:(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:s.stat_display.line_2,disabled:!s.authenticated,onClick:function(){return l("setmsg2")}})})]})})]})});case 3:return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[u,f]})});default:return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[u,"ERRROR. Unknown menu_state: ",s.menu_state,"Please report this to NT Technical Support."]})})}}},function(e,t,n){"use strict";t.__esModule=!0,t.Contractor=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(105),l=n(3);var s={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,r=(0,i.useBackend)(t),c=r.act,s=r.data;n=s.unauthorized?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,C,{height:"100%",allMessages:["ERROR: UNAUTHORIZED USER"],finishedTimeout:100,onFinished:function(){}})}):s.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,p)}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"hidden",children:1===s.page?(0,o.createComponentVNode)(2,m,{height:"100%"}):(0,o.createComponentVNode)(2,f,{height:"100%"})})],4):(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,C,{height:"100%",allMessages:d,finishedTimeout:3e3,onFinished:function(){return c("complete_load_animation")}})});var h=(0,i.useLocalState)(t,"viewingPhoto",""),N=h[0];h[1];return(0,o.createComponentVNode)(2,l.Window,{theme:"syndicate",children:[N&&(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,l.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,i.useBackend)(t),r=n.act,c=n.data,l=c.tc_available,s=c.tc_paid_out,d=c.completed_contracts,u=c.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:[u," 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 r("claim")}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"TC Earned",children:[s," 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:d})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Contractor Status",verticalAlign:"middle",children:"ACTIVE"})]})})]})})))},p=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=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===c,onClick:function(){return r("page",{page:1})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"suitcase"}),"Contracts"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===c,onClick:function(){return r("page",{page:2})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"shopping-cart"}),"Hub"]})]})))},m=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data,d=l.contracts,u=l.contract_active,p=l.can_extract,m=!!u&&d.filter((function(e){return 1===e.status}))[0],f=m&&m.time_left>0,C=(0,i.useLocalState)(t,"viewingPhoto",""),g=(C[0],C[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:!p||f,icon:"parachute-box",content:["Call Extraction",f&&(0,o.createComponentVNode)(2,c.Countdown,{timeLeft:m.time_left,format:function(e,t){return" ("+t.substr(3)+")"}})],onClick:function(){return r("extract")}})},e,{children:d.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 g("target_photo_"+e.uid+".png")}})})]}),className:"Contractor__Contract",buttons:(0,o.createComponentVNode)(2,a.Box,{width:"100%",children:[!!s[e.status]&&(0,o.createComponentVNode)(2,a.Box,{color:s[e.status][1],display:"inline-block",mt:1!==e.status&&"0.125rem",mr:"0.25rem",lineHeight:"20px",children:s[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 r("abort")}})]}),children:(0,o.createComponentVNode)(2,a.Flex,{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,{flexBasis:"100%",children:[(0,o.createComponentVNode)(2,a.Flex,{mb:"0.5rem",color:"label",children:["Extraction Zone:\xa0",h(e)]}),null==(t=e.difficulties)?void 0:t.map((function(t,n){return(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!!u,content:t.name+" ("+t.reward+" TC)",onClick:function(){return r("activate",{uid:e.uid,difficulty:n+1})}},n)})),!!e.objective&&(0,o.createComponentVNode)(2,a.Box,{color:"white",bold:!0,children:[e.objective.extraction_name,(0,o.createVNode)(1,"br"),"(",(e.objective.rewards.tc||0)+" TC",",\xa0",(e.objective.rewards.credits||0)+" Credits",")"]})]})]})},e.uid)}))})))},h=function(e){if(e.objective&&!(e.status>1)){var t=e.objective.locs.user_area_id,n=e.objective.locs.user_coords,i=e.objective.locs.target_area_id,c=e.objective.locs.target_coords,l=t===i;return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Icon,{name:l?"dot-circle-o":"arrow-alt-circle-right-o",color:l?"green":"yellow",rotation:l?null:-(0,r.rad2deg)(Math.atan2(c[1]-n[1],c[0]-n[0])),lineHeight:l?null:"0.85",size:"1.5"})})}},f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.rep,s=c.buyables;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({title:"Available Purchases",overflow:"auto"},e,{children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:e.refundable&&(0,o.createComponentVNode)(2,a.Button.Confirm,{content:"Refund ("+e.cost+" Rep)",onClick:function(){return r("refund",{uid:e.uid})}}),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)}))})))},C=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.state={currentIndex:0,currentDisplay:[]},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.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))},i.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)},i.componentWillUnmount=function(){clearTimeout(this.timer)},i.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),g=function(e,t){var n=(0,i.useLocalState)(t,"viewingPhoto",""),r=n[0],c=n[1];return(0,o.createComponentVNode)(2,a.Modal,{className:"Contractor__photoZoom",children:[(0,o.createComponentVNode)(2,a.Box,{as:"img",src:r}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Close",color:"grey",mt:"1rem",onClick:function(){return c("")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ConveyorSwitch=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ConveyorSwitch=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.slowFactor,d=l.oneWay,u=l.position;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Lever position",children:u>0?"forward":u<0?"reverse":"neutral"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Allow reverse",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:!d,onClick:function(){return c("toggleOneWay")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Slowdown factor",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,i.Button,{icon:"angle-double-left",onClick:function(){return c("slowFactor",{value:s-5})}})," "]}),(0,o.createComponentVNode)(2,i.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,i.Button,{icon:"angle-left",onClick:function(){return c("slowFactor",{value:s-1})}})," "]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Slider,{width:"100px",mx:"1px",value:s,fillValue:s,minValue:1,maxValue:50,step:1,format:function(e){return e+"x"},onChange:function(e,t){return c("slowFactor",{value:t})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,i.Button,{icon:"angle-right",onClick:function(){return c("slowFactor",{value:s+1})}})," "]}),(0,o.createComponentVNode)(2,i.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,i.Button,{icon:"angle-double-right",onClick:function(){return c("slowFactor",{value:s+5})}})," "]})]})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CrewMonitor=void 0;var o=n(0),r=n(24),i=n(18),a=n(1),c=n(2),l=n(80),s=n(50),d=n(3),u=function(e,t){return e.dead?"Deceased":parseInt(e.health,10)<=t?"Critical":1===parseInt(e.stat,10)?"Unconscious":"Living"},p=function(e,t){return e.dead?"red":parseInt(e.health,10)<=t?"orange":1===parseInt(e.stat,10)?"blue":"green"};t.CrewMonitor=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data),i=(0,a.useLocalState)(t,"tabIndex",r.IndexToggler),l=i[0],s=i[1];return(0,o.createComponentVNode)(2,d.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,d.Window.Content,{children:(0,o.createComponentVNode)(2,c.Box,{fillPositionedParent:!0,children:[(0,o.createComponentVNode)(2,c.Tabs,{children:[r.isBS?(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:0===l,onClick:function(){return s(0)},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"table"})," Command Data View"]},"ComDataView"):null,r.isBP?(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:1===l,onClick:function(){return s(1)},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"table"})," Security Data View"]},"SecDataView"):null,(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===l,onClick:function(){return s(2)},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:3===l,onClick:function(){return s(3)},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,f);case 1:return(0,o.createComponentVNode)(2,C);case 2:return(0,o.createComponentVNode)(2,h);case 3:return(0,o.createComponentVNode)(2,g);default:return"WE SHOULDN'T BE HERE!"}}(l)]})})})};var m=function(e){var t=e.crewData,n=e.context,d=(0,a.useBackend)(n),m=d.act,h=d.data,f=(0,r.sortBy)((function(e){return e.name}))(t||[]),C=(0,a.useLocalState)(n,"search",""),g=C[0],N=C[1],b=(0,i.createSearch)(g,(function(e){return e.name+"|"+e.assignment+"|"+e.area}));return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by name, assignment or location..",width:"100%",onInput:function(e,t){return N(t)}}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",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,{children:"Status"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Location"})]}),f.filter(b).map((function(e){return(0,o.createComponentVNode)(2,c.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,c.Box,{inline:!0,color:p(e,h.critThreshold),children:u(e,h.critThreshold)}),e.sensor_type>=2?(0,o.createComponentVNode)(2,c.Box,{inline:!0,children:["(",(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:s.COLORS.damageType.oxy,children:e.oxy}),"|",(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:s.COLORS.damageType.toxin,children:e.tox}),"|",(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:s.COLORS.damageType.burn,children:e.fire}),"|",(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:s.COLORS.damageType.brute,children:e.brute}),")"]}):null]}),(0,o.createComponentVNode)(2,l.TableCell,{children:3===e.sensor_type?h.isAI?(0,o.createComponentVNode)(2,c.Button,{fluid:!0,icon:"location-arrow",content:e.area+" ("+e.x+", "+e.y+")",onClick:function(){return m("track",{track:e.ref})}}):e.area+" ("+e.x+", "+e.y+")":"Not Available"})]},e.ref)}))]})]})},h=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data.crewmembers||[]);return(0,o.createComponentVNode)(2,m,{crewData:r,context:t})},f=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data.crewmembers.filter((function(e){return e.is_command}))||[]);return(0,o.createComponentVNode)(2,m,{crewData:r,context:t})},C=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data.crewmembers.filter((function(e){return e.is_security}))||[]);return(0,o.createComponentVNode)(2,m,{crewData:r,context:t})},g=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=(0,a.useLocalState)(t,"zoom",1),s=l[0],d=l[1],u=function(e){return e.is_command&&i.isBS||e.is_security&&i.isBP?"square":"circle"},m=function(e){return e.is_command&&i.isBS||e.is_security&&i.isBP?10:6},h=function(e,t){return e.is_command&&i.isBS||e.is_security&&i.isBP?e.dead?"red":parseInt(e.health,10)<=t?"orange":1===parseInt(e.stat,10)?"blue":"violet":p(e,t)};return(0,o.createComponentVNode)(2,c.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,c.NanoMap,{onZoom:function(e){return d(e)},children:i.crewmembers.filter((function(e){return 3===e.sensor_type})).map((function(e){return(0,o.createComponentVNode)(2,c.NanoMap.Marker,{x:e.x,y:e.y,zoom:s,icon:u(e),size:m(e),tooltip:e.name+" ("+e.assignment+")",color:h(e,i.critThreshold),onClick:function(){i.isAI&&r("track",{track:e.ref})}},e.ref)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Cryo=void 0;var o=n(0),r=n(534),i=n(1),a=n(2),c=n(3),l=[{label:"\u0410\u0441\u0444\u0438\u043a\u0441\u0438\u044f",type:"oxyLoss"},{label:"\u0418\u043d\u0442\u043e\u043a\u0441\u0438\u043a\u0430\u0446\u0438\u044f",type:"toxLoss"},{label:"\u0420\u0430\u043d\u044b",type:"bruteLoss"},{label:"\u041e\u0436\u043e\u0433\u0438",type:"fireLoss"}],s=[["good","\u0412 \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0438"],["average","\u0411\u0435\u0437 \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u044f"],["bad","\u0422\u0420\u0423\u041f"]];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,i.useBackend)(t),r=n.act,c=n.data,d=c.isOperating,p=c.hasOccupant,m=c.occupant,h=void 0===m?[]:m,f=c.cellTemperature,C=c.cellTemperatureStatus,g=c.isBeakerLoaded,N=c.auto_eject_healthy,b=c.auto_eject_dead;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"\u041f\u0430\u0446\u0438\u0435\u043d\u0442",flexGrow:"1",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"user-slash",onClick:function(){return r("ejectOccupant")},disabled:!p,children:"\u0418\u0437\u0432\u043b\u0435\u0447\u044c"}),children:p?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u041f\u0430\u0446\u0438\u0435\u043d\u0442",children:h.name||"\u0418\u043c\u044f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:h.health,max:h.maxHealth,value:h.health/h.maxHealth,color:h.health>0?"good":"average",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(h.health)})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0421\u0442\u0430\u0442\u0443\u0441",color:s[h.stat][0],children:s[h.stat][1]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(h.bodyTemperature)})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),l.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:h[e.type]/100,ranges:{bad:[.01,Infinity]},children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(h[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"),"\u041f\u0430\u0446\u0438\u0435\u043d\u0442 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d."]})})}),(0,o.createComponentVNode)(2,a.Section,{title:"\u041a\u0440\u0438\u043e\u043a\u0430\u043f\u0441\u0443\u043b\u0430",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",onClick:function(){return r("ejectBeaker")},disabled:!g,children:"\u0418\u0437\u0432\u043b\u0435\u0447\u044c \u0451\u043c\u043a\u043e\u0441\u0442\u044c"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u041f\u0438\u0442\u0430\u043d\u0438\u0435",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",onClick:function(){return r(d?"switchOff":"switchOn")},selected:d,children:d?"\u0412\u043a\u043b":"\u0412\u044b\u043a\u043b"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",color:C,children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:f})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0401\u043c\u043a\u043e\u0441\u0442\u044c",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0410\u0432\u0442\u043e\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u0445 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u043e\u0432",children:(0,o.createComponentVNode)(2,a.Button,{icon:N?"toggle-on":"toggle-off",selected:N,onClick:function(){return r(N?"auto_eject_healthy_off":"auto_eject_healthy_on")},children:N?"\u0412\u043a\u043b":"\u0412\u044b\u043a\u043b"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0410\u0432\u0442\u043e\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u043e\u0432",children:(0,o.createComponentVNode)(2,a.Button,{icon:b?"toggle-on":"toggle-off",selected:b,onClick:function(){return r(b?"auto_eject_dead_off":"auto_eject_dead_on")},children:b?"\u0412\u043a\u043b":"\u0412\u044b\u043a\u043b"})})]})})],4)},u=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data),l=c.isBeakerLoaded,s=c.beakerLabel,d=c.beakerVolume;return l?(0,o.createFragment)([s?"\xab"+s+"\xbb":(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"\u0401\u043c\u043a\u043e\u0441\u0442\u044c \u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0430"}),(0,o.createComponentVNode)(2,a.Box,{color:!d&&"bad",children:d?(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:d,format:function(e){var t=Math.round(e);return(0,r.declensionRu)(t,"\u041e\u0441\u0442\u0430\u043b\u0430\u0441\u044c","\u041e\u0441\u0442\u0430\u043b\u0438\u0441\u044c","\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c")+" "+t+" "+(0,r.declensionRu)(t,"\u0435\u0434\u0438\u043d\u0438\u0446\u0430","\u0435\u0434\u0438\u043d\u0438\u0446\u044b","\u0435\u0434\u0438\u043d\u0438\u0446")}}):"\u0401\u043c\u043a\u043e\u0441\u0442\u044c \u043f\u0443\u0441\u0442\u0430"})],0):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"\u0401\u043c\u043a\u043e\u0441\u0442\u044c \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430"})}},function(e,t,n){"use strict";t.__esModule=!0,t.declensionRu=void 0;t.declensionRu=function(e,t,n,o){var r=e%100;if(r>=10&&r<=20)return o;var i=r%10;return 1===i?t:i>=2&&i<=4?n:o}},function(e,t,n){"use strict";t.__esModule=!0,t.CryopodConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(18);t.CryopodConsole=function(e,t){var n=(0,r.useBackend)(t).data,c=n.account_name,d=n.allow_items;return(0,o.createComponentVNode)(2,a.Window,{title:"Cryopod Console",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Hello, "+(c||"[REDACTED]")+"!",children:"This automated cryogenic freezing unit will safely store your corporeal form until your next assignment."}),(0,o.createComponentVNode)(2,l),!!d&&(0,o.createComponentVNode)(2,s)]})})};var l=function(e,t){var n=(0,r.useBackend)(t).data.frozen_crew;return(0,o.createComponentVNode)(2,i.Collapsible,{title:"Stored Crew",children:n.length?(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:n.map((function(e,t){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:e.rank},t)}))})}):(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No stored crew!"})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data.frozen_items,s=function(e){var t=e.toString();return t.startsWith("the ")&&(t=t.slice(4,t.length)),(0,c.toTitleCase)(t)};return(0,o.createComponentVNode)(2,i.Collapsible,{title:"Stored Items",buttons:(0,o.createComponentVNode)(2,i.Button,{disabled:!l.length,content:"Drop All Items",color:"red",onClick:function(){return a("all_items")}}),children:l.length?(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:s(e.name),buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",content:"Drop",mr:1,onClick:function(){return a("one_item",{item:e.uid})}})},e)}))})}):(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No stored items!"})})}},function(e,t,n){"use strict";t.__esModule=!0,t.DNAModifier=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(44),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],s=[["ui","Modify U.I.","dna"],["se","Modify S.E.","dna"],["buffer","Transfer Buffers","syringe"],["rejuvenators","Rejuvenators","flask"]],d=[5,10,20,30,50];t.DNAModifier=function(e,t){var n,i=(0,r.useBackend)(t),l=(i.act,i.data),s=l.irradiating,d=l.dnaBlockSize,m=l.occupant;return t.dnaBlockSize=d,t.isDNAInvalid=!m.isViableSubject||!m.uniqueIdentity||!m.structuralEnzymes,s&&(n=(0,o.createComponentVNode)(2,V,{duration:s})),(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,c.ComplexModal),n,(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,p)]})]})};var u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,s=c.locked,d=c.hasOccupant,u=c.occupant;return(0,o.createComponentVNode)(2,i.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{color:"label",display:"inline",mr:"0.5rem",children:"Door Lock:"}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d,selected:s,icon:s?"toggle-on":"toggle-off",content:s?"Engaged":"Disengaged",onClick:function(){return a("toggleLock")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d||s,icon:"user-slash",content:"Eject",onClick:function(){return a("ejectOccupant")}})],4),children:d?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:u.name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:u.minHealth,max:u.maxHealth,value:u.health/u.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",color:l[u.stat][0],children:l[u.stat][1]}),(0,o.createComponentVNode)(2,i.LabeledList.Divider)]})}),t.isDNAInvalid?(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,i.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,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Radiation",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:"100",value:u.radiationLevel/100,color:"average"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Unique Enzymes",children:c.occupant.uniqueEnzymes?c.occupant.uniqueEnzymes:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"exclamation-circle"}),"\xa0 Unknown"]})})]})],0):(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"Cell unoccupied."})})},p=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,l=a.data,d=l.selectedMenuKey,u=l.hasOccupant;l.occupant;return u?t.isDNAInvalid?(0,o.createComponentVNode)(2,i.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No operation possible on this subject."]})})}):("ui"===d?n=(0,o.createFragment)([(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,f)],4):"se"===d?n=(0,o.createFragment)([(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,f)],4):"buffer"===d?n=(0,o.createComponentVNode)(2,C):"rejuvenators"===d&&(n=(0,o.createComponentVNode)(2,b)),(0,o.createComponentVNode)(2,i.Section,{flexGrow:"1",children:[(0,o.createComponentVNode)(2,i.Tabs,{children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:d===e[0],onClick:function(){return c("selectMenuKey",{key:e[0]})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:e[2]}),e[1]]},t)}))}),n]})):(0,o.createComponentVNode)(2,i.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant in DNA modifier."]})})})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.selectedUIBlock,s=c.selectedUISubBlock,d=c.selectedUITarget,u=c.occupant;return(0,o.createComponentVNode)(2,i.Section,{title:"Modify Unique Identifier",level:"2",children:[(0,o.createComponentVNode)(2,v,{dnaString:u.uniqueIdentity,selectedBlock:l,selectedSubblock:s,blockSize:t.dnaBlockSize,action:"selectUIBlock"}),(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,i.Knob,{minValue:"1",maxValue:"15",stepPixelSize:"20",value:d,format:function(e){return e.toString(16).toUpperCase()},ml:"0",onChange:function(e,t){return a("changeUITarget",{value:t})}})})}),(0,o.createComponentVNode)(2,i.Button,{icon:"radiation",content:"Irradiate Block",mt:"0.5rem",onClick:function(){return a("pulseUIRadiation")}})]})},h=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.selectedSEBlock,s=c.selectedSESubBlock,d=c.occupant;return(0,o.createComponentVNode)(2,i.Section,{title:"Modify Structural Enzymes",level:"2",children:[(0,o.createComponentVNode)(2,v,{dnaString:d.structuralEnzymes,selectedBlock:l,selectedSubblock:s,blockSize:t.dnaBlockSize,action:"selectSEBlock"}),(0,o.createComponentVNode)(2,i.Button,{icon:"radiation",content:"Irradiate Block",onClick:function(){return a("pulseSERadiation")}})]})},f=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.radiationIntensity,s=c.radiationDuration;return(0,o.createComponentVNode)(2,i.Section,{title:"Radiation Emitter",level:"2",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Intensity",children:(0,o.createComponentVNode)(2,i.Knob,{minValue:"1",maxValue:"10",stepPixelSize:"20",value:l,popUpPosition:"right",ml:"0",onChange:function(e,t){return a("radiationIntensity",{value:t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Duration",children:(0,o.createComponentVNode)(2,i.Knob,{minValue:"1",maxValue:"20",stepPixelSize:"10",unit:"s",value:s,popUpPosition:"right",ml:"0",onChange:function(e,t){return a("radiationDuration",{value:t})}})})]}),(0,o.createComponentVNode)(2,i.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 a("pulseRadiation")}})]})},C=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.buffers.map((function(e,t){return(0,o.createComponentVNode)(2,g,{id:t+1,name:"Buffer "+(t+1),buffer:e},t)})));return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Buffers",level:"2",children:a}),(0,o.createComponentVNode)(2,N)],4)},g=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=e.id,s=e.name,d=e.buffer,u=c.isInjectorReady,p=s+(d.data?" - "+d.label:"");return(0,o.createComponentVNode)(2,i.Box,{backgroundColor:"rgba(0, 0, 0, 0.33)",mb:"0.5rem",children:(0,o.createComponentVNode)(2,i.Section,{title:p,level:"3",mx:"0",lineHeight:"18px",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button.Confirm,{disabled:!d.data,icon:"trash",content:"Clear",onClick:function(){return a("bufferOption",{option:"clear",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d.data,icon:"pen",content:"Rename",onClick:function(){return a("bufferOption",{option:"changeLabel",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d.data||!c.hasDisk,icon:"save",content:"Export",tooltip:"Exports this buffer to the currently loaded data disk.",tooltipPosition:"bottom-left",onClick:function(){return a("bufferOption",{option:"saveDisk",id:l})}})],4),children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Write",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-down",content:"Subject U.I",mb:"0",onClick:function(){return a("bufferOption",{option:"saveUI",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-down",content:"Subject U.I and U.E.",mb:"0",onClick:function(){return a("bufferOption",{option:"saveUIAndUE",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-down",content:"Subject S.E.",mb:"0",onClick:function(){return a("bufferOption",{option:"saveSE",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!c.hasDisk||!c.disk.data,icon:"arrow-circle-down",content:"From Disk",mb:"0",onClick:function(){return a("bufferOption",{option:"loadDisk",id:l})}})]}),!!d.data&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Subject",children:d.owner||(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"Unknown"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Data Type",children:["ui"===d.type?"Unique Identifiers":"Structural Enzymes",!!d.ue&&" and Unique Enzymes"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transfer to",children:[(0,o.createComponentVNode)(2,i.Button,{disabled:!u,icon:u?"syringe":"spinner",iconSpin:!u,content:"Injector",mb:"0",onClick:function(){return a("bufferOption",{option:"createInjector",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!u,icon:u?"syringe":"spinner",iconSpin:!u,content:"Block Injector",mb:"0",onClick:function(){return a("bufferOption",{option:"createInjector",id:l,block:1})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"user",content:"Subject",mb:"0",onClick:function(){return a("bufferOption",{option:"transfer",id:l})}})]})],4)]}),!d.data&&(0,o.createComponentVNode)(2,i.Box,{color:"label",mt:"0.5rem",children:"This buffer is empty."})]})})},N=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.hasDisk,s=c.disk;return(0,o.createComponentVNode)(2,i.Section,{title:"Data Disk",level:"2",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button.Confirm,{disabled:!l||!s.data,icon:"trash",content:"Wipe",onClick:function(){return a("wipeDisk")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!l,icon:"eject",content:"Eject",onClick:function(){return a("ejectDisk")}})],4),children:l?s.data?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Label",children:s.label?s.label:"No label"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Subject",children:s.owner?s.owner:(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"Unknown"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Data Type",children:["ui"===s.type?"Unique Identifiers":"Structural Enzymes",!!s.ue&&" and Unique Enzymes"]})]}):(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"Disk is blank."}):(0,o.createComponentVNode)(2,i.Box,{color:"label",textAlign:"center",my:"1rem",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"save-o",size:"4"}),(0,o.createVNode)(1,"br"),"No disk inserted."]})})},b=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.isBeakerLoaded,s=c.beakerVolume,u=c.beakerLabel;return(0,o.createComponentVNode)(2,i.Section,{title:"Rejuvenators and Beaker",level:"2",buttons:(0,o.createComponentVNode)(2,i.Button,{disabled:!l,icon:"eject",content:"Eject",onClick:function(){return a("ejectBeaker")}}),children:l?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Inject",children:[d.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{disabled:e>s,icon:"syringe",content:e,onClick:function(){return a("injectRejuvenators",{amount:e})}},t)})),(0,o.createComponentVNode)(2,i.Button,{disabled:s<=0,icon:"syringe",content:"All",onClick:function(){return a("injectRejuvenators",{amount:s})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Beaker",children:[(0,o.createComponentVNode)(2,i.Box,{mb:"0.5rem",children:u||"No label"}),s?(0,o.createComponentVNode)(2,i.Box,{color:"good",children:[s," unit",1===s?"":"s"," remaining"]}):(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Empty"})]})]}):(0,o.createComponentVNode)(2,i.Box,{color:"label",textAlign:"center",my:"25%",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"exclamation-triangle",size:"4"}),(0,o.createVNode)(1,"br"),"No beaker loaded."]})})},V=function(e,t){return(0,o.createComponentVNode)(2,i.Dimmer,{textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"spinner",size:"5",spin:!0}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Box,{color:"average",children:(0,o.createVNode)(1,"h1",null,[(0,o.createComponentVNode)(2,i.Icon,{name:"radiation"}),(0,o.createTextVNode)("\xa0Irradiating occupant\xa0"),(0,o.createComponentVNode)(2,i.Icon,{name:"radiation"})],4)}),(0,o.createComponentVNode)(2,i.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),a=n.act,c=(n.data,e.dnaString),l=e.selectedBlock,s=e.selectedSubblock,d=e.blockSize,u=e.action,p=c.split(""),m=[],h=function(e){for(var t=e/d+1,n=[],r=function(r){var c=r+1;n.push((0,o.createComponentVNode)(2,i.Button,{selected:l===t&&s===c,content:p[e+r],mb:"0",onClick:function(){return a(u,{block:t,subblock:c})}}))},c=0;c0?"Yes":"No",selected:l.com>0,onClick:function(){return c("toggle_com")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Security",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.sec===e,content:e,onClick:function(){return c("set_sec",{set_sec:e})}},"sec"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Medical",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.med===e,content:e,onClick:function(){return c("set_med",{set_med:e})}},"med"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Engineering",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.eng===e,content:e,onClick:function(){return c("set_eng",{set_eng:e})}},"eng"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Paranormal",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.par===e,content:e,onClick:function(){return c("set_par",{set_par:e})}},"par"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Janitor",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.jan===e,content:e,onClick:function(){return c("set_jan",{set_jan:e})}},"jan"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cyborg",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.cyb===e,content:e,onClick:function(){return c("set_cyb",{set_cyb:e})}},"cyb"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Slots",children:(0,o.createComponentVNode)(2,i.Box,{color:l.total>l.spawnpoints?"red":"green",children:[l.total," total, versus ",l.spawnpoints," spawnpoints"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Dispatch",children:(0,o.createComponentVNode)(2,i.Button,{icon:"ambulance",content:"Send ERT",onClick:function(){return c("dispatch_ert")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Electropack=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3);t.Electropack=function(e,t){var n=(0,i.useBackend)(t),l=n.act,s=n.data,d=s.power,u=s.code,p=s.frequency,m=s.minFrequency,h=s.maxFrequency;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:d?"power-off":"times",content:d?"On":"Off",selected:d,onClick:function(){return l("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Frequency",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Reset",onClick:function(){return l("reset",{reset:"freq"})}}),children:(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:6,minValue:m/10,maxValue:h/10,value:p/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,a.LabeledList.Item,{label:"Code",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Reset",onClick:function(){return l("reset",{reset:"code"})}}),children:(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:u,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),i=n(2),a=n(3);t.EvolutionMenu=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"changeling",children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,l)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.evo_points,s=c.can_respec;return(0,o.createComponentVNode)(2,i.Section,{title:"Evolution Points",height:5.5,children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mt:.5,color:"label",children:"Points remaining:"}),(0,o.createComponentVNode)(2,i.Flex.Item,{mt:.5,ml:2,bold:!0,color:"#1b945c",children:l}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{ml:2.5,disabled:!s,content:"Readapt",icon:"sync",onClick:function(){return a("readapt")}}),(0,o.createComponentVNode)(2,i.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),a=n.act,c=n.data,l=c.evo_points,s=c.ability_list,d=c.purchased_abilities,u=c.view_mode;return(0,o.createComponentVNode)(2,i.Section,{title:"Abilities",flexGrow:"1",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:u?"square-o":"check-square-o",selected:!u,content:"Compact",onClick:function(){return a("set_view_mode",{mode:0})}}),(0,o.createComponentVNode)(2,i.Button,{icon:u?"check-square-o":"square-o",selected:u,content:"Expanded",onClick:function(){return a("set_view_mode",{mode:1})}})],4),children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{p:.5,mx:-1,className:"candystripe",children:[(0,o.createComponentVNode)(2,i.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{ml:.5,color:"#dedede",children:e.name}),d.includes(e.power_path)&&(0,o.createComponentVNode)(2,i.Flex.Item,{ml:2,bold:!0,color:"#1b945c",children:"(Purchased)"}),(0,o.createComponentVNode)(2,i.Flex.Item,{mr:3,textAlign:"right",grow:1,children:[(0,o.createComponentVNode)(2,i.Box,{as:"span",color:"label",children:["Cost: "," "]}),(0,o.createComponentVNode)(2,i.Box,{as:"span",bold:!0,color:"#1b945c",children:e.cost})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{textAlign:"right",children:(0,o.createComponentVNode)(2,i.Button,{mr:.5,disabled:e.cost>l||d.includes(e.power_path),content:"Evolve",onClick:function(){return a("purchase",{power_path:e.power_path})}})})]}),!!u&&(0,o.createComponentVNode)(2,i.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(7),i=n(18),a=n(1),c=n(2),l=n(105),s=n(3);var d={bananium:"clown",tranquillite:"mime"};t.ExosuitFabricator=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data),i=r.building;return(0,o.createComponentVNode)(2,s.Window,{theme:r.ui_theme,children:(0,o.createComponentVNode)(2,s.Window.Content,{className:"Exofab",children:(0,o.createComponentVNode)(2,c.Flex,{width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",mr:"0.5rem",width:"70%",children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",basis:"100%",children:(0,o.createComponentVNode)(2,p)}),i&&(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",mt:"0.5rem",children:(0,o.createComponentVNode)(2,m)})]})}),(0,o.createComponentVNode)(2,c.Flex.Item,{width:"30%",children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",basis:"50%",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",basis:"50%",mt:"0.5rem",children:(0,o.createComponentVNode)(2,h)})]})})]})})})};var u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.materials,s=i.capacity,d=Object.values(l).reduce((function(e,t){return e+t}),0);return(0,o.createComponentVNode)(2,c.Section,{title:"Materials",className:"Exofab__materials",buttons:(0,o.createComponentVNode)(2,c.Box,{color:"label",mt:"0.25rem",children:[(d/s*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,f,{id:e,bold:"$metal"===e||"$glass"===e,onClick:function(){return r("withdraw",{id:e})}},e)}))})},p=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data,s=l.curCategory,d=l.categories,u=l.designs,p=l.syncing,m=(0,a.useLocalState)(t,"searchText",""),h=m[0],f=m[1],g=(0,i.createSearch)(h,(function(e){return e.name})),N=u.filter(g);return(0,o.createComponentVNode)(2,c.Section,{className:"Exofab__designs",title:(0,o.createComponentVNode)(2,c.Dropdown,{selected:s,options:d,onSelected:function(e){return r("category",{cat:e})},width:"150px"}),height:"100%",buttons:(0,o.createComponentVNode)(2,c.Box,{mt:"-18px",children:[(0,o.createComponentVNode)(2,c.Button,{icon:"plus",content:"Queue all",onClick:function(){return r("queueall")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:p,iconSpin:p,icon:"sync-alt",content:p?"Synchronizing...":"Synchronize with R&D servers",onClick:function(){return r("sync")}})]}),children:[(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by name...",mb:"0.5rem",width:"100%",onInput:function(e,t){return f(t)}}),N.map((function(e){return(0,o.createComponentVNode)(2,C,{design:e},e.id)})),0===N.length&&(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No designs found."})]})},m=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data),i=r.building,s=r.buildStart,d=r.buildEnd,u=r.worldTime;return(0,o.createComponentVNode)(2,c.Section,{className:"Exofab__building",stretchContents:!0,children:(0,o.createComponentVNode)(2,c.ProgressBar.Countdown,{start:s,current:u,end:d,bold:!0,children:[(0,o.createComponentVNode)(2,c.Box,{float:"left",children:(0,o.createComponentVNode)(2,c.Icon,{name:"cog",spin:!0})}),"Building ",i,"\xa0(",(0,o.createComponentVNode)(2,l.Countdown,{current:u,timeLeft:d-u,format:function(e,t){return t.substr(3)}}),")"]})})},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.queue,s=i.processingQueue,d=Object.entries(i.queueDeficit).filter((function(e){return e[1]<0})),u=l.reduce((function(e,t){return e+t.time}),0);return(0,o.createComponentVNode)(2,c.Section,{className:"Exofab__queue",title:"Queue",buttons:(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{selected:s,icon:s?"toggle-on":"toggle-off",content:"Process",onClick:function(){return r("process")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:0===l.length,icon:"eraser",content:"Clear",onClick:function(){return r("unqueueall")}})]}),children:(0,o.createComponentVNode)(2,c.Flex,{height:"100%",direction:"column",children:0===l.length?(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"The queue is empty."}):(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Flex.Item,{className:"Exofab__queue--queue",grow:"1",overflow:"auto",children:l.map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{color:e.notEnough&&"bad",children:[t+1,". ",e.name,t>0&&(0,o.createComponentVNode)(2,c.Button,{icon:"arrow-up",onClick:function(){return r("queueswap",{from:t+1,to:t})}}),t0&&(0,o.createComponentVNode)(2,c.Flex.Item,{className:"Exofab__queue--time",basis:"content",shrink:"0",children:[(0,o.createComponentVNode)(2,c.Divider),"Processing time:",(0,o.createComponentVNode)(2,c.Icon,{name:"clock",mx:"0.5rem"}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",bold:!0,children:new Date(u/10*1e3).toISOString().substr(14,5)})]}),Object.keys(d).length>0&&(0,o.createComponentVNode)(2,c.Flex.Item,{className:"Exofab__queue--deficit",basis:"content",shrink:"0",children:[(0,o.createComponentVNode)(2,c.Divider),"Lacking materials to complete:",d.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,f,{id:e[0],amount:-e[1],lineDisplay:!0})},e[0])}))]})],0)})})},f=function(e,t){var n=(0,a.useBackend)(t),i=(n.act,n.data),l=e.id,s=e.amount,u=e.lineDisplay,p=e.onClick,m=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["id","amount","lineDisplay","onClick"]),h=l.replace("$",""),f=i.materials[l]||0,C=s||f;if(!(C<=0&&"metal"!==h&&"glass"!==h)){var g=s&&s>f;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Flex,Object.assign({className:(0,r.classes)(["Exofab__material",u&&"Exofab__material--line"])},m,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",children:(0,o.createComponentVNode)(2,c.Button,{onClick:p,children:(0,o.createComponentVNode)(2,c.Box,{as:"img",src:"sheet-"+(d[h]||h)+".png"})})}),(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",children:u?(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__material--amount",color:g&&"bad",children:C.toLocaleString("en-US")}):(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__material--name",children:h}),(0,o.createComponentVNode)(2,c.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,a.useBackend)(t),r=n.act,i=n.data,l=e.design;return(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__design",children:[(0,o.createComponentVNode)(2,c.Button,{disabled:l.notEnough||i.building,icon:"cog",content:l.name,onClick:function(){return r("build",{id:l.id})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"plus-circle",onClick:function(){return r("queue",{id:l.id})}}),(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__design--cost",children:Object.entries(l.cost).map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,f,{id:e[0],amount:e[1],lineDisplay:!0})},e[0])}))}),(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__design--time",children:[(0,o.createComponentVNode)(2,c.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),i=n(2),a=n(3);t.ExternalAirlockController=function(e,t){var n,c,l=(0,r.useBackend)(t),s=l.act,d=l.data,u=d.chamber_pressure,p=(d.exterior_status,d.interior_status),m=d.processing;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Information",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Chamber Pressure",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:(n=u,c="good",n<80?c="bad":n<95||n>110?c="average":n>120&&(c="bad"),c),value:u,minValue:0,maxValue:1013,children:[u," kPa"]})})})}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Cycle to Exterior",icon:"arrow-circle-left",disabled:m,onClick:function(){return s("cycle_ext")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Cycle to Interior",icon:"arrow-circle-right",disabled:m,onClick:function(){return s("cycle_int")}})]}),(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Force Exterior Door",icon:"exclamation-triangle",color:"open"===p?"red":m?"yellow":null,onClick:function(){return s("force_ext")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Force Interior Door",icon:"exclamation-triangle",color:"open"===p?"red":m?"yellow":null,onClick:function(){return s("force_int")}})]}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Abort",icon:"ban",color:"red",disabled:!m,onClick:function(){return s("abort")}})})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.FaxMachine=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.FaxMachine=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID Card",children:(0,o.createComponentVNode)(2,i.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 c("scan")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Authorize",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.authenticated?"sign-out-alt":"id-card",selected:l.authenticated,disabled:!l.scan_name&&!l.authenticated,content:l.authenticated?"Log Out":"Log In",onClick:function(){return c("auth")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Fax Menu",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Network",children:l.network}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Document",children:[(0,o.createComponentVNode)(2,i.Button,{icon:l.paper?"eject":"paperclip",disabled:!l.authenticated&&!l.paper,content:l.paper?l.paper:"-----",onClick:function(){return c("paper")}}),!!l.paper&&(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:"Rename",onClick:function(){return c("rename")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Sending To",children:(0,o.createComponentVNode)(2,i.Button,{icon:"print",content:l.destination?l.destination:"-----",disabled:!l.authenticated,onClick:function(){return c("dept")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Action",children:(0,o.createComponentVNode)(2,i.Button,{icon:"envelope",content:l.sendError?l.sendError:"Send",disabled:!l.paper||!l.destination||!l.authenticated||l.sendError,onClick:function(){return c("send")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.FloorPainter=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data,e.image),a=e.isSelected,c=e.onSelect;return(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+i,style:{"border-style":a?"solid":"none","border-width":"2px","border-color":"orange",padding:a?"2px":"4px"},onClick:c})};t.FloorPainter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.availableStyles,u=s.selectedStyle,p=s.selectedDir,m=s.directionsPreview,h=s.allStylesPreview;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Decal setup",children:[(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-left",onClick:function(){return l("cycle_style",{offset:-1})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Dropdown,{options:d,selected:u,width:"150px",height:"20px",ml:"2px",mr:"2px",nochevron:"true",onSelected:function(e){return l("select_style",{style:e})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-right",onClick:function(){return l("cycle_style",{offset:1})}})})]}),(0,o.createComponentVNode)(2,i.Box,{mt:"5px",mb:"5px",children:(0,o.createComponentVNode)(2,i.Flex,{overflowY:"auto",maxHeight:"220px",wrap:"wrap",children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,c,{image:h[e],isSelected:u===e,onSelect:function(){return l("select_style",{style:e})}})},"{style}")}))})}),(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Direction",children:(0,o.createComponentVNode)(2,i.Table,{style:{display:"inline"},children:["north","","south"].map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[e+"west",e,e+"east"].map((function(e){return(0,o.createComponentVNode)(2,i.Table.Cell,{style:{"vertical-align":"middle","text-align":"center"},children:""===e?(0,o.createComponentVNode)(2,i.Icon,{name:"arrows-alt",size:3}):(0,o.createComponentVNode)(2,c,{image:m[e],isSelected:e===p,onSelect:function(){return l("select_direction",{direction:e})}})},e)}))},e)}))})})})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GPS=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3),l=function(e){return e?"("+e.join(", ")+")":"ERROR"};t.GPS=function(e,t){var n=(0,i.useBackend)(t).data,r=n.emped,l=n.active,m=n.area,h=n.position,f=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:r?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,s,{emp:!0})}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,d)}),l?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,u,{area:m,position:h})}),f&&(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,u,{title:"Saved Position",position:f})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,p,{height:"100%"})})],0):(0,o.createComponentVNode)(2,s)],0)})})})};var s=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,i.useBackend)(t),r=n.act,c=n.data,l=c.active,s=c.tag,d=c.same_z,u=(0,i.useLocalState)(t,"newTag",s),p=u[0],m=u[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 r("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:s,onEnter:function(){return r("tag",{newtag:p})},onInput:function(e,t){return m(t)}}),(0,o.createComponentVNode)(2,a.Button,{disabled:s===p,width:"20px",mb:"0",ml:"0.25rem",onClick:function(){return r("tag",{newtag:p})},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:!d,icon:d?"compress":"expand",content:d?"Local Sector":"Global",onClick:function(){return r("same_z")}})})]})})},u=function(e,t){var n=e.title,r=e.area,i=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),l(i)]})})},p=function(e,t){var n=(0,i.useBackend)(t).data,c=n.position,s=n.signals,d=n.upgraded;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:s.map((function(e){return Object.assign({},e,{},function(e,t,n){if(e&&t){if(e[2]!==t[2]||1!==n)return null;var o=Math.atan2(t[1]-e[1],t[0]-e[0]),i=Math.sqrt(Math.pow(t[1]-e[1],2)+Math.pow(t[0]-e[0],2));return{angle:(0,r.rad2deg)(o),distance:i}}}(c,e.position,d))})).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:l(e.position)})]},t)}))})})))}},function(e,t,n){"use strict";t.__esModule=!0,t.GasAnalyzer=t.GasAnalyzerHistory=t.GasAnalyzerContent=void 0;var o=n(0),r=n(1),i=n(551),a=n(2),c=n(3),l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.gasmixes,d=l.autoUpdating;return(0,o.createComponentVNode)(2,a.Section,{title:s[0].name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d?"unlock":"lock",onClick:function(){return c("autoscantoggle")},tooltip:d?"Auto-Update Enabled":"Auto-Update Disabled",fluid:!0,textAlign:"center",selected:d}),children:(0,o.createComponentVNode)(2,i.GasmixParser)},s[0])};t.GasAnalyzerContent=l;var s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.historyGasmixes,s=c.historyViewMode,d=c.historyIndex;return(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Scan History",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"trash",tooltip:"Clear History",onClick:function(){return i("clearhistory")},textAlign:"center",disabled:0===l.length}),children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mode",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"50%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"kPa",onClick:function(){return i("modekpa")},textAlign:"center",selected:"kpa"===s})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"mol",onClick:function(){return i("modemol")},textAlign:"center",selected:"mol"===s})})]})}),(0,o.createComponentVNode)(2,a.LabeledList,{children:l.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:t+1+". "+("mol"===s?e[0].total_moles.toFixed(2):e[0].pressure.toFixed(2)),onClick:function(){return i("input",{target:t+1})},textAlign:"left",selected:t+1===d,fluid:!0})},e[0])}))})]})};t.GasAnalyzerHistory=s;t.GasAnalyzer=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,a.Section,{grow:!0,children:(0,o.createComponentVNode)(2,l)}),2,{style:{float:"left",width:"67%"}}),(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,a.Section,{width:"160px",children:(0,o.createComponentVNode)(2,s)}),2,{style:{float:"right",width:"33%"}})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GasmixParser=void 0;var o=n(0),r=n(1),i=n(2);t.GasmixParser=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.gasmixes);return a[0].total_moles?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Moles",children:(a[0].total_moles?a[0].total_moles:"-")+" mol"}),a[0].oxygen?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen",children:a[0].oxygen.toFixed(2)+" mol ("+100*(a[0].oxygen/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].nitrogen?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nitrogen",children:a[0].nitrogen.toFixed(2)+" mol ("+100*(a[0].nitrogen/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].carbon_dioxide?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Carbon Dioxide",children:a[0].carbon_dioxide.toFixed(2)+" mol ("+100*(a[0].carbon_dioxide/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].toxins?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Plasma",children:a[0].toxins.toFixed(2)+" mol ("+100*(a[0].toxins/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].sleeping_agent?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nitrous Oxide",children:a[0].sleeping_agent.toFixed(2)+" mol ("+100*(a[0].sleeping_agent/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].agent_b?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Agent B",children:a[0].agent_b.toFixed(2)+" mol ("+100*(a[0].agent_b/a[0].total_moles).toFixed(2)+" %)"}):"",(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(a[0].total_moles?(a[0].temperature-273.15).toFixed(2):"-")+" \xb0C ("+(a[0].total_moles?a[0].temperature.toFixed(2):"-")+" K)"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Volume",children:(a[0].total_moles?a[0].volume:"-")+" L"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure",children:(a[0].total_moles?a[0].pressure.toFixed(2):"-")+" kPa"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Heat Capacity",children:a[0].heat_capacity+" / K"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Thermal Energy",children:a[0].thermal_energy})]}):(0,o.createComponentVNode)(2,i.Box,{nowrap:!0,italic:!0,mb:"10px",children:"No Gas Detected!"})}},function(e,t,n){"use strict";t.__esModule=!0,t.GasFreezer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.GasFreezer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.on,d=l.pressure,u=l.temperature,p=l.temperatureCelsius,m=l.min,h=l.max,f=l.target,C=l.targetCelsius,g=(u-m)/(h-m);return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u0442\u0430\u0442\u0443\u0441",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s?"power-off":"times",content:s?"\u0412\u043a\u043b":"\u0412\u044b\u043a\u043b",selected:s,onClick:function(){return c("power")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0414\u0430\u0432\u043b\u0435\u043d\u0438\u0435",children:[d," \u043a\u041f\u0430"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",justify:"space-between",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"65%",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:g,ranges:{blue:[-Infinity,.5],red:[.5,Infinity]},children:"\xa0"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"35%",children:[g<.5&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:"blue",ml:1,children:[u," \xb0K (",p," \xb0C)"]}),g>=.5&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:"red",ml:1,children:[u," \xb0K (",p," \xb0C)"]})]})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"65%",justify:"end",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:(f-m)/(h-m),children:"\xa0"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"35%",children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,ml:1,children:[f," \xb0K (",C," \xb0C)"]})})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0417\u0430\u0434\u0430\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",title:"\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",onClick:function(){return c("temp",{temp:m})}}),(0,o.createComponentVNode)(2,i.NumberInput,{value:Math.round(f),unit:"\xb0K",minValue:Math.round(m),maxValue:Math.round(h),step:5,stepPixelSize:3,onDrag:function(e,t){return c("temp",{temp:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",title:"\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",onClick:function(){return c("temp",{temp:h})}})]})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GenericCrewManifest=void 0;var o=n(0),r=n(2),i=n(3),a=n(144);t.GenericCrewManifest=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,theme:"nologo",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,r.Section,{noTopPadding:!0,children:(0,o.createComponentVNode)(2,a.CrewManifest)})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GhostHudPanel=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.GhostHudPanel=function(e,t){var n=(0,r.useBackend)(t).data,l=n.security,s=n.medical,d=n.diagnostic,u=n.ahud;return(0,o.createComponentVNode)(2,a.Window,{theme:"nologo",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,c,{label:"Medical",type:"medical",is_active:s}),(0,o.createComponentVNode)(2,c,{label:"Security",type:"security",is_active:l}),(0,o.createComponentVNode)(2,c,{label:"Diagnostic",type:"diagnostic",is_active:d}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,c,{label:"Antag HUD",is_active:u,act_on:"ahud_on",act_off:"ahud_off"})]})})})};var c=function(e,t){var n=(0,r.useBackend)(t).act,a=e.label,c=e.type,l=void 0===c?null:c,s=e.is_active,d=e.act_on,u=void 0===d?"hud_on":d,p=e.act_off,m=void 0===p?"hud_off":p;return(0,o.createComponentVNode)(2,i.Flex,{pt:.3,color:"label",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{pl:.5,align:"center",width:"80%",children:a}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{mr:.6,content:s?"On":"Off",icon:s?"toggle-on":"toggle-off",selected:s,onClick:function(){return n(s?m:u,{hud_type:l})}})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.HandheldChemDispenser=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=[1,5,10,20,30,50];t.HandheldChemDispenser=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s)]})})};var l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data,s=l.amount,d=l.energy,u=l.maxEnergy,p=l.mode;return(0,o.createComponentVNode)(2,i.Section,{title:"Settings",flex:"content",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Energy",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d,minValue:0,maxValue:u,ranges:{good:[.5*u,Infinity],average:[.25*u,.5*u],bad:[-Infinity,.25*u]},children:[d," / ",u," Units"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Amount",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",spacing:"1",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",width:"14%",display:"inline-block",children:(0,o.createComponentVNode)(2,i.Button,{icon:"cog",selected:s===e,content:e,m:"0",width:"100%",onClick:function(){return a("amount",{amount:e})}})},t)}))})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mode",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",justify:"space-between",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"cog",selected:"dispense"===p,content:"Dispense",m:"0",width:"32%",onClick:function(){return a("mode",{mode:"dispense"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"cog",selected:"remove"===p,content:"Remove",m:"0",width:"32%",onClick:function(){return a("mode",{mode:"remove"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"cog",selected:"isolate"===p,content:"Isolate",m:"0",width:"32%",onClick:function(){return a("mode",{mode:"isolate"})}})]})})]})})},s=function(e,t){for(var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.chemicals,s=void 0===l?[]:l,d=c.current_reagent,u=[],p=0;p<(s.length+1)%3;p++)u.push(!0);return(0,o.createComponentVNode)(2,i.Section,{title:c.glass?"Drink Selector":"Chemical Selector",flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",wrap:"wrap",height:"100%",spacingPrecise:"2",align:"flex-start",alignContent:"flex-start",children:[s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"25%",height:"20px",width:"30%",display:"inline-block",children:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-down",overflow:"hidden",textOverflow:"ellipsis",selected:d===e.id,width:"100%",height:"100%",align:"flex-start",content:e.title,onClick:function(){return a("dispense",{reagent:e.id})}})},t)})),u.map((function(e,t){return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"25%",height:"20px"},t)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ImplantPad=void 0;var o=n(0),r=n(1),i=n(2),a=n(52),c=n(3);t.ImplantPad=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.implant,u=s.contains_case,p=s.tag,m=(0,r.useLocalState)(t,"newTag",p),h=m[0],f=m[1];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Bio-chip Information",children:d&&u?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{bold:!0,mb:2,children:[(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+d.image,ml:0,mr:2,style:{"vertical-align":"middle",width:"32px"}}),d.name]}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"Life",children:d.life}),(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"Notes",children:d.notes}),(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"Function",children:d["function"]})]})],4):u?(0,o.createComponentVNode)(2,i.Box,{children:"This bio-chip case has no implant!"}):(0,o.createComponentVNode)(2,i.Box,{children:"Please insert a bio-chip casing!"})}),(0,o.createComponentVNode)(2,i.Section,{title:"Options",children:[p&&u?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,i.Input,{ml:1,width:"8rem",value:p,onEnter:function(){return l("tag",{newtag:h})},onInput:function(e,t){return f(t)}}),(0,o.createComponentVNode)(2,i.Button,{disabled:p===h,width:"20px",mb:"0",ml:"0.25rem",onClick:function(){return l("tag",{newtag:h})},children:(0,o.createComponentVNode)(2,i.Icon,{name:"pen"})})]}):null,u?(0,o.createComponentVNode)(2,i.Button,{mt:1,content:"Eject Case",icon:"eject",disabled:!u,onClick:function(){return l("eject_case")}}):null]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Instrument=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3);t.Instrument=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,c.Window,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,u)]})]})};var l=function(e,t){var n=(0,i.useBackend)(t),r=n.act;if(n.data.help)return(0,o.createComponentVNode)(2,a.Modal,{maxWidth:"75%",height:.75*window.innerHeight+"px",mx:"auto",py:"0",px:"0.5rem",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",title:"Help",level:"2",overflow:"auto",children:(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"highlight",children:"(,)"}),(0,o.createTextVNode)(", each with notes seperated by hyphens\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.Box,{as:"span",color:"good",children:"names of the note"}),(0,o.createTextVNode)(", and optionally, the\xa0"),(0,o.createComponentVNode)(2,a.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(", and/or the "),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"average",children:"natural"}),(0,o.createTextVNode)(" and in\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Box,{as:"span",color:"good",children:"C"}),(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(" or\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Box,{as:"span",color:"highlight",children:"tempo / x"}),(0,o.createTextVNode)(",\xa0"),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"highlight",children:"(,)"}),(0,o.createTextVNode)(", each with notes seperated by hyphens\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.Box,{as:"span",color:"good",children:"names of the note"}),(0,o.createTextVNode)(", and optionally, the\xa0"),(0,o.createComponentVNode)(2,a.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(", and/or the "),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"average",children:"natural"}),(0,o.createTextVNode)(" and in\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Box,{as:"span",color:"good",children:"C"}),(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(" or\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Box,{as:"span",color:"highlight",children:"tempo / x"}),(0,o.createTextVNode)(",\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.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,a.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,a.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,a.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,a.Button,{color:"grey",content:"Close",onClick:function(){return r("help")}})]})})})},s=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data,s=l.lines,u=l.playing,p=l.repeat,m=l.maxRepeats,h=l.tempo,f=l.minTempo,C=l.maxTempo,g=l.tickLag,N=l.volume,b=l.minVolume,V=l.maxVolume,v=l.ready;return(0,o.createComponentVNode)(2,a.Section,{title:"Instrument",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"info",content:"Help",onClick:function(){return c("help")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"file",content:"New",onClick:function(){return c("newsong")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"upload",content:"Import",onClick:function(){return c("import")}})],4),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Playback",children:[(0,o.createComponentVNode)(2,a.Button,{selected:u,disabled:0===s.length||p<0,icon:"play",content:"Play",onClick:function(){return c("play")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u,icon:"stop",content:"Stop",onClick:function(){return c("stop")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Repeat",children:(0,o.createComponentVNode)(2,a.Slider,{animated:!0,minValue:"0",maxValue:m,value:p,stepPixelSize:"59",onChange:function(e,t){return c("repeat",{"new":t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tempo",children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{disabled:h>=C,content:"-",as:"span",mr:"0.5rem",onClick:function(){return c("tempo",{"new":h+g})}}),(0,r.round)(600/h)," BPM",(0,o.createComponentVNode)(2,a.Button,{disabled:h<=f,content:"+",as:"span",ml:"0.5rem",onClick:function(){return c("tempo",{"new":h-g})}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Volume",children:(0,o.createComponentVNode)(2,a.Slider,{animated:!0,minValue:b,maxValue:V,value:N,stepPixelSize:"6",onDrag:function(e,t){return c("setvolume",{"new":t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:v?(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Ready"}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Instrument Definition Error!"})})]}),(0,o.createComponentVNode)(2,d)]})},d=function(e,t){var n,c,l=(0,i.useBackend)(t),s=l.act,d=l.data,u=d.allowedInstrumentNames,p=d.instrumentLoaded,m=d.instrument,h=d.canNoteShift,f=d.noteShift,C=d.noteShiftMin,g=d.noteShiftMax,N=d.sustainMode,b=d.sustainLinearDuration,V=d.sustainExponentialDropoff,v=d.legacy,x=d.sustainDropoffVolume,y=d.sustainHeldNote;return 1===N?(n="Linear",c=(0,o.createComponentVNode)(2,a.Slider,{minValue:"0.1",maxValue:"5",value:b,step:"0.5",stepPixelSize:"85",format:function(e){return(0,r.round)(100*e)/100+" seconds"},onChange:function(e,t){return s("setlinearfalloff",{"new":t/10})}})):2===N&&(n="Exponential",c=(0,o.createComponentVNode)(2,a.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 s("setexpfalloff",{"new":t})}})),u.sort(),(0,o.createComponentVNode)(2,a.Box,{my:-1,children:(0,o.createComponentVNode)(2,a.Collapsible,{mt:"1rem",mb:"0",title:"Advanced",children:(0,o.createComponentVNode)(2,a.Section,{mt:-1,children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Type",children:v?"Legacy":"Synthesized"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current",children:p?(0,o.createComponentVNode)(2,a.Dropdown,{options:u,selected:m,width:"40%",onSelected:function(e){return s("switchinstrument",{name:e})}}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"None!"})}),!(v||!h)&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Note Shift/Note Transpose",children:(0,o.createComponentVNode)(2,a.Slider,{minValue:C,maxValue:g,value:f,stepPixelSize:"2",format:function(e){return e+" keys / "+(0,r.round)(e/12*100)/100+" octaves"},onChange:function(e,t){return s("setnoteshift",{"new":t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sustain Mode",children:[(0,o.createComponentVNode)(2,a.Dropdown,{options:["Linear","Exponential"],selected:n,onSelected:function(e){return s("setsustainmode",{"new":e})}}),c]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Volume Dropoff Threshold",children:(0,o.createComponentVNode)(2,a.Slider,{animated:!0,minValue:"0.01",maxValue:"100",value:x,stepPixelSize:"6",onChange:function(e,t){return s("setdropoffvolume",{"new":t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sustain indefinitely last held note",children:(0,o.createComponentVNode)(2,a.Button,{selected:y,icon:y?"toggle-on":"toggle-off",content:y?"Yes":"No",onClick:function(){return s("togglesustainhold")}})})],4)]}),(0,o.createComponentVNode)(2,a.Button,{icon:"redo",content:"Reset to Default",mt:"0.5rem",onClick:function(){return s("reset")}})]})})})},u=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.playing,s=c.lines,d=c.editing;return(0,o.createComponentVNode)(2,a.Section,{title:"Editor",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:!d||l,icon:"plus",content:"Add Line",onClick:function(){return r("newline",{line:s.length+1})}}),(0,o.createComponentVNode)(2,a.Button,{selected:!d,icon:d?"chevron-up":"chevron-down",onClick:function(){return r("edit")}})],4),children:!!d&&(s.length>0?(0,o.createComponentVNode)(2,a.LabeledList,{children:s.map((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t+1,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:l,icon:"pen",onClick:function(){return r("modifyline",{line:t+1})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:l,icon:"trash",onClick:function(){return r("deleteline",{line:t+1})}})],4),children:e},t)}))}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Song is empty."}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.ItemPixelShift=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ItemPixelShift=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.pixel_x,d=l.pixel_y,u=l.max_shift_x,p=l.max_shift_y,m=l.random_drop_on;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"X-coordinates",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-left",title:"Shifts item leftwards.",disabled:s===-u,onClick:function(){return c("shift_left")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,lineHeight:1.7,width:"75px",unit:"pixels",stepPixelSize:6,value:s,minValue:-u,maxValue:u,onChange:function(e,t){return c("custom_x",{pixel_x:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-right",title:"Shifts item rightwards.",disabled:s===u,onClick:function(){return c("shift_right")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Y-coordinates",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-up",title:"Shifts item upwards.",disabled:d===p,onClick:function(){return c("shift_up")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,lineHeight:1.7,width:"75px",unit:"pixels",stepPixelSize:6,value:d,minValue:-p,maxValue:p,onChange:function(e,t){return c("custom_y",{pixel_y:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",title:"Shifts item downwards.",disabled:d===-p,onClick:function(){return c("shift_down")}})]})]})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,color:"brown",icon:"arrow-up",content:"Move to Top",title:"Tries to place an item on top of the others.",onClick:function(){return c("move_to_top")}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,color:m?"good":"bad",icon:"power-off",content:m?"Shift Enabled":"Shift Disabled",title:"Enables/Disables item pixel randomization on any drops.",onClick:function(){return c("toggle")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.KeycardAuth=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.KeycardAuth=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=(0,o.createComponentVNode)(2,i.Section,{title:"Keycard Authentication Device",children:(0,o.createComponentVNode)(2,i.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 d=(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Waiting for YOU to swipe your ID..."});return l.hasSwiped||l.ertreason||"Emergency Response Team"!==l.event?l.hasConfirm?d=(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Request Confirmed!"}):l.isRemote?d=(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"Swipe your card to CONFIRM the remote request."}):l.hasSwiped&&(d=(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"Waiting for second person to confirm..."})):d=(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Fill out the reason for your ERT request."}),(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[s,"Emergency Response Team"===l.event&&(0,o.createComponentVNode)(2,i.Section,{title:"Reason for ERT Call",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{color:l.ertreason?"":"red",icon:l.ertreason?"check":"pencil-alt",content:l.ertreason?l.ertreason:"-----",disabled:l.busy,onClick:function(){return c("ert")}})})}),(0,o.createComponentVNode)(2,i.Section,{title:l.event,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-left",content:"Back",disabled:l.busy||l.hasConfirm,onClick:function(){return c("reset")}}),children:d})]})})}return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[s,(0,o.createComponentVNode)(2,i.Section,{title:"Choose Action",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Red Alert",children:(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation-triangle",disabled:!l.redAvailable,onClick:function(){return c("triggerevent",{triggerevent:"Red Alert"})},content:"Red Alert"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ERT",children:(0,o.createComponentVNode)(2,i.Button,{icon:"broadcast-tower",onClick:function(){return c("triggerevent",{triggerevent:"Emergency Response Team"})},content:"Call ERT"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Emergency Maint Access",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"door-open",onClick:function(){return c("triggerevent",{triggerevent:"Grant Emergency Maintenance Access"})},content:"Grant"}),(0,o.createComponentVNode)(2,i.Button,{icon:"door-closed",onClick:function(){return c("triggerevent",{triggerevent:"Revoke Emergency Maintenance Access"})},content:"Revoke"})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Emergency Station-Wide Access",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"door-open",onClick:function(){return c("triggerevent",{triggerevent:"Activate Station-Wide Emergency Access"})},content:"Grant"}),(0,o.createComponentVNode)(2,i.Button,{icon:"door-closed",onClick:function(){return c("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(18),i=n(1),a=n(2),c=n(3);t.LaborClaimConsole=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s)]})})};var l=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.can_go_home,s=c.emagged,d=c.id_inserted,u=c.id_name,p=c.id_points,m=c.id_goal,h=c.unclaimed_points,f=s?0:1,C=s?"ERR0R":l?"Completed!":"Insufficient";return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:!!d&&(0,o.createComponentVNode)(2,a.ProgressBar,{value:p/m,ranges:{good:[f,Infinity],bad:[-Infinity,f]},children:p+" / "+m+" "+C})||!!s&&"ERR0R COMPLETED?!@"||"No ID inserted"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle controls",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"Move shuttle",disabled:!l,onClick:function(){return r("move_shuttle")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unclaimed points",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"Claim points ("+h+")",disabled:!d||!h,onClick:function(){return r("claim_points")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inserted ID",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:d?u:"-------------",onClick:function(){return r("handle_id")}})})]})})},s=function(e,t){var n=(0,i.useBackend)(t).data.ores;return(0,o.createComponentVNode)(2,a.Section,{title:"Material values",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:"Material"}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"right",children:"Value"})]}),n.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,r.toTitleCase)(e.ore)}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,a.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),i=n(2),a=n(3);t.LawManager=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data,u=d.isAdmin,p=d.isSlaved,m=d.isMalf,h=d.isAIMalf,f=d.view;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!(!u||!p)&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:["This unit is slaved to ",p,"."]}),!(!m&&!h)&&(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Law Management",selected:0===f,onClick:function(){return s("set_view",{set_view:0})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Lawsets",selected:1===f,onClick:function(){return s("set_view",{set_view:1})}})]}),!(0!==f)&&(0,o.createComponentVNode)(2,c),!(1!==f)&&(0,o.createComponentVNode)(2,l)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.has_zeroth_laws,d=c.zeroth_laws,u=c.has_ion_laws,p=c.ion_laws,m=c.ion_law_nr,h=c.has_inherent_laws,f=c.inherent_laws,C=c.has_supplied_laws,g=c.supplied_laws,N=c.channels,b=c.channel,V=c.isMalf,v=c.isAdmin,x=c.zeroth_law,y=c.ion_law,k=c.inherent_law,w=c.supplied_law,_=c.supplied_law_position;return(0,o.createFragment)([!!l&&(0,o.createComponentVNode)(2,s,{title:"ERR_NULL_VALUE",laws:d,ctx:t}),!!u&&(0,o.createComponentVNode)(2,s,{title:m,laws:p,ctx:t}),!!h&&(0,o.createComponentVNode)(2,s,{title:"Inherent",laws:f,ctx:t}),!!C&&(0,o.createComponentVNode)(2,s,{title:"Supplied",laws:g,ctx:t}),(0,o.createComponentVNode)(2,i.Section,{title:"Statement Settings",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Statement Channel",children:N.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.channel,selected:e.channel===b,onClick:function(){return a("law_channel",{law_channel:e.channel})}},e.channel)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"State Laws",children:(0,o.createComponentVNode)(2,i.Button,{content:"State Laws",onClick:function(){return a("state_laws")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Law Notification",children:(0,o.createComponentVNode)(2,i.Button,{content:"Notify",onClick:function(){return a("notify_laws")}})})]})}),!!V&&(0,o.createComponentVNode)(2,i.Section,{title:"Add Laws",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{width:"10%",children:"Type"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"60%",children:"Law"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"10%",children:"Index"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"20%",children:"Actions"})]}),!(!v||l)&&(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Zero"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:x}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("change_zeroth_law")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Add",icon:"plus",onClick:function(){return a("add_zeroth_law")}})]})]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Ion"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:y}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("change_ion_law")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Add",icon:"plus",onClick:function(){return a("add_ion_law")}})]})]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Inherent"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:k}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("change_inherent_law")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Add",icon:"plus",onClick:function(){return a("add_inherent_law")}})]})]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Supplied"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:w}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:_,onClick:function(){return a("change_supplied_law_position")}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("change_supplied_law")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Add",icon:"plus",onClick:function(){return a("add_supplied_law")}})]})]})]})})],0)},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.law_sets;return(0,o.createComponentVNode)(2,i.Box,{children:c.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name+" - "+e.header,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Load Laws",icon:"download",onClick:function(){return a("transfer_laws",{transfer_laws:e.ref})}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[e.laws.has_ion_laws>0&&e.laws.ion_laws.map((function(e){return(0,o.createComponentVNode)(2,i.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,i.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,i.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,i.LabeledList.Item,{label:e.index,children:e.law},e.index)}))]})},e.name)}))})},s=function(e,t){var n=(0,r.useBackend)(e.ctx),a=n.act,c=n.data.isMalf;return(0,o.createComponentVNode)(2,i.Section,{title:e.title+" Laws",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{width:"10%",children:"Index"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"69%",children:"Law"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"21%",children:"State?"})]}),e.laws.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.index}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.law}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:e.state?"Yes":"No",selected:e.state,onClick:function(){return a("state_law",{ref:e.ref,state_law:e.state?0:1})}}),!!c&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("edit_law",{edit_law:e.ref})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Delete",icon:"trash",color:"red",onClick:function(){return a("delete_law",{delete_law:e.ref})}})],4)]})]},e.law)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ListInput=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3),l=n(99),s=0;t.ListInput=function(e,t){var n=(0,i.useBackend)(t),r=n.act,u=n.data,p=u.title,m=u.message,h=u.items,f=u.init_value,C=u.timeout,g=(0,i.useLocalState)(t,"search_bar",!0),N=g[0],b=g[1],V=(0,i.useLocalState)(t,"displayed_array",h),v=V[0],x=V[1],y=(0,i.useLocalState)(t,"search_array",[]),k=y[0],w=y[1],_=(0,i.useLocalState)(t,"search_index",0),B=_[0],S=_[1],L=(0,i.useLocalState)(t,"last_char_code",null),A=L[0],I=L[1],E=(0,i.useLocalState)(t,"selected_button",f),D=E[0],T=E[1];return(0,o.createComponentVNode)(2,c.Window,{title:p,resizable:!0,children:[C!==undefined&&(0,o.createComponentVNode)(2,d,{value:C}),(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{className:"Layout__content--flexColumn",height:"100%",mb:"7px",children:(0,o.createComponentVNode)(2,a.Section,{className:"ListInput__Section",flexGrow:"1",scrollable:!0,fill:!0,title:m,tabIndex:1,onKeyDown:function(e){if(e.preventDefault(),!(s>performance.now())){if(s=performance.now()+125,e.keyCode===l.ARROW_KEY_UP||e.keyCode===l.ARROW_KEY_DOWN){var t=1;e.keyCode===l.ARROW_KEY_UP&&(t=-1);for(var n=0;n=h.length&&(n=0),T(h[n]),I(null),void document.getElementById(h[n]).focus()}var o=String.fromCharCode(e.keyCode).toLowerCase();if(o){var r;if(o===A&&k.length>0){var i=B+1;i0&&(w(a),S(0),r=a[0])}r&&(I(o),T(r),document.getElementById(r).focus())}}},buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"search",color:"transparent",selected:N,tooltip:"Search...",tooltipPosition:"left",onClick:function(){b(!N),x(h)},compact:!0}),children:(0,o.createComponentVNode)(2,a.Flex,{wrap:"wrap",overflowX:"hidden",children:v.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"100%",children:(0,o.createComponentVNode)(2,a.Button,{color:"transparent",content:e,id:e,width:"100%",selected:D===e,onClick:function(){D===e?r("choose",{choice:e}):T(e),I(null)}})},e)}))})})}),N&&(0,o.createComponentVNode)(2,a.Flex.Item,{basis:2.5,children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",autoFocus:!0,onInput:function(e,t){return x(h.filter((function(e){return-1!==e.toLowerCase().search(t.toLowerCase())})))}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Flex,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,basis:0,ml:1,mx:"5px",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,color:"good",content:"Confirm",disabled:null===D,onClick:function(){return r("choose",{choice:D})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,basis:0,mr:1,mx:"5px",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,color:"bad",content:"Cancel",onClick:function(){return r("cancel")}})})]})})]})})]})};var d=function(e){var t=e.value;return(0,o.createVNode)(1,"div","ListInput__Loader",(0,o.createComponentVNode)(2,a.Box,{className:"ListInput__LoaderProgress",style:{width:100*(0,r.clamp01)(t)+"%"}}),2)}},function(e,t,n){"use strict";t.__esModule=!0,t.MechBayConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.MechBayConsole=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.recharge_port,s=l&&l.mech,d=s&&s.cell,u=s&&s.name;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:u?"Mech status: "+u:"Mech status",textAlign:"center",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Sync",onClick:function(){return c("reconnect")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Integrity",children:!l&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No power port detected. Please re-sync."})||!s&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No mech detected."})||(0,o.createComponentVNode)(2,i.ProgressBar,{value:s.health/s.maxhealth,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:!l&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No power port detected. Please re-sync."})||!s&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No mech detected."})||!d&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No cell is installed."})||(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.charge/d.maxcharge,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]},children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:d.charge})," / "+d.maxcharge]})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MechaControlConsole=void 0;var o=n(0),r=(n(15),n(1)),i=n(2),a=n(3),c=n(18);t.MechaControlConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.beacons,u=s.stored_data;return u.length?(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Log",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"window-close",onClick:function(){return l("clear_log")}}),children:u.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{color:"label",children:["(",e.time,")"]}),(0,o.createComponentVNode)(2,i.Box,{children:(0,c.decodeHtmlEntities)(e.message)})]},e.time)}))})})}):(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:d.length&&d.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"comment",onClick:function(){return l("send_message",{mt:e.uid})},children:"Message"}),(0,o.createComponentVNode)(2,i.Button,{icon:"eye",onClick:function(){return l("get_log",{mt:e.uid})},children:"View Log"}),(0,o.createComponentVNode)(2,i.Button.Confirm,{color:"red",content:"EMP",icon:"bomb",onClick:function(){return l("shock",{mt:e.uid})}})],4),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.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,i.LabeledList.Item,{label:"Cell Charge",children:e.cell&&(0,o.createComponentVNode)(2,i.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,i.NoticeBox,{children:"No Cell Installed"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Air Tank",children:[e.airtank,"kPa"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pilot",children:e.pilot||"Unoccupied"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:(0,c.toTitleCase)(e.location)||"Unknown"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Active Equipment",children:e.active||"None"}),e.cargoMax&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cargo Space",children:(0,o.createComponentVNode)(2,i.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,i.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),i=n(2),a=n(44),c=n(3),l=n(100),s=n(101),d=n(145),u={Minor:"good",Medium:"average","Dangerous!":"bad",Harmful:"bad","BIOHAZARD THREAT!":"bad"},p=function(e,t){(0,a.modalOpen)(e,"edit",{field:t.edit,value:t.value})};t.MedicalRecords=function(e,t){var n,u=(0,r.useBackend)(t).data,p=u.loginState,C=u.screen;return p.logged_in?(2===C?n=(0,o.createComponentVNode)(2,m):3===C?n=(0,o.createComponentVNode)(2,h):4===C?n=(0,o.createComponentVNode)(2,f):5===C?n=(0,o.createComponentVNode)(2,N):6===C&&(n=(0,o.createComponentVNode)(2,b)),(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,a.ComplexModal),(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l.LoginInfo),(0,o.createComponentVNode)(2,d.TemporaryNotice),(0,o.createComponentVNode)(2,V),(0,o.createComponentVNode)(2,i.Section,{height:"100%",flexGrow:"1",children:n})]})]})):(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,s.LoginScreen)})})};var m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.records;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Input,{fluid:!0,placeholder:"Search by Name, DNA, or ID",onChange:function(e,t){return a("search",{t1:t})}}),(0,o.createComponentVNode)(2,i.Box,{mt:"0.5rem",children:c.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"user",mb:"0.5rem",content:e.id+": "+e.name,onClick:function(){return a("d_rec",{d_rec:e.ref})}}),(0,o.createVNode)(1,"br")],4,t)}))})],4)},h=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"download",content:"Backup to Disk",disabled:!0}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button,{icon:"upload",content:"Upload from Disk",my:"0.5rem",disabled:!0}),(0,o.createTextVNode)(" "),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash",content:"Delete All Medical Records",onClick:function(){return n("del_all")}})],4)},f=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.medical,s=c.printing;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"General Data",level:2,mt:"-6px",children:(0,o.createComponentVNode)(2,C)}),(0,o.createComponentVNode)(2,i.Section,{title:"Medical Data",level:2,children:(0,o.createComponentVNode)(2,g)}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",level:2,children:[(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash",disabled:!!l.empty,content:"Delete Medical Record",color:"bad",onClick:function(){return a("del_r")}}),(0,o.createComponentVNode)(2,i.Button,{icon:s?"spinner":"print",disabled:s,iconSpin:!!s,content:"Print Entry",ml:"0.5rem",onClick:function(){return a("print_p")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-left",content:"Back",mt:"0.5rem",onClick:function(){return a("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,i.Box,{width:"50%",float:"left",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:n.fields.map((function(e,n){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.field,children:[(0,o.createComponentVNode)(2,i.Box,{height:"20px",display:"inline-block",children:e.value}),!!e.edit&&(0,o.createComponentVNode)(2,i.Button,{icon:"pen",ml:"0.5rem",onClick:function(){return p(t,e)}})]},n)}))})}),(0,o.createComponentVNode)(2,i.Box,{width:"50%",float:"right",textAlign:"right",children:!!n.has_photos&&n.photos.map((function(e,t){return(0,o.createComponentVNode)(2,i.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,i.Box,{color:"bad",children:"General records lost!"})},g=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.medical;return l&&l.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList,{children:l.fields.map((function(e,n){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.field,prewrap:!0,children:[e.value,(0,o.createComponentVNode)(2,i.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return p(t,e)}})]},n)}))}),(0,o.createComponentVNode)(2,i.Section,{title:"Comments/Log",level:2,children:[0===l.comments.length?(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"No comments found."}):l.comments.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{prewrap:!0,children:[(0,o.createComponentVNode)(2,i.Box,{color:"label",display:"inline",children:e.header}),(0,o.createVNode)(1,"br"),e.text,(0,o.createComponentVNode)(2,i.Button,{icon:"comment-slash",color:"bad",ml:"0.5rem",onClick:function(){return c("del_c",{del_c:t+1})}})]},t)})),(0,o.createComponentVNode)(2,i.Button,{icon:"comment-medical",content:"Add Entry",color:"good",mt:"0.5rem",mb:"0",onClick:function(){return(0,a.modalOpen)(t,"add_c")}})]})],4):(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:["Medical records lost!",(0,o.createComponentVNode)(2,i.Button,{icon:"pen",content:"New Record",ml:"0.5rem",onClick:function(){return c("new")}})]})},N=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.virus;return c.sort((function(e,t){return e.name>t.name?1:-1})),c.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"flask",content:e.name,mb:"0.5rem",onClick:function(){return a("vir",{vir:e.D})}}),(0,o.createVNode)(1,"br")],4,t)}))},b=function(e,t){var n=(0,r.useBackend)(t).data.medbots;return 0===n.length?(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"There are no Medbots."}):n.map((function(e,t){return(0,o.createComponentVNode)(2,i.Collapsible,{open:!0,title:e.name,children:(0,o.createComponentVNode)(2,i.Box,{px:"0.5rem",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:[e.area||"Unknown"," (",e.x,", ",e.y,")"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:e.on?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{color:"good",children:"Online"}),(0,o.createComponentVNode)(2,i.Box,{mt:"0.5rem",children:e.use_beaker?"Reservoir: "+e.total_volume+"/"+e.maximum_volume:"Using internal synthesizer."})],4):(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"Offline"})})]})})},t)}))},V=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.screen;return(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===c,onClick:function(){return a("screen",{screen:2})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"list"}),"List Records"]}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:5===c,onClick:function(){return a("screen",{screen:5})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"database"}),"Virus Database"]}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:6===c,onClick:function(){return a("screen",{screen:6})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"plus-square"}),"Medbot Tracking"]}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:3===c,onClick:function(){return a("screen",{screen:3})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"wrench"}),"Record Maintenance"]})]})};(0,a.modalRegisterBodyOverride)("virus",(function(e,t){var n=e.args;return(0,o.createComponentVNode)(2,i.Section,{level:2,m:"-1rem",pb:"1rem",title:n.name||"Virus",children:(0,o.createComponentVNode)(2,i.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Number of stages",children:n.max_stages}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Spread",children:[n.spread_text," Transmission"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Possible cure",children:n.cure}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Notes",children:n.desc}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Severity",color:u[n.severity],children:n.severity})]})})})}))},function(e,t,n){"use strict";t.__esModule=!0,t.MiniGamesMenu=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.MiniGamesMenu=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.spawners||[],d=l.thunderdome_eligible,u=l.notifications_enabled;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"power-off",tooltip:d?"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445",tooltipPosition:"bottom",content:d?"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445",color:d?"good":"bad",onClick:function(){return c("toggle_minigames")}}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"power-off",tooltip:u?"\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445",tooltipPosition:"bottom",content:u?"\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445",color:u?"good":"bad",onClick:function(){return c("toggle_notifications")}}),(0,o.createComponentVNode)(2,i.Section,{children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{mb:.5,title:e.name,level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-circle-right",content:"Jump",onClick:function(){return c("jump",{ID:e.uids})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-circle-right",content:"Start",onClick:function(){return c("spawn",{ID:e.uids})}})],4),children:[(0,o.createComponentVNode)(2,i.Box,{style:{"white-space":"pre-wrap"},mb:1,fontSize:"16px",children:e.desc}),!!e.fluff&&(0,o.createComponentVNode)(2,i.Box,{style:{"white-space":"pre-wrap"},textColor:"#878787",fontSize:"14px",children:e.fluff}),!!e.important_info&&(0,o.createComponentVNode)(2,i.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.MiningVendor=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(3);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,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,d)]})})};var s=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.has_id,s=c.id;return(0,o.createComponentVNode)(2,a.NoticeBox,{success:l,children:l?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",style:{float:"left"},children:["Logged in as ",s.name,".",(0,o.createVNode)(1,"br"),"You have ",s.points.toLocaleString("en-US")," points."]}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject ID",style:{float:"right"},onClick:function(){return r("logoff")}}),(0,o.createComponentVNode)(2,a.Box,{style:{clear:"both"}})],4):"Please insert an ID in order to make purchases."})},d=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data),s=c.has_id,d=c.id,u=c.items,m=(0,i.useLocalState)(t,"search",""),h=m[0],f=(m[1],(0,i.useLocalState)(t,"sort","Alphabetical")),C=f[0],g=(f[1],(0,i.useLocalState)(t,"descending",!1)),N=g[0],b=(g[1],(0,r.createSearch)(h,(function(e){return e[0]}))),V=!1,v=Object.entries(u).map((function(e,t){var n=Object.entries(e[1]).filter(b).map((function(e){return e[1].affordable=s&&d.points>=e[1].price,e[1]})).sort(l[C]);if(0!==n.length)return N&&(n=n.reverse()),V=!0,(0,o.createComponentVNode)(2,p,{title:e[0],items:n},e[0])}));return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"auto",children:(0,o.createComponentVNode)(2,a.Section,{children:V?v:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No items matching your criteria was found!"})})})},u=function(e,t){var n=(0,i.useLocalState)(t,"search",""),r=(n[0],n[1]),c=(0,i.useLocalState)(t,"sort",""),s=(c[0],c[1]),d=(0,i.useLocalState)(t,"descending",!1),u=d[0],p=d[1];return(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",mr:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search by item name..",width:"100%",onInput:function(e,t){return r(t)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"30%",children:(0,o.createComponentVNode)(2,a.Dropdown,{selected:"Alphabetical",options:Object.keys(l),width:"100%",lineHeight:"19px",onSelected:function(e){return s(e)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:u?"arrow-down":"arrow-up",height:"19px",tooltip:u?"Descending order":"Ascending order",tooltipPosition:"bottom-left",ml:"0.5rem",onClick:function(){return p(!u)}})})]})})},p=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=e.title,s=e.items,d=function(e,t){if(null==e)return{};var n,o,r={},i=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,a.Collapsible,Object.assign({open:!0,title:l},d,{children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",lineHeight:"20px",style:{float:"left"},children:e.name}),(0,o.createComponentVNode)(2,a.Button,{disabled:!c.has_id||c.id.points=0||(r[n]=e[n]);return r}t.Multitool=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data,p=l.multitoolMenuId,v=l.buffer,x=l.bufferName,y=l.bufferTag,k=l.canBufferHaveTag,w=l.isAttachedAlreadyInBuffer,_=l.attachedName,B=!("default_no_machine"===p);return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{style:{"overflow-x":"hidden","overflow-y":"auto"},grow:1,shrink:1,basis:0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Configuration menu",py:.3,children:[(0,o.createComponentVNode)(2,s,{iconName:"tools",machineName:_,noMachine:"default_no_machine"===p,noMachineText:"No machine attached"}),function(e){switch(e){case"default_no_machine":case"no_options":return(0,o.createComponentVNode)(2,h);case"access_denied":return(0,o.createComponentVNode)(2,f);case"tag_only":return(0,o.createComponentVNode)(2,C);case"frequency_and_tag":return(0,o.createFragment)([(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,C)],4);case"air_sensor":return(0,o.createFragment)([(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,C),(0,o.createComponentVNode)(2,N)],4);case"general_air_control":return(0,o.createFragment)([(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,b)],4);case"large_tank_control":return(0,o.createFragment)([(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,V),(0,o.createComponentVNode)(2,b)],4);default:return"WE SHOULDN'T BE HERE!"}}(p)]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:(0,o.createComponentVNode)(2,a.Divider)}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Multitool buffer",mb:.9,py:.3,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:w?"Added":"Add machine",icon:"save",disabled:!B||w,onClick:function(){return r("buffer_add")}}),(0,o.createComponentVNode)(2,a.Button,{mr:1,content:"Flush",icon:"times-circle",color:"red",disabled:!v,onClick:function(){return r("buffer_flush")}})],4),children:[(0,o.createComponentVNode)(2,s,{iconName:"tools",machineName:x,noMachine:!v,noMachineElem:(0,o.createComponentVNode)(2,d,{text:""})}),!!v&&(0,o.createComponentVNode)(2,m,{mt:1.1,label:"ID tag",compactLabel:!0,wrapContent:k?(0,o.createComponentVNode)(2,u,{text:y,defaultText:"",color:"silver"}):(0,o.createComponentVNode)(2,a.Box,{as:"span",fontSize:"0.9rem",color:"red",italic:!0,nowrap:!0,children:"Not supported"})})]})})]})})})};var s=function(e,t){var n=e.iconName,r=e.machineName,i=e.noMachine,c=e.noMachineText,l=e.noMachineElem,s=i?c:r||"Unknown machine",d=s===c,u=s===c||"Unknown machine"===s;return i&&l?l:(0,o.createComponentVNode)(2,a.Flex,{mt:.1,mb:1.9,children:[!i&&(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,align:"center",children:(0,o.createComponentVNode)(2,a.Icon,{mr:1,size:1.1,name:n})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,wordWrap:"break-word",children:(0,o.createComponentVNode)(2,a.Box,{as:"span",wordWrap:"break-word",color:d?"label":"silver",fontSize:"1.1rem",bold:!0,italic:u,children:s})})]})},d=function(e,t){var n=e.text;return(0,o.createComponentVNode)(2,a.Box,{as:"span",fontSize:"0.9rem",color:"yellow",italic:!0,nowrap:!0,children:n})},u=function(e,t){var n=e.text,r=e.defaultText,i=l(e,["text","defaultText"]);return n?(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"span",wordWrap:"break-word"},i,{children:n}))):(0,o.createComponentVNode)(2,d,{text:r})},p=function(e,t){var n=e.noConfirm,r=void 0!==n&&n,i=l(e,["noConfirm"]);return r?(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({},i))):(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button.Confirm,Object.assign({},i)))},m=function(e,t){var n=e.label,r=e.wrapContent,i=e.noWrapContent,c=e.compactLabel,s=void 0!==c&&c,d=l(e,["label","wrapContent","noWrapContent","compactLabel"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Flex,Object.assign({my:.5,mr:"0.5%",spacing:1,align:"center"},d,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:s?0:1,shrink:0,textOverflow:"ellipsis",overflow:"hidden",basis:s?"auto":0,maxWidth:s?"none":20,color:"label",nowrap:!0,children:n}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,textAlign:"center",wordWrap:"break-word",children:r}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:.1}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,nowrap:!0,children:i})]})))},h=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.Box,{mt:1.5,fontSize:"0.9rem",color:"silver",italic:!0,children:"No options"})},f=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.Box,{fontSize:"1.1rem",color:"red",bold:!0,italic:!0,children:"ACCESS DENIED"})},C=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data.attachedTag;return(0,o.createComponentVNode)(2,m,{label:"ID tag",wrapContent:(0,o.createComponentVNode)(2,u,{text:c,defaultText:"",color:"silver"}),noWrapContent:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Set",icon:"wrench",onClick:function(){return r("set_tag")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Clear",icon:"times-circle",color:"red",disabled:!c,onClick:function(){return r("clear_tag")}})],4)})},g=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data,s=l.frequency,d=l.minFrequency,u=l.maxFrequency,p=l.canReset;return(0,o.createComponentVNode)(2,m,{label:"Frequency",noWrapContent:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,unit:"kHz",step:.1,stepPixelSize:10,minValue:d/10,maxValue:u/10,value:s/10,format:function(e){return(0,r.toFixed)(e,1)},onChange:function(e,t){return c("set_frequency",{frequency:10*t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"",disabled:!p,tooltip:"Reset",onClick:function(){return c("reset_frequency")}})],4)})},N=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.bolts,s=[{bitflag:1,checked:c.pressureCheck,label:"Monitor pressure"},{bitflag:2,checked:c.temperatureCheck,label:"Monitor temperature"},{bitflag:4,checked:c.oxygenCheck,label:"Monitor oxygen concentration"},{bitflag:8,checked:c.toxinsCheck,label:"Monitor plasma concentration"},{bitflag:16,checked:c.nitrogenCheck,label:"Monitor nitrogen concentration"},{bitflag:32,checked:c.carbonDioxideCheck,label:"Monitor carbon dioxide concentration"}];return(0,o.createFragment)([(0,o.createComponentVNode)(2,m,{label:"Floor bolts",noWrapContent:(0,o.createComponentVNode)(2,a.Button,{icon:l?"check":"times",selected:l,content:l?"YES":"NO",onClick:function(){return r("toggle_bolts")}})}),s.map((function(e){return(0,o.createComponentVNode)(2,m,{label:e.label,noWrapContent:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e.checked,onClick:function(){return r("toggle_flag",{bitflag:e.bitflag})}})},e.bitflag)}))],0)},b=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data.sensors;return(0,o.createComponentVNode)(2,a.Section,{mt:1.7,ml:.5,mr:1,px:.5,title:"Sensors",buttons:(0,o.createComponentVNode)(2,a.Button,{mr:1,pl:2.1,content:"Add sensor",icon:"plus",iconRight:!0,onClick:function(){return r("add_sensor")}}),children:[(0,o.createComponentVNode)(2,m,{mr:0,compactLabel:!0,wrapContent:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:1}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,color:"label",nowrap:!0,bold:!0,children:"ID tag"}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,color:"label",nowrap:!0,bold:!0,children:"Label"}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:11.3})]})}),Object.keys(c).map((function(e){return(0,o.createComponentVNode)(2,m,{mr:0,label:(0,o.createComponentVNode)(2,a.Icon,{name:"wave-square"}),compactLabel:!0,wrapContent:(0,o.createComponentVNode)(2,a.Flex,{align:"center",spacing:1,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,color:"silver",wordWrap:"break-word",children:e}),c[e]?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,color:"silver",wordWrap:"break-word",children:c[e]}):(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,fontSize:"0.9rem",color:"yellow",italic:!0,nowrap:!0,children:""})]}),noWrapContent:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:[(0,o.createComponentVNode)(2,a.Button,{content:"Label",icon:"edit",onClick:function(){return r("change_label",{sensor_tag:e})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Label",icon:"times-circle",color:"orange",disabled:!c[e],onClick:function(){return r("clear_label",{sensor_tag:e})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:.5}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:(0,o.createComponentVNode)(2,a.Button,{px:1.2,icon:"minus",color:"red",onClick:function(){return r("del_sensor",{sensor_tag:e})}})})]})},e)}))]})},V=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.inputTag,s=c.outputTag,d=c.bufferTag,h=c.bufferFitsInput,f=c.bufferFitsOutput,C=c.doNotLinkAndNotify;return(0,o.createFragment)([(0,o.createComponentVNode)(2,m,{label:"Input",labelWidth:6,wrapContent:(0,o.createComponentVNode)(2,u,{text:l,defaultText:"",color:"silver"}),noWrapContent:(0,o.createFragment)([(0,o.createComponentVNode)(2,p,{noConfirm:C||!l,confirmContent:"This will change the intput device. Confirm?",confirmColor:"orange",content:"Link buffer",icon:"link",selected:l&&d===l,disabled:!h,onClick:function(){return r("link_input")}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{confirmContent:"This will unlink the intput device. Confirm?",confirmColor:"orange",content:"Unlink",icon:"unlink",color:"red",disabled:!l,onClick:function(){return r("unlink_input")}})],4)}),(0,o.createComponentVNode)(2,m,{label:"Output",labelWidth:6,wrapContent:(0,o.createComponentVNode)(2,u,{text:s,defaultText:"",color:"silver"}),noWrapContent:(0,o.createFragment)([(0,o.createComponentVNode)(2,p,{noConfirm:C||!s,confirmContent:"This will change the output device. Confirm?",confirmColor:"orange",content:"Link buffer",icon:"link",selected:s&&d===s,disabled:!f,onClick:function(){return r("link_output")}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{confirmContent:"This will unlink the output device. Confirm?",confirmColor:"orange",content:"Unlink",icon:"unlink",color:"red",disabled:!s,onClick:function(){return r("unlink_output")}})],4)})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.Newscaster=void 0;var o=n(0),r=n(7),i=n(1),a=n(2),c=n(50),l=n(3),s=n(44),d=n(145);function u(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var p=["security","engineering","medical","science","service","supply"],m={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,c=(0,i.useBackend)(t),u=c.act,p=c.data,m=p.is_security,g=p.is_admin,N=p.is_silent,V=p.is_printing,v=p.screen,x=p.channels,y=p.channel_idx,k=void 0===y?-1:y,w=(0,i.useLocalState)(t,"menuOpen",!1),_=w[0],B=w[1],S=(0,i.useLocalState)(t,"viewingPhoto",""),L=S[0],A=(S[1],(0,i.useLocalState)(t,"censorMode",!1)),I=A[0],E=A[1];0===v||2===v?n=(0,o.createComponentVNode)(2,f):1===v&&(n=(0,o.createComponentVNode)(2,C));var D=x.reduce((function(e,t){return e+t.unread}),0);return(0,o.createComponentVNode)(2,l.Window,{theme:m&&"security",children:[L?(0,o.createComponentVNode)(2,b):(0,o.createComponentVNode)(2,s.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,a.Flex,{width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,a.Section,{stretchContents:!0,className:(0,r.classes)(["Newscaster__menu",_&&"Newscaster__menu--open"]),children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Box,{flex:"0 1 content",children:[(0,o.createComponentVNode)(2,h,{icon:"bars",title:"Toggle Menu",onClick:function(){return B(!_)}}),(0,o.createComponentVNode)(2,h,{icon:"newspaper",title:"Headlines",selected:0===v,onClick:function(){return u("headlines")},children:D>0&&(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__menuButton--unread",children:D>=10?"9+":D})}),(0,o.createComponentVNode)(2,h,{icon:"briefcase",title:"Job Openings",selected:1===v,onClick:function(){return u("jobs")}}),(0,o.createComponentVNode)(2,a.Divider)]}),(0,o.createComponentVNode)(2,a.Box,{flex:"2",overflowY:"auto",overflowX:"hidden",children:x.map((function(e){return(0,o.createComponentVNode)(2,h,{icon:e.icon,title:e.name,selected:2===v&&x[k-1]===e,onClick:function(){return u("channel",{uid:e.uid})},children:e.unread>0&&(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__menuButton--unread",children:e.unread>=10?"9+":e.unread})},e)}))}),(0,o.createComponentVNode)(2,a.Box,{width:"100%",flex:"0 0 content",children:[(0,o.createComponentVNode)(2,a.Divider),(!!m||!!g)&&(0,o.createFragment)([(0,o.createComponentVNode)(2,h,{security:!0,icon:"exclamation-circle",title:"Edit Wanted Notice",mb:"0.5rem",onClick:function(){return(0,s.modalOpen)(t,"wanted_notice")}}),(0,o.createComponentVNode)(2,h,{security:!0,icon:I?"minus-square":"minus-square-o",title:"Censor Mode: "+(I?"On":"Off"),mb:"0.5rem",onClick:function(){return E(!I)}}),(0,o.createComponentVNode)(2,a.Divider)],4),(0,o.createComponentVNode)(2,h,{icon:"pen-alt",title:"New Story",mb:"0.5rem",onClick:function(){return(0,s.modalOpen)(t,"create_story")}}),(0,o.createComponentVNode)(2,h,{icon:"plus-circle",title:"New Channel",onClick:function(){return(0,s.modalOpen)(t,"create_channel")}}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,h,{icon:V?"spinner":"print",iconSpin:V,title:V?"Printing...":"Print Newspaper",onClick:function(){return u("print_newspaper")}}),(0,o.createComponentVNode)(2,h,{icon:N?"volume-mute":"volume-up",title:"Mute: "+(N?"On":"Off"),onClick:function(){return u("toggle_mute")}})]})]})}),(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",flex:"1",children:[(0,o.createComponentVNode)(2,d.TemporaryNotice),n]})]})})]})};var h=function(e,t){(0,i.useBackend)(t).act;var n=e.icon,c=void 0===n?"":n,l=e.iconSpin,s=e.selected,d=void 0!==s&&s,p=e.security,m=void 0!==p&&p,h=e.onClick,f=e.title,C=e.children,g=u(e,["icon","iconSpin","selected","security","onClick","title","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Newscaster__menuButton",d&&"Newscaster__menuButton--selected",m&&"Newscaster__menuButton--security"]),onClick:h},g,{children:[d&&(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__menuButton--selectedBar"}),(0,o.createComponentVNode)(2,a.Icon,{name:c,spin:l,size:"2"}),(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__menuButton--title",children:f}),C]})))},f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.screen,d=c.is_admin,u=c.channel_idx,p=c.channel_can_manage,m=c.channels,h=c.stories,f=c.wanted,C=(0,i.useLocalState)(t,"fullStories",[]),N=C[0],b=(C[1],(0,i.useLocalState)(t,"censorMode",!1)),V=b[0],v=(b[1],2===l&&u>-1?m[u-1]:null);return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",flex:"1",children:[!!f&&(0,o.createComponentVNode)(2,g,{story:f,wanted:!0}),(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Icon,{name:v?v.icon:"newspaper",mr:"0.5rem"}),v?v.name:"Headlines"],0),flexGrow:"1",children:h.length>0?h.slice().reverse().map((function(e){return!N.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,g,{story:e},e)})):(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__emptyNotice",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"times",size:"3"}),(0,o.createVNode)(1,"br"),"There are no stories at this time."]})}),!!v&&(0,o.createComponentVNode)(2,a.Section,{flexShrink:"1",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Icon,{name:"info-circle",mr:"0.5rem"}),(0,o.createTextVNode)("About")],4),buttons:(0,o.createFragment)([V&&(0,o.createComponentVNode)(2,a.Button,{disabled:!!v.admin&&!d,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,a.Button,{disabled:!p,icon:"cog",content:"Manage",onClick:function(){return(0,s.modalOpen)(t,"manage_channel",{uid:v.uid})}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:v.description||"N/A"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Owner",children:v.author||"N/A"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Public",children:v["public"]?"Yes":"No"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Views",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"eye",mr:"0.5rem"}),h.reduce((function(e,t){return e+t.view_count}),0).toLocaleString()]})]})})]})},C=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data),l=c.jobs,s=c.wanted,d=Object.entries(l).reduce((function(e,t){t[0];return e+t[1].length}),0);return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",flex:"1",children:[!!s&&(0,o.createComponentVNode)(2,g,{story:s,wanted:!0}),(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Icon,{name:"briefcase",mr:"0.5rem"}),(0,o.createTextVNode)("Job Openings")],4),buttons:(0,o.createComponentVNode)(2,a.Box,{mt:"0.25rem",color:"label",children:"Work for a better future at Nanotrasen"}),children:d>0?p.map((function(e){return Object.assign({},m[e],{id:e,jobs:l[e]})})).filter((function(e){return!!e&&e.jobs.length>0})).map((function(e){return(0,o.createComponentVNode)(2,a.Section,{className:(0,r.classes)(["Newscaster__jobCategory","Newscaster__jobCategory--"+e.id]),title:e.title,buttons:(0,o.createComponentVNode)(2,a.Box,{mt:"0.25rem",color:"label",children:e.fluff_text}),children:e.jobs.map((function(e){return(0,o.createComponentVNode)(2,a.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,a.Box,{className:"Newscaster__emptyNotice",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"times",size:"3"}),(0,o.createVNode)(1,"br"),"There are no openings at this time."]})}),(0,o.createComponentVNode)(2,a.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,a.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."})]})]})},g=function(e,t){var n=(0,i.useBackend)(t),l=n.act,s=n.data,d=e.story,u=e.wanted,p=void 0!==u&&u,m=(0,i.useLocalState)(t,"fullStories",[]),h=m[0],f=m[1],C=(0,i.useLocalState)(t,"censorMode",!1),g=C[0];C[1];return(0,o.createComponentVNode)(2,a.Section,{className:(0,r.classes)(["Newscaster__story",p&&"Newscaster__story--wanted"]),title:(0,o.createFragment)([p&&(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-circle",mr:"0.5rem"}),(2&d.censor_flags?"[REDACTED]":d.title)||"News from "+d.author],0),buttons:(0,o.createComponentVNode)(2,a.Box,{mt:"0.25rem",children:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:[!p&&g&&(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:(0,o.createComponentVNode)(2,a.Button,{enabled:2&d.censor_flags,icon:2&d.censor_flags?"comment-slash":"comment",content:2&d.censor_flags?"Uncensor":"Censor",mr:"0.5rem",mt:"-0.25rem",onClick:function(){return l("censor_story",{uid:d.uid})}})}),(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user"})," ",d.author," |\xa0",!p&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Icon,{name:"eye"}),(0,o.createTextVNode)(" "),d.view_count.toLocaleString(),(0,o.createTextVNode)(" |\xa0")],0),(0,o.createComponentVNode)(2,a.Icon,{name:"clock"})," ",(0,c.timeAgo)(d.publish_time,s.world_time)]})]})}),children:(0,o.createComponentVNode)(2,a.Box,{children:2&d.censor_flags?"[REDACTED]":(0,o.createFragment)([!!d.has_photo&&(0,o.createComponentVNode)(2,N,{name:"story_photo_"+d.uid+".png",float:"right",ml:"0.5rem"}),(d.body_short||d.body).split("\n").map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e||(0,o.createVNode)(1,"br")},e)})),d.body_short&&(0,o.createComponentVNode)(2,a.Button,{content:"Read more..",mt:"0.5rem",onClick:function(){return f([].concat(h,[d.uid]))}}),(0,o.createComponentVNode)(2,a.Box,{clear:"right"})],0)})})},N=function(e,t){var n=e.name,r=u(e,["name"]),c=(0,i.useLocalState)(t,"viewingPhoto",""),l=(c[0],c[1]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"img",className:"Newscaster__photo",src:n,onClick:function(){return l(n)}},r)))},b=function(e,t){var n=(0,i.useLocalState)(t,"viewingPhoto",""),r=n[0],c=n[1];return(0,o.createComponentVNode)(2,a.Modal,{className:"Newscaster__photoZoom",children:[(0,o.createComponentVNode)(2,a.Box,{as:"img",src:r}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Close",color:"grey",mt:"1rem",onClick:function(){return c("")}})]})},V=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.data),c=!!e.args.uid&&r.channels.filter((function(t){return t.uid===e.args.uid})).pop();if("manage_channel"!==e.id||c){var l="manage_channel"===e.id,d=!!e.args.is_admin,u=e.args.scanned_user,p=(0,i.useLocalState)(t,"author",(null==c?void 0:c.author)||u||"Unknown"),m=p[0],h=p[1],f=(0,i.useLocalState)(t,"name",(null==c?void 0:c.name)||""),C=f[0],g=f[1],N=(0,i.useLocalState)(t,"description",(null==c?void 0:c.description)||""),b=N[0],V=N[1],v=(0,i.useLocalState)(t,"icon",(null==c?void 0:c.icon)||"newspaper"),x=v[0],y=v[1],k=(0,i.useLocalState)(t,"isPublic",!!l&&!!(null==c?void 0:c["public"])),w=k[0],_=k[1],B=(0,i.useLocalState)(t,"adminLocked",1===(null==c?void 0:c.admin)||!1),S=B[0],L=B[1];return(0,o.createComponentVNode)(2,a.Section,{level:"2",m:"-1rem",pb:"1rem",title:l?"Manage "+c.name:"Create New Channel",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:"Owner",children:(0,o.createComponentVNode)(2,a.Input,{disabled:!d,width:"100%",value:m,onInput:function(e,t){return h(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",placeholder:"50 characters max.",maxLength:"50",value:C,onInput:function(e,t){return g(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description (optional)",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Input,{multiline:!0,width:"100%",placeholder:"128 characters max.",maxLength:"128",value:b,onInput:function(e,t){return V(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Icon",children:[(0,o.createComponentVNode)(2,a.Input,{disabled:!d,value:x,width:"35%",mr:"0.5rem",onInput:function(e,t){return y(t)}}),(0,o.createComponentVNode)(2,a.Icon,{name:x,size:"2",verticalAlign:"middle",mr:"0.5rem"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Accept Public Stories?",children:(0,o.createComponentVNode)(2,a.Button,{selected:w,icon:w?"toggle-on":"toggle-off",content:w?"Yes":"No",onClick:function(){return _(!w)}})}),d&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Button,{selected:S,icon:S?"lock":"lock-open",content:S?"On":"Off",tooltip:"Locking this channel will make it editable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return L(!S)}})})]})}),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:0===m.trim().length||0===C.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,s.modalAnswer)(t,e.id,"",{author:m,name:C.substr(0,49),description:b.substr(0,128),icon:x,"public":w?1:0,admin_locked:S?1:0}),(0,i.deleteLocalState)(t,"author","name","description","icon","public")}})]})}(0,s.modalClose)(t)};(0,s.modalRegisterBodyOverride)("create_channel",V),(0,s.modalRegisterBodyOverride)("manage_channel",V),(0,s.modalRegisterBodyOverride)("create_story",(function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.photo,d=c.channels,u=c.channel_idx,p=void 0===u?-1:u,m=!!e.args.is_admin,h=e.args.scanned_user,f=d.slice().sort((function(e,t){if(p<0)return 0;var n=d[p-1];return n.uid===e.uid?-1:n.uid===t.uid?1:void 0})).filter((function(e){return m||!e.frozen&&(e.author===h||!!e["public"])})),C=(0,i.useLocalState)(t,"author",h||"Unknown"),g=C[0],b=C[1],V=(0,i.useLocalState)(t,"channel",f.length>0?f[0].name:""),v=V[0],x=V[1],y=(0,i.useLocalState)(t,"title",""),k=y[0],w=y[1],_=(0,i.useLocalState)(t,"body",""),B=_[0],S=_[1],L=(0,i.useLocalState)(t,"adminLocked",!1),A=L[0],I=L[1];return(0,o.createComponentVNode)(2,a.Section,{level:2,m:"-1rem",pb:"1rem",title:"Create New Story",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:"Author",children:(0,o.createComponentVNode)(2,a.Input,{disabled:!m,width:"100%",value:g,onInput:function(e,t){return b(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Channel",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Dropdown,{selected:v,options:f.map((function(e){return e.name})),mb:"0",width:"100%",onSelected:function(e){return x(e)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Title",children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",placeholder:"128 characters max.",maxLength:"128",value:k,onInput:function(e,t){return w(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Story Text",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,multiline:!0,placeholder:"1024 characters max.",maxLength:"1024",rows:"8",width:"100%",value:B,onInput:function(e,t){return S(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Photo (optional)",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.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,a.LabeledList.Item,{label:"Preview",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Section,{noTopPadding:!0,title:k,maxHeight:"13.5rem",overflow:"auto",children:(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:[!!l&&(0,o.createComponentVNode)(2,N,{name:"inserted_photo_"+l.uid+".png",float:"right"}),B.split("\n").map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e||(0,o.createVNode)(1,"br")},e)})),(0,o.createComponentVNode)(2,a.Box,{clear:"right"})]})})}),m&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Button,{selected:A,icon:A?"lock":"lock-open",content:A?"On":"Off",tooltip:"Locking this story will make it censorable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return I(!A)}})})]})}),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:0===g.trim().length||0===v.trim().length||0===k.trim().length||0===B.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,s.modalAnswer)(t,"create_story","",{author:g,channel:v,title:k.substr(0,127),body:B.substr(0,1023),admin_locked:A?1:0}),(0,i.deleteLocalState)(t,"author","channel","title","body")}})]})})),(0,s.modalRegisterBodyOverride)("wanted_notice",(function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.photo,d=c.wanted,u=!!e.args.is_admin,p=e.args.scanned_user,m=(0,i.useLocalState)(t,"author",(null==d?void 0:d.author)||p||"Unknown"),h=m[0],f=m[1],C=(0,i.useLocalState)(t,"name",(null==d?void 0:d.title.substr(8))||""),g=C[0],b=C[1],V=(0,i.useLocalState)(t,"description",(null==d?void 0:d.body)||""),v=V[0],x=V[1],y=(0,i.useLocalState)(t,"adminLocked",1===(null==d?void 0:d.admin_locked)||!1),k=y[0],w=y[1];return(0,o.createComponentVNode)(2,a.Section,{level:"2",m:"-1rem",pb:"1rem",title:"Manage Wanted Notice",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:"Authority",children:(0,o.createComponentVNode)(2,a.Input,{disabled:!u,width:"100%",value:h,onInput:function(e,t){return f(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",value:g,maxLength:"128",onInput:function(e,t){return b(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Input,{multiline:!0,width:"100%",value:v,maxLength:"512",rows:"4",onInput:function(e,t){return x(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Photo (optional)",verticalAlign:"top",children:[(0,o.createComponentVNode)(2,a.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,N,{name:"inserted_photo_"+l.uid+".png",float:"right"})]}),u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Button,{selected:k,icon:k?"lock":"lock-open",content:k?"On":"Off",tooltip:"Locking this wanted notice will make it editable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return w(!k)}})})]})}),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!d,icon:"eraser",color:"danger",content:"Clear",position:"absolute",right:"7.25rem",bottom:"-0.75rem",onClick:function(){r("clear_wanted_notice"),(0,s.modalClose)(t),(0,i.deleteLocalState)(t,"author","name","description","admin_locked")}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:0===h.trim().length||0===g.trim().length||0===v.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,s.modalAnswer)(t,e.id,"",{author:h,name:g.substr(0,127),description:v.substr(0,511),admin_locked:k?1:0}),(0,i.deleteLocalState)(t,"author","name","description","admin_locked")}})]})}))},function(e,t,n){"use strict";t.__esModule=!0,t.NinjaBloodScan=void 0;var o=n(0),r=n(1),i=n(2),a=n(51),c=n(3);t.NinjaBloodScan=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,theme:"spider_clan",children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s)]})})};var l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.vialIcons,d=l.noVialIcon,u=l.bloodOwnerNames,p=l.bloodOwnerSpecies,m=l.bloodOwnerTypes,h=l.blockButtons,f=l.scanStates,C="Button_blue",g="Button_disabled",N=["NoticeBox_red","NoticeBox","NoticeBox_blue"];return(0,o.createComponentVNode)(2,i.Flex,{direction:"column",shrink:1,alignContent:"center",children:(0,o.createComponentVNode)(2,i.Section,{title:"\u041e\u0431\u0440\u0430\u0437\u0446\u044b",backgroundColor:"rgba(0, 0, 0, 0.4)",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0437\u0446\u0430 \u043a\u0440\u043e\u0432\u0438. \u041c\u0430\u0448\u0438\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u0440\u043e\u0432\u044c\u044e \u0441\u0443\u0449\u0435\u0441\u0442\u0432 \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0432\u0430\u043c \u043a\u043b\u0430\u043d. \u0420\u0435\u0430\u0433\u0435\u043d\u0442\u044b \u0438\u043c \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u0435 \u043f\u0440\u0438\u043c\u0443\u0442\u0441\u044f \u0438\u043b\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c",tooltipPosition:"bottom-left"}),children:[(0,o.createComponentVNode)(2,i.Flex,{direction:"row",shrink:1,alignContent:"center",children:[1,2,3].map((function(e,t){return(0,o.createComponentVNode)(2,a.FlexItem,{direction:"column",width:"33.3%",ml:t?2:0,children:[(0,o.createComponentVNode)(2,i.Section,{title:u[t]?"\u041a\u0440\u043e\u0432\u044c":"\u041d\u0435\u0442 \u0440\u0435\u0430\u0433\u0435\u043d\u0442\u0430",style:{"text-align":"left",background:"rgba(53, 94, 163, 0.5)"}}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:N[f[t]],success:0,danger:0,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{className:h?g:C,height:"100%",width:"100%",disabled:h,onClick:function(){return c("vial_out",{button_num:t+1})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"128px",width:"128px",src:"data:image/jpeg;base64,"+(s[t]||d),style:{"margin-left":"3px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:u[t]||" - ",content:"\u0420\u0430\u0441\u0430: "+(p[t]||" - ")+"\n\u0422\u0438\u043f \u043a\u0440\u043e\u0432\u0438: "+(m[t]||" - "),position:"bottom"})]})})]},t)}))}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_red",success:0,danger:0,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{className:0===h?"":"Button_disabled",content:"\u041d\u0430\u0447\u0430\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",width:"250px",textAlign:"center",disabled:h,tooltip:"\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u0440\u043e\u0432\u044c \u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043a\u043b\u0430\u043d\u0443.",tooltipPosition:"bottom",onClick:function(){return c("scan_blood")}})})]})})},s=function(e,t){var n=(0,r.useBackend)(t).data.progressBar;return(0,o.createComponentVNode)(2,i.Section,{stretchContents:!0,children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:"green",value:n,minValue:0,maxValue:100,children:(0,o.createVNode)(1,"center",null,(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_green",mt:1,children:n?"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 "+n+"%":"\u0420\u0435\u0436\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f"}),2)})})}},function(e,t,n){"use strict";t.__esModule=!0,t.NinjaMindScan=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.NinjaMindScan=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"spider_clan",children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.occupantIcon,s=c.occupant_name,d=c.occupant_health,u=c.scanned_occupants,p="none"===s?1:0;return(0,o.createComponentVNode)(2,i.Flex,{direction:"column",shrink:1,alignContent:"left",children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u041f\u0430\u0446\u0438\u0435\u043d\u0442",backgroundColor:"rgba(0, 0, 0, 0.4)",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435.",tooltipPosition:"bottom-left"}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",shrink:1,alignContent:"left",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{shrink:1,alignContent:"left",children:(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_blue",success:0,danger:0,width:"90px",align:"left",children:(0,o.createComponentVNode)(2,i.Section,{style:{background:"rgba(4, 74, 27, 0.75)"},align:"left",children:(0,o.createVNode)(1,"img",null,null,1,{height:"128px",width:"128px",src:"data:image/jpeg;base64,"+l,style:{"margin-left":"-28px","-ms-interpolation-mode":"nearest-neighbor"}})})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,alignContent:"right",children:[(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_green",success:0,danger:0,align:"left",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0418\u043c\u044f",children:s}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435",children:d})]})}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_red",mt:2.5,success:0,danger:0,align:"center",children:[(0,o.createComponentVNode)(2,i.Button,{className:0===p?"":"Button_disabled",content:"\u041d\u0430\u0447\u0430\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",width:"250px",textAlign:"center",disabled:p,tooltip:"\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u044b\u0442\u044c \u0438\u0437 \u0435\u0433\u043e \u0440\u0430\u0437\u0443\u043c\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043a\u043b\u0430\u043d\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.",tooltipPosition:"bottom-left",onClick:function(){return a("scan_occupant")}}),(0,o.createComponentVNode)(2,i.Button,{className:0===p?"":"Button_disabled",content:"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e",width:"250px",textAlign:"center",disabled:p,tooltip:"\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u044f \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u0438\u0437 \u043a\u0430\u043f\u0441\u0443\u043b\u044b",tooltipPosition:"bottom-left",onClick:function(){return a("go_out")}}),(0,o.createComponentVNode)(2,i.Button,{className:0===p?"":"Button_disabled",content:"\u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044f \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430",width:"250px",textAlign:"center",disabled:p,tooltip:"\u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d \u0431\u044b\u043b \u043f\u043e\u0445\u0438\u0449\u0435\u043d. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0433\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u0440\u0430\u0437\u0431\u043e\u043b\u0442\u0430\u043b \u043e \u0432\u0430\u0441.",tooltipPosition:"bottom-left",onClick:function(){return a("teleport_out")}})]})]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u043c\u0438 \u043b\u044e\u0434\u0435\u0439",align:"center",backgroundColor:"rgba(0, 0, 0, 0.4)",children:(0,o.createComponentVNode)(2,i.Box,{maxHeight:15,overflowY:"auto",overflowX:"hidden",children:(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.scanned_occupant})})},e.scanned_occupant)}))})})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.NuclearBomb=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.NuclearBomb=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return l.extended?(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Auth Disk",children:(0,o.createComponentVNode)(2,i.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 c("auth")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Auth Code",children:(0,o.createComponentVNode)(2,i.Button,{icon:"key",disabled:!l.authdisk,selected:l.authcode,content:l.codemsg,onClick:function(){return c("code")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Arming & Disarming",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Bolted to floor",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.anchored?"check":"times",selected:l.anchored,disabled:!l.authfull,content:l.anchored?"YES":"NO",onClick:function(){return c("toggle_anchor")}})}),l.authfull&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Time Left",children:(0,o.createComponentVNode)(2,i.Button,{icon:"stopwatch",content:l.time,disabled:!l.authfull,tooltip:"Set Timer",onClick:function(){return c("set_time")}})})||(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Time Left",color:l.timer?"red":"",children:l.time+"s"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safety",children:(0,o.createComponentVNode)(2,i.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 c("toggle_safety")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Arm/Disarm",children:(0,o.createComponentVNode)(2,i.Button,{icon:(l.timer,"bomb"),disabled:l.safety||!l.authfull,color:"red",content:l.timer?"DISARM THE NUKE":"ARM THE NUKE",onClick:function(){return c("toggle_armed")}})})]})})]})}):(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:"Deployment",children:(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation-triangle",content:"Deploy Nuclear Device (will bolt device to floor)",onClick:function(){return c("deploy")}})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.OperatingComputer=void 0;var o=n(0),r=n(15),i=n(1),a=n(3),c=n(2),l=[["good","Conscious"],["average","Unconscious"],["bad","DEAD"]],s=[["Resp.","oxyLoss"],["Toxin","toxLoss"],["Brute","bruteLoss"],["Burn","fireLoss"]],d={average:[.25,.5],bad:[.5,Infinity]},u=["bad","average","average","good","average","average","bad"];t.OperatingComputer=function(e,t){var n,r=(0,i.useBackend)(t),l=r.act,s=r.data,d=s.hasOccupant,u=s.choice;return n=u?(0,o.createComponentVNode)(2,h):d?(0,o.createComponentVNode)(2,p):(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,c.Tabs,{children:[(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:!u,icon:"user",onClick:function(){return l("choiceOff")},children:"Patient"}),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:!!u,icon:"cog",onClick:function(){return l("choiceOn")},children:"Options"})]}),(0,o.createComponentVNode)(2,c.Section,{flexGrow:"1",children:n})]})})};var p=function(e,t){var n=(0,i.useBackend)(t).data.occupant;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:"Patient",level:"2",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:n.name}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",color:l[n.stat][0],children:l[n.stat][1]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:n.maxHealth,value:n.health/n.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),s.map((function(e,t){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e[0]+" Damage",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:"100",value:n[e[1]]/100,ranges:d,children:(0,r.round)(n[e[1]])},t)},t)})),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:n.maxTemp,value:n.bodyTemperature/n.maxTemp,color:u[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,c.LabeledList.Item,{label:"Blood Level",children:(0,o.createComponentVNode)(2,c.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,c.LabeledList.Item,{label:"Pulse",children:[n.pulse," BPM"]})],4)]})}),(0,o.createComponentVNode)(2,c.Section,{title:"Current Procedures",level:"2",children:n.inSurgery?n.surgeries.map((function(e){var t=e.bodypartName,n=e.surgeryName,r=e.stepName;return(0,o.createComponentVNode)(2,c.Section,{title:t,level:"4",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Procedure",children:n}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Next Step",children:r})]})},t)})):(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No procedures ongoing."})})],4)},m=function(){return(0,o.createComponentVNode)(2,c.Flex,{textAlign:"center",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 patient detected."]})})},h=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data,l=a.verbose,s=a.health,d=a.healthAlarm,u=a.oxy,p=a.oxyAlarm,m=a.crit;return(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Loudspeaker",children:(0,o.createComponentVNode)(2,c.Button,{selected:l,icon:l?"toggle-on":"toggle-off",content:l?"On":"Off",onClick:function(){return r(l?"verboseOff":"verboseOn")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health Announcer",children:(0,o.createComponentVNode)(2,c.Button,{selected:s,icon:s?"toggle-on":"toggle-off",content:s?"On":"Off",onClick:function(){return r(s?"healthOff":"healthOn")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health Announcer Threshold",children:(0,o.createComponentVNode)(2,c.Knob,{bipolar:!0,minValue:"-100",maxValue:"100",value:d,stepPixelSize:"5",ml:"0",onChange:function(e,t){return r("health_adj",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Oxygen Alarm",children:(0,o.createComponentVNode)(2,c.Button,{selected:u,icon:u?"toggle-on":"toggle-off",content:u?"On":"Off",onClick:function(){return r(u?"oxyOff":"oxyOn")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Oxygen Alarm Threshold",children:(0,o.createComponentVNode)(2,c.Knob,{bipolar:!0,minValue:"-100",maxValue:"100",value:p,stepPixelSize:"5",ml:"0",onChange:function(e,t){return r("oxy_adj",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Critical Alert",children:(0,o.createComponentVNode)(2,c.Button,{selected:m,icon:m?"toggle-on":"toggle-off",content:m?"On":"Off",onClick:function(){return r(m?"critOff":"critOn")}})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Orbit=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(3);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 s(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 s(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 s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);nt},m=function(e,t){var n=e.name,o=t.name;if(!n||!o)return 0;var r=n.match(d),i=o.match(d);return r&&i&&n.replace(d,"")===o.replace(d,"")?parseInt(r[1],10)-parseInt(i[1],10):p(n,o)},h=function(e,t){var n=(0,i.useBackend)(t).act,r=e.searchText,c=e.source,l=e.title,s=c.filter(u(r));return s.sort(m),c.length>0&&(0,o.createComponentVNode)(2,a.Section,{title:l+" - ("+c.length+")",children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,onClick:function(){return n("orbit",{ref:e.ref})}},e.name)}))})},f=function(e,t){var n=(0,i.useBackend)(t).act,r=e.color,c=e.thing;return(0,o.createComponentVNode)(2,a.Button,{color:r,onClick:function(){return n("orbit",{ref:c.ref})},children:c.name})};t.Orbit=function(e,t){for(var n,r=(0,i.useBackend)(t),s=r.act,d=r.data,C=d.alive,g=d.antagonists,N=(d.auto_observe,d.dead),b=d.ghosts,V=d.misc,v=d.npcs,x=(0,i.useLocalState)(t,"searchText",""),y=x[0],k=x[1],w={},_=l(g);!(n=_()).done;){var B=n.value;w[B.antag]===undefined&&(w[B.antag]=[]),w[B.antag].push(B)}var S=Object.entries(w);S.sort((function(e,t){return p(e[0],t[0])}));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:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Icon,{name:"search",mr:1})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search...",autoFocus:!0,fluid:!0,value:y,onInput:function(e,t){return k(t)},onEnter:function(e,t){return function(e){for(var t=0,n=[S.map((function(e){return e[0],e[1]})),C,b,N,v,V];t0&&(0,o.createComponentVNode)(2,a.Section,{title:"Antagonists",children:S.map((function(e){var t=e[0],n=e[1];return(0,o.createComponentVNode)(2,a.Section,{title:t,level:2,children:n.filter(u(y)).sort(m).map((function(e){return(0,o.createComponentVNode)(2,f,{color:"bad",thing:e},e.name)}))},t)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Alive - ("+C.length+")",children:C.filter(u(y)).sort(m).map((function(e){return(0,o.createComponentVNode)(2,f,{color:"good",thing:e},e.name)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Ghosts - ("+b.length+")",children:b.filter(u(y)).sort(m).map((function(e){return(0,o.createComponentVNode)(2,f,{color:"grey",thing:e},e.name)}))}),(0,o.createComponentVNode)(2,h,{title:"Dead",source:N,searchText:y}),(0,o.createComponentVNode)(2,h,{title:"NPCs",source:v,searchText:y}),(0,o.createComponentVNode)(2,h,{title:"Misc",source:V,searchText:y})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.OreRedemption=void 0;var o=n(0),r=n(1),i=n(2),a=n(51),c=n(3),l=function(e){return e.toLocaleString("en-US")+" pts"},s={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,i.Flex,{direction:"column",width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"content",mb:"0.5rem",children:(0,o.createComponentVNode)(2,d,{height:"100%"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",overflow:"hidden",children:[(0,o.createComponentVNode)(2,u,{height:"62%"}),(0,o.createComponentVNode)(2,p,{height:"38%"})]})]})})})};var d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,s=c.id,d=c.points,u=c.disk,p=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Section,Object.assign({},p,{children:[(0,o.createComponentVNode)(2,i.Box,{color:"average",textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"exclamation-triangle",mr:"0.5rem"}),"This machine only accepts ore. Gibtonite is not accepted."]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID card",children:s?(0,o.createComponentVNode)(2,i.Button,{selected:!0,bold:!0,verticalAlign:"middle",icon:"eject",content:s.name,tooltip:"Ejects the ID card.",onClick:function(){return a("eject_id")},style:{"white-space":"pre-wrap"}}):(0,o.createComponentVNode)(2,i.Button,{icon:"sign-in-alt",content:"Insert",tooltip:"Hold the ID card in your hand to insert.",onClick:function(){return a("insert_id")}})}),s&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Mining Points",children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:l(s.points)})}),s&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Mining Points",children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:l(s.total_points)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Unclaimed Points",color:d>0?"good":"grey",bold:d>0&&"good",children:l(d)}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{children:(0,o.createComponentVNode)(2,i.Button,{disabled:!s,icon:"hand-holding-usd",content:"Claim",onClick:function(){return a("claim")}})})]}),(0,o.createComponentVNode)(2,i.Divider),u?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Design disk",children:(0,o.createComponentVNode)(2,i.Button,{selected:!0,bold:!0,icon:"eject",content:u.name,tooltip:"Ejects the design disk.",onClick:function(){return a("eject_disk")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stored design",children:(0,o.createComponentVNode)(2,i.Box,{color:u.design&&(u.compatible?"good":"bad"),children:u.design||"N/A"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{children:(0,o.createComponentVNode)(2,i.Button,{disabled:!u.design||!u.compatible,icon:"upload",content:"Download",tooltip:"Downloads the design on the disk into the machine.",onClick:function(){return a("download")},mb:"0"})})]}):(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"No design disk inserted."})]})))},u=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.sheets),c=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Section,Object.assign({className:"OreRedemption__Ores",p:"0"},c,{children:[(0,o.createComponentVNode)(2,m,{title:"Sheets",columns:[["Available","25%"],["Ore Value","15%"],["Smelt","20%"]]}),a.map((function(e){return(0,o.createComponentVNode)(2,h,{ore:e},e.id)}))]})))},p=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.alloys),c=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Section,Object.assign({className:"OreRedemption__Ores",p:"0"},c,{children:[(0,o.createComponentVNode)(2,m,{title:"Alloys",columns:[["Recipe","50%"],["Available","11%"],["Smelt","20%"]]}),a.map((function(e){return(0,o.createComponentVNode)(2,f,{ore:e},e.id)}))]})))},m=function(e,t){var n;return(0,o.createComponentVNode)(2,i.Box,{className:"OreHeader",children:(0,o.createComponentVNode)(2,i.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",children:e.title}),null==(n=e.columns)?void 0:n.map((function(e){return(0,o.createComponentVNode)(2,i.Flex.Item,{basis:e[1],textAlign:"center",color:"label",bold:!0,children:e[0]},e[1])}))]})})},h=function(e,t){var n=(0,r.useBackend)(t).act,a=e.ore;if(!(a.value&&a.amount<=0)||["$metal","$glass"].indexOf(a.id)>-1){var c=a.id.replace("$","");return(0,o.createComponentVNode)(2,i.Box,{className:"SheetLine",children:(0,o.createComponentVNode)(2,i.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"45%",align:"middle",children:[(0,o.createComponentVNode)(2,i.Box,{as:"img",src:"sheet-"+(s[c]||c)+".png",verticalAlign:"middle",ml:"0rem"}),a.name]}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"20%",textAlign:"center",color:a.amount>0?"good":"gray",bold:a.amount>0,align:"center",children:a.amount.toLocaleString("en-US")}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"20%",textAlign:"center",align:"center",children:a.value}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"20%",textAlign:"center",align:"center",lineHeight:"32px",children:(0,o.createComponentVNode)(2,i.NumberInput,{value:0,minValue:0,maxValue:Math.min(a.amount,50),stepPixelSize:6,onChange:function(e,t){return n(a.value?"sheet":"alloy",{id:a.id,amount:t})}})})]})})}},f=function(e,t){var n=(0,r.useBackend)(t).act,c=e.ore,l=c.id.replace("$","");return(0,o.createComponentVNode)(2,i.Box,{className:"SheetLine",children:(0,o.createComponentVNode)(2,i.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"7%",align:"middle",children:(0,o.createComponentVNode)(2,i.Box,{as:"img",src:"sheet-"+l+".png",verticalAlign:"middle",ml:"`0rem"})}),(0,o.createComponentVNode)(2,a.FlexItem,{basis:"30%",textAlign:"middle",align:"center",children:c.name}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"35%",textAlign:"middle",color:c.amount>0?"good":"gray",align:"center",children:c.description}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"10%",textAlign:"center",color:c.amount>0?"good":"gray",bold:c.amount>0,align:"center",children:c.amount.toLocaleString("en-US")}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"20%",textAlign:"center",align:"center",lineHeight:"32px",children:(0,o.createComponentVNode)(2,i.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})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PAI=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(136),l=n(577);t.PAI=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data,u=d.app_template,p=d.app_icon,m=d.app_title,h=function(e){var t;try{t=l("./"+e+".js")}catch(o){if("MODULE_NOT_FOUND"===o.code)return(0,c.routingError)("notFound",e);throw o}var n=t[e];return n||(0,c.routingError)("missingExport",e)}(u);return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Icon,{name:p,mr:1}),m,"pai_main_menu"!==u&&(0,o.createComponentVNode)(2,i.Button,{ml:2,content:"Home",icon:"arrow-up",onClick:function(){return s("MASTER_back")}})]}),p:1,children:(0,o.createComponentVNode)(2,h)})})})}},function(e,t,n){var o={"./pai_advsecrecords.js":578,"./pai_atmosphere.js":579,"./pai_bioscan.js":580,"./pai_camera_bug.js":581,"./pai_directives.js":582,"./pai_doorjack.js":583,"./pai_encoder.js":584,"./pai_main_menu.js":585,"./pai_manifest.js":586,"./pai_medrecords.js":587,"./pai_messenger.js":588,"./pai_radio.js":589,"./pai_sec_chem.js":590,"./pai_secrecords.js":591,"./pai_signaler.js":592};function r(e){var t=i(e);return n(t)}function i(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=i,e.exports=r,r.id=577},function(e,t,n){"use strict";t.__esModule=!0,t.pai_advsecrecords=void 0;var o=n(0),r=n(1),i=n(2);t.pai_advsecrecords=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data;return(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Special Syndicate options:",children:(0,o.createComponentVNode)(2,i.Button,{content:"Select Records",onClick:function(){return a("ui_interact")}})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_atmosphere=void 0;var o=n(0),r=n(1),i=n(195);t.pai_atmosphere=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return(0,o.createComponentVNode)(2,i.AtmosScan,{data:a.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_bioscan=void 0;var o=n(0),r=n(1),i=n(2);t.pai_bioscan=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.app_data),c=a.holder,l=a.dead,s=a.health,d=a.brute,u=a.oxy,p=a.tox,m=a.burn,h=a.reagents,f=a.addictions,C=a.fractures,g=a.internal_bleeding;return c?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:l?(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"red",children:"Dead"}):(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"green",children:"Alive"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:0,max:1,value:s/100,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen Damage",children:(0,o.createComponentVNode)(2,i.Box,{color:"blue",children:u})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Toxin Damage",children:(0,o.createComponentVNode)(2,i.Box,{color:"green",children:p})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Burn Damage",children:(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:m})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Brute Damage",children:(0,o.createComponentVNode)(2,i.Box,{color:"red",children:d})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Reagents",children:h?h.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.title,children:(0,o.createComponentVNode)(2,i.Box,{color:e.overdosed?"bad":"good",children:[" ",e.volume," ",e.overdosed?"OVERDOSED":""," "]})},e.id)})):"Reagents not found."}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Addictions",children:f?f.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.addiction_name,children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:[" Stage: ",e.stage," "]})},e.id)})):(0,o.createComponentVNode)(2,i.Box,{color:"good",children:"Addictions not found."})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fractures",children:(0,o.createComponentVNode)(2,i.Box,{color:C?"bad":"good",children:["Fractures ",C?"":"not"," detected."]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Internal Bleedings",children:(0,o.createComponentVNode)(2,i.Box,{color:g?"bad":"good",children:["Internal Bleedings ",g?"":"not"," detected."]})})]}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Error: No biological host found."})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_camera_bug=void 0;var o=n(0),r=n(1),i=n(2);t.pai_camera_bug=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data;return(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Special Syndicate options:",children:(0,o.createComponentVNode)(2,i.Button,{content:"Select Monitor",onClick:function(){return a("ui_interact")}})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_directives=void 0;var o=n(0),r=n(1),i=n(2);t.pai_directives=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app_data,l=c.master,s=c.dna,d=c.prime,u=c.supplemental;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Master",children:l?l+" ("+s+")":"None"}),l&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Request DNA",children:(0,o.createComponentVNode)(2,i.Button,{content:"Request Carrier DNA Sample",icon:"dna",onClick:function(){return a("getdna")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Prime Directive",children:d}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Supplemental Directives",children:u||"None"})]}),(0,o.createComponentVNode)(2,i.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,i.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),i=n(2);t.pai_doorjack=function(e,t){var n,a,c=(0,r.useBackend)(t),l=c.act,s=c.data.app_data,d=s.cable,u=s.machine,p=s.inprogress;s.progress,s.aborted;return n=u?(0,o.createComponentVNode)(2,i.Button,{selected:!0,content:"Connected"}):(0,o.createComponentVNode)(2,i.Button,{content:d?"Extended":"Retracted",color:d?"orange":null,onClick:function(){return l("cable")}}),u&&(a=(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hack",children:[(0,o.createComponentVNode)(2,i.Box,{color:p?"green":"red",children:[" In progress: ",p?"Yes":"No"," "]}),p?(0,o.createComponentVNode)(2,i.Button,{mt:1,color:"red",content:"Abort",onClick:function(){return l("cancel")}}):(0,o.createComponentVNode)(2,i.Button,{mt:1,content:"Start",onClick:function(){return l("jack")}})]})),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cable",children:n}),a]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_encoder=void 0;var o=n(0),r=n(1),i=n(2);t.pai_encoder=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app_data,l=c.radio_name,s=c.radio_rank;return(0,o.createComponentVNode)(2,i.Section,{title:"Your name and rank in radio channels",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Your current name and rank",children:[l,", ",s]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Set new name",children:(0,o.createComponentVNode)(2,i.Input,{onInput:function(e,t){return a("set_newname",{newname:t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Set new rank",children:(0,o.createComponentVNode)(2,i.Input,{onInput:function(e,t){return a("set_newrank",{newrank:t})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_main_menu=void 0;var o=n(0),r=n(1),i=n(2);t.pai_main_menu=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app_data,l=c.available_software,s=c.installed_software,d=c.installed_toggles,u=c.available_ram,p=c.emotions,m=c.current_emotion,h=[];return s.map((function(e){return h[e.key]=e.name})),d.map((function(e){return h[e.key]=e.name})),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available RAM",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available Software",children:[l.filter((function(e){return!h[e.key]})).map((function(e){return(0,o.createComponentVNode)(2,i.Button,{color:e.syndi?"red":"default",content:e.name+" ("+e.cost+")",icon:e.icon,disabled:e.cost>u,onClick:function(){return a("purchaseSoftware",{key:e.key})}},e.key)})),0===l.filter((function(e){return!h[e.key]})).length&&"No software available!"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Installed Software",children:[s.filter((function(e){return"mainmenu"!==e.key})).map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.name,icon:e.icon,onClick:function(){return a("startSoftware",{software_key:e.key})}},e.key)})),0===s.length&&"No software installed!"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Installed Toggles",children:[d.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.name,icon:e.icon,selected:e.active,onClick:function(){return a("setToggle",{toggle_key:e.key})}},e.key)})),0===d.length&&"No toggles installed!"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Select Emotion",children:p.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{color:e.syndi?"red":"default",content:e.name,selected:e.id===m,onClick:function(){return a("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),i=n(144);t.pai_manifest=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return(0,o.createComponentVNode)(2,i.CrewManifest,{data:a.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_medrecords=void 0;var o=n(0),r=n(1),i=n(106);t.pai_medrecords=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.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),i=n(196);t.pai_messenger=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return a.app_data.active_convo?(0,o.createComponentVNode)(2,i.ActiveConversation,{data:a.app_data}):(0,o.createComponentVNode)(2,i.MessengerList,{data:a.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_radio=void 0;var o=n(0),r=n(1),i=n(15),a=n(2);t.pai_radio=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.app_data,s=l.minFrequency,d=l.maxFrequency,u=l.frequency,p=l.broadcasting;return(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Frequency",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,step:.2,stepPixelSize:6,minValue:s/10,maxValue:d/10,value:u/10,format:function(e){return(0,i.toFixed)(e,1)},onChange:function(e,t){return c("freq",{freq:t})}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Reset",icon:"undo",onClick:function(){return c("freq",{freq:"145.9"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Broadcast Nearby Speech",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("toggleBroadcast")},selected:p,content:p?"Enabled":"Disabled"})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_sec_chem=void 0;var o=n(0),r=n(1),i=n(2);t.pai_sec_chem=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app_data,l=c.holder,s=c.dead,d=c.health,u=c.current_chemicals,p=c.available_chemicals;return l?(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:s?(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"red",children:"Dead"}):(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"green",children:"Alive"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:0,max:1,value:d/100,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Chemicals",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available Chemicals",children:[p.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.name+" ("+e.cost+")",tooltip:e.desc,disabled:e.cost>u,onClick:function(){return a("secreteChemicals",{key:e.key})}},e.key)})),0===p.length&&"No chemicals available!"]})]})}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Error: No biological host found."})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_secrecords=void 0;var o=n(0),r=n(1),i=n(106);t.pai_secrecords=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.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),i=n(197);t.pai_signaler=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return(0,o.createComponentVNode)(2,i.Signaler,{data:a.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.PDA=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(136),l=n(594);t.PDA=function(e,t){var n=(0,r.useBackend)(t),u=(n.act,n.data),p=u.app;if(!u.owner)return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Error",children:"No user data found. Please swipe an ID card."})})});var m=function(e){var t;try{t=l("./"+e+".js")}catch(o){if("MODULE_NOT_FOUND"===o.code)return(0,c.routingError)("notFound",e);throw o}var n=t[e];return n||(0,c.routingError)("missingExport",e)}(p.template);return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,i.Section,{title:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Icon,{name:p.icon,mr:1}),p.name]}),p:1,children:(0,o.createComponentVNode)(2,m)}),(0,o.createComponentVNode)(2,i.Box,{mb:8}),(0,o.createComponentVNode)(2,d)]})})};var s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.idInserted,s=c.idLink,d=c.stationTime,u=c.cartridge_name;return(0,o.createComponentVNode)(2,i.Box,{mb:1,children:(0,o.createComponentVNode)(2,i.Flex,{align:"center",justify:"space-between",children:[l?(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"id-card",color:"transparent",onClick:function(){return a("Authenticate")},content:s})}):(0,o.createComponentVNode)(2,i.Flex.Item,{m:1,color:"grey",children:"No ID Inserted"}),u?(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"sd-card",color:"transparent",onClick:function(){return a("Eject")},content:"Eject "+u})}):(0,o.createComponentVNode)(2,i.Flex.Item,{m:1,color:"grey",children:"No Cartridge Inserted"}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,textAlign:"right",bold:!0,m:1,children:d})]})})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app;return(0,o.createComponentVNode)(2,i.Box,{className:"PDA__footer",backgroundColor:"#1b1b1b",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"33%",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,className:"PDA__footer__button",color:"transparent",iconColor:c.has_back?"white":"disabled",icon:"arrow-alt-circle-left-o",onClick:function(){return a("Back")}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"33%",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,className:"PDA__footer__button",color:"transparent",iconColor:c.is_home?"disabled":"white",icon:"home",onClick:function(){a("Home")}})})]})})}},function(e,t,n){var o={"./pda_atmos_scan.js":595,"./pda_janitor.js":596,"./pda_main_menu.js":597,"./pda_manifest.js":598,"./pda_medical.js":599,"./pda_messenger.js":196,"./pda_mob_hunt.js":600,"./pda_mule.js":601,"./pda_notes.js":602,"./pda_power.js":603,"./pda_secbot.js":604,"./pda_security.js":605,"./pda_signaler.js":606,"./pda_status_display.js":607,"./pda_supplyrecords.js":608};function r(e){var t=i(e);return n(t)}function i(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=i,e.exports=r,r.id=594},function(e,t,n){"use strict";t.__esModule=!0,t.pda_atmos_scan=void 0;var o=n(0),r=n(1),i=n(195);t.pda_atmos_scan=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.AtmosScan,{data:n})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_janitor=void 0;var o=n(0),r=n(1),i=n(2);t.pda_janitor=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.janitor),c=a.user_loc,l=a.mops,s=a.buckets,d=a.cleanbots,u=a.carts;return(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Location",children:[c.x,",",c.y]}),l&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mop Locations",children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.x,",",e.y," (",e.dir,") - ",e.status]},e)}))}),s&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mop Bucket Locations",children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.x,",",e.y," (",e.dir,") - [",e.volume,"/",e.max_volume,"]"]},e)}))}),d&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cleanbot Locations",children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.x,",",e.y," (",e.dir,") - ",e.status]},e)}))}),u&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Janitorial Cart Locations",children:u.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.x,",",e.y," (",e.dir,") - [",e.volume,"/",e.max_volume,"]"]},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_main_menu=void 0;var o=n(0),r=(n(15),n(1)),i=n(2);t.pda_main_menu=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.owner,s=c.ownjob,d=c.idInserted,u=c.categories,p=c.pai,m=c.notifying;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Owner",color:"average",children:[l,", ",s]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID",children:(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Update PDA Info",disabled:!d,onClick:function(){return a("UpdateInfo")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{level:2,title:"Functions",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:u.map((function(e){var t=c.apps[e];return t&&t.length?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e,children:t.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.uid in m?e.notify_icon:e.icon,iconSpin:e.uid in m,color:e.uid in m?"red":"transparent",content:e.name,onClick:function(){return a("StartProgram",{program:e.uid})}},e.uid)}))},e):null}))})}),!!p&&(0,o.createComponentVNode)(2,i.Section,{level:2,title:"pAI",children:[(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"cog",content:"Configuration",onClick:function(){return a("pai",{option:1})}}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:"Eject pAI",onClick:function(){return a("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),i=n(144);t.pda_manifest=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,i.CrewManifest)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_medical=void 0;var o=n(0),r=n(1),i=n(106);t.pda_medical=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.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),i=n(2);t.pda_mob_hunt=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.connected,s=c.wild_captures,d=c.no_collection,u=c.entry;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Connection Status",children:l?(0,o.createComponentVNode)(2,i.Box,{color:"green",children:["Connected",(0,o.createComponentVNode)(2,i.Button,{ml:2,content:"Disconnect",icon:"sign-out-alt",onClick:function(){return a("Disconnect")}})]}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:["Disconnected",(0,o.createComponentVNode)(2,i.Button,{ml:2,content:"Connect",icon:"sign-in-alt",onClick:function(){return a("Reconnect")}})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Wild Captures",children:s})]}),(0,o.createComponentVNode)(2,i.Section,{title:"Collection",mt:2,buttons:(0,o.createComponentVNode)(2,i.Box,{children:!d&&(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Previous",icon:"arrow-left",onClick:function(){return a("Prev")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Next",icon:"arrow-right",onClick:function(){return a("Next")}})]})}),children:d?"Your collection is empty! Go capture some Nano-Mobs!":u?(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:u.sprite,style:{width:"64px","-ms-interpolation-mode":"nearest-neighbor"}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[u.nickname&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nickname",children:u.nickname}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Species",children:u.real_name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:u.level}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Primary Type",children:u.type1}),u.type2&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Secondary Type",children:u.type2}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Transfer",icon:"sd-card",onClick:function(){return a("Transfer")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Release",icon:"arrow-up",onClick:function(){return a("Release")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Rename",icon:"pencil-alt",onClick:function(){return a("Rename")}}),!!u.is_hacked&&(0,o.createComponentVNode)(2,i.Button,{content:"Set Trap",icon:"bolt",color:"red",onClick:function(){return a("Set_Trap")}})]})]})})]}):(0,o.createComponentVNode)(2,i.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),i=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,i.Box,{children:l?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,a)})};var a=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.mulebot.bots;return(0,o.createComponentVNode)(2,i.Box,{children:[c.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:e.Name,icon:"cog",onClick:function(){return a("AccessBot",{uid:e.uid})}})},e.Name)})),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"rss",content:"Re-scan for bots",onClick:function(){return a("Rescan")}})})]})},c=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,l=a.data.mulebot,s=l.botstatus,d=l.active,u=s.mode,p=s.loca,m=s.load,h=s.powr,f=s.dest,C=s.home,g=s.retn,N=s.pick;switch(u){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=u}return(0,o.createComponentVNode)(2,i.Section,{title:d,children:[-1===u&&(0,o.createComponentVNode)(2,i.Box,{color:"red",bold:!0,children:"Waiting for response..."}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:p}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:n}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:[h,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Home",children:C}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Destination",children:(0,o.createComponentVNode)(2,i.Button,{content:f?f+" (Set)":"None (Set)",onClick:function(){return c("SetDest")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Load",children:(0,o.createComponentVNode)(2,i.Button,{content:m?m+" (Unload)":"None",disabled:!m,onClick:function(){return c("Unload")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Auto Pickup",children:(0,o.createComponentVNode)(2,i.Button,{content:N?"Yes":"No",selected:N,onClick:function(){return c("SetAutoPickup",{autoPickupType:N?"pickoff":"pickon"})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Auto Return",children:(0,o.createComponentVNode)(2,i.Button,{content:g?"Yes":"No",selected:g,onClick:function(){return c("SetAutoReturn",{autoReturnType:g?"retoff":"reton"})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Stop",icon:"stop",onClick:function(){return c("Stop")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Proceed",icon:"play",onClick:function(){return c("Start")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Return Home",icon:"home",onClick:function(){return c("ReturnHome")}})]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_notes=void 0;var o=n(0),r=n(1),i=n(2);t.pda_notes=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.note;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Section,{children:c}),(0,o.createComponentVNode)(2,i.Button,{icon:"pen",onClick:function(){return a("Edit")},content:"Edit"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_power=void 0;var o=n(0),r=n(1),i=n(198);t.pda_power=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,i.PowerMonitorMainContent)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_secbot=void 0;var o=n(0),r=n(1),i=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,i.Box,{children:l?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,a)})};var a=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.beepsky.bots;return(0,o.createComponentVNode)(2,i.Box,{children:[c.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:e.Name,icon:"cog",onClick:function(){return a("AccessBot",{uid:e.uid})}})},e.Name)})),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"rss",content:"Re-scan for bots",onClick:function(){return a("Rescan")}})})]})},c=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,l=a.data.beepsky,s=l.botstatus,d=l.active,u=s.mode,p=s.loca;switch(u){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,i.Section,{title:d,children:[-1===u&&(0,o.createComponentVNode)(2,i.Box,{color:"red",bold:!0,children:"Waiting for response..."}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:p}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:n}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Go",icon:"play",onClick:function(){return c("Go")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Stop",icon:"stop",onClick:function(){return c("Stop")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Summon",icon:"arrow-down",onClick:function(){return c("Summon")}})]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_security=void 0;var o=n(0),r=n(1),i=n(106);t.pda_security=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.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),i=n(197);t.pda_signaler=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return(0,o.createComponentVNode)(2,i.Signaler,{data:a})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_status_display=void 0;var o=n(0),r=n(1),i=n(2);t.pda_status_display=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.records;return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Code",children:[(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"trash",content:"Clear",onClick:function(){return a("Status",{statdisp:"blank"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"clock",content:"Evac ETA",onClick:function(){return a("Status",{statdisp:"shuttle"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"edit",content:"Message",onClick:function(){return a("Status",{statdisp:"message"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"exclamation-triangle",content:"Red Alert",onClick:function(){return a("Status",{statdisp:"alert",alert:"redalert"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"boxes",content:"NT Logo",onClick:function(){return a("Status",{statdisp:"alert",alert:"default"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"lock",content:"Lockdown",onClick:function(){return a("Status",{statdisp:"alert",alert:"lockdown"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"biohazard",content:"Biohazard",onClick:function(){return a("Status",{statdisp:"alert",alert:"biohazard"})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message line 1",children:(0,o.createComponentVNode)(2,i.Button,{content:c.message1+" (set)",icon:"pen",onClick:function(){return a("Status",{statdisp:"setmsg1"})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message line 2",children:(0,o.createComponentVNode)(2,i.Button,{content:c.message2+" (set)",icon:"pen",onClick:function(){return a("Status",{statdisp:"setmsg2"})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_supplyrecords=void 0;var o=n(0),r=n(1),i=n(2);t.pda_supplyrecords=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.supply),c=a.shuttle_loc,l=a.shuttle_time,s=a.shuttle_moving,d=a.approved,u=a.approved_count,p=a.requests,m=a.requests_count;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Status",children:s?(0,o.createComponentVNode)(2,i.Box,{children:["In transit ",l]}):(0,o.createComponentVNode)(2,i.Box,{children:c})})}),(0,o.createComponentVNode)(2,i.Section,{mt:1,title:"Requested Orders",children:m>0&&p.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:["#",e.Number,' - "',e.Name,'" for "',e.OrderedBy,'"']},e)}))}),(0,o.createComponentVNode)(2,i.Section,{title:"Approved Orders",children:u>0&&d.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:["#",e.Number,' - "',e.Name,'" for "',e.ApprovedBy,'"']},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.PDAColorRow=t.PDAPainter=void 0;var o=n(0),r=n(1),i=n(3),a=n(2);t.PDAPainter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.statusLabel,u=s.pdaTypes,p=s.hasPDA,m=s.pdaIcon,h=s.pdaOwnerName,f=s.pdaJobName;return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{spacing:1,direction:"row",height:"100%",flex:"1",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:24,shrink:0,children:[(0,o.createComponentVNode)(2,a.Section,{title:"\u041e\u0431\u0449\u0435\u0435",buttons:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:p?"eject":"exclamation-triangle",selected:p,content:p?"\u0418\u0437\u0432\u043b\u0435\u0447\u044c":"-----",tooltip:p?"\u0418\u0437\u0432\u043b\u0435\u0447\u044c PDA":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c PDA",tooltipPosition:"left",onClick:function(){return l(p?"eject_pda":"insert_pda")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0418\u043c\u044f",children:h||"\u041d/\u0414"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c",children:f||"\u041d/\u0414"})]})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",flex:"1",children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Box,{as:"img",height:"160px",src:p?"data:image/png;base64,"+m:"",style:{"-ms-interpolation-mode":"nearest-neighbor"},align:"middle"})}),(0,o.createComponentVNode)(2,a.LabeledList,{m:"5px",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0421\u0442\u0430\u0442\u0443\u0441",children:d})}),(0,o.createComponentVNode)(2,a.Button.Confirm,{m:"5px",fluid:!0,disabled:!p,content:"\u0421\u0442\u0435\u0440\u0435\u0442\u044c PDA",confirmContent:"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c?",textAlign:"left",color:"red",tooltip:"C\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 \u0437\u0430\u0432\u043e\u0434\u0441\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438",tooltipPosition:"top",onClick:function(){return l("erase_pda")}})]})})})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:27,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",flex:"1",children:(0,o.createComponentVNode)(2,a.Section,{title:"\u0426\u0432\u0435\u0442 PDA",flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Table,{children:Object.keys(u).map((function(e){return(0,o.createComponentVNode)(2,c,{selectedPda:e,selectedPdaImage:u[e][0]},e)}))})})})})]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.hasPDA,l=e.selectedPda,s=e.selectedPdaImage;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/png;base64,"+s,style:{"vertical-align":"middle",width:"32px",margin:"0px","margin-left":"0px"}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:(0,o.createComponentVNode)(2,a.Button.Confirm,{fluid:!0,disabled:!c,icon:s,content:l,confirmContent:"\u041f\u043e\u043a\u0440\u0430\u0441\u0438\u0442\u044c?",textAlign:"left",onClick:function(){return i("choose_pda",{selectedPda:l,selectedPdaImage:s})}})})]})};t.PDAColorRow=c},function(e,t,n){"use strict";t.__esModule=!0,t.Pacman=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(103);t.Pacman=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.broken,u=s.anchored,p=s.active,m=s.fuel_type,h=s.fuel_usage,f=s.fuel_stored,C=s.fuel_cap,g=s.is_ai,N=s.tmp_current,b=s.tmp_max,V=s.tmp_overheat,v=s.output_max,x=s.power_gen,y=s.output_set,k=s.has_fuel,w=f/C,_=N/b,B=y*x,S=Math.round(f/h),L=Math.round(S/60),A=S>120?L+" minutes":S+" seconds";return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(d||!u)&&(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:[!!d&&(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"The generator is malfunctioning!"}),!d&&!u&&(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"The generator needs to be anchored to the floor with a wrench."})]}),!d&&!!u&&(0,o.createVNode)(1,"div",null,[(0,o.createComponentVNode)(2,i.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:p?"power-off":"times",content:p?"On":"Off",tooltip:"Toggles the generator on/off. Requires fuel.",tooltipPosition:"left",disabled:!k,selected:p,onClick:function(){return l("toggle_power")}}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",className:"ml-1",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power setting",children:[(0,o.createComponentVNode)(2,i.NumberInput,{value:y,minValue:1,maxValue:v,step:1,className:"mt-1",onDrag:function(e,t){return l("change_power",{change_power:t})}}),"(",(0,c.formatPower)(B),")"]})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:_,ranges:{green:[-Infinity,.33],orange:[.33,.66],red:[.66,Infinity]},children:[N," \u2103"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[V>50&&(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"CRITICAL OVERHEAT!"}),V>20&&V<=50&&(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"WARNING: Overheating!"}),V>1&&V<=20&&(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"Temperature High"}),0===V&&(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Optimal"})]})]})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Fuel",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Eject Fuel",tooltip:"Ejects fuel. Generator needs to be offline.",tooltipPosition:"left",disabled:p||g||!k,onClick:function(){return l("eject_fuel")}}),children:(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Type",children:m}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fuel level",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:w,ranges:{red:[-Infinity,.33],orange:[.33,.66],green:[.66,Infinity]},children:[Math.round(f/1e3)," dm\xb3"]})})]})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fuel usage",children:[h/1e3," dm\xb3/s"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fuel depletion",children:[!!k&&(h?A:"N/A"),!k&&(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3);t.PersonalCrafting=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data,u=d.busy,p=d.category,m=d.display_craftable_only,h=d.display_compact,f=d.prev_cat,C=d.next_cat,g=d.subcategory,N=d.prev_subcat,b=d.next_subcat;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!!u&&(0,o.createComponentVNode)(2,i.Dimmer,{fontSize:"32px",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"cog",spin:1})," Crafting..."]}),(0,o.createComponentVNode)(2,i.Section,{title:p,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Show Craftable Only",icon:m?"check-square-o":"square-o",selected:m,onClick:function(){return s("toggle_recipes")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Compact Mode",icon:h?"check-square-o":"square-o",selected:h,onClick:function(){return s("toggle_compact")}})],4),children:[(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:f,icon:"arrow-left",onClick:function(){return s("backwardCat")}}),(0,o.createComponentVNode)(2,i.Button,{content:C,icon:"arrow-right",onClick:function(){return s("forwardCat")}})]}),g&&(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:N,icon:"arrow-left",onClick:function(){return s("backwardSubCat")}}),(0,o.createComponentVNode)(2,i.Button,{content:b,icon:"arrow-right",onClick:function(){return s("forwardSubCat")}})]}),h?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,l)]})]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.display_craftable_only,s=c.can_craft,d=c.cant_craft;return(0,o.createComponentVNode)(2,i.Box,{mt:1,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[s.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",content:"Craft",onClick:function(){return a("make",{make:e.ref})}}),e.catalyst_text&&(0,o.createComponentVNode)(2,i.Button,{tooltip:e.catalyst_text,content:"Catalysts",color:"transparent"}),(0,o.createComponentVNode)(2,i.Button,{tooltip:e.req_text,content:"Requirements",color:"transparent"}),e.tool_text&&(0,o.createComponentVNode)(2,i.Button,{tooltip:e.tool_text,content:"Tools",color:"transparent"})]},e.name)})),!l&&d.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",content:"Craft",disabled:!0}),e.catalyst_text&&(0,o.createComponentVNode)(2,i.Button,{tooltip:e.catalyst_text,content:"Catalysts",color:"transparent"}),(0,o.createComponentVNode)(2,i.Button,{tooltip:e.req_text,content:"Requirements",color:"transparent"}),e.tool_text&&(0,o.createComponentVNode)(2,i.Button,{tooltip:e.tool_text,content:"Tools",color:"transparent"})]},e.name)}))]})})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.display_craftable_only,s=c.can_craft,d=c.cant_craft;return(0,o.createComponentVNode)(2,i.Box,{mt:1,children:[s.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",content:"Craft",onClick:function(){return a("make",{make:e.ref})}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[e.catalyst_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Catalysts",children:e.catalyst_text}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Requirements",children:e.req_text}),e.tool_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)})),!l&&d.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",content:"Craft",disabled:!0}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[e.catalyst_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Catalysts",children:e.catalyst_text}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Requirements",children:e.req_text}),e.tool_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Photocopier=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(24);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 s(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 s(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 s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);ne?this.substring(0,e)+"...":this};t.Photocopier=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data;"mode_aipic"!==d.mode||d.isAI||s("mode_copy");for(var u,p,m=(0,c.sortBy)((function(e){return e.category}))(d.forms||[]),h=[],f=l(m);!(u=f()).done;){var C=u.value;h.includes(C.category)||h.push(C.category)}return p=""===d.category?m:m.filter((function(e){return e.category===d.category})),(0,o.createComponentVNode)(2,a.Window,{theme:d.ui_theme,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",spacing:1,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:24,shrink:0,children:[(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,m:1,children:"\u0421\u0442\u0430\u0442\u0443\u0441"}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0417\u0430\u0440\u044f\u0434 \u0442\u043e\u043d\u0435\u0440\u0430",color:d.toner>0?"good":"bad",children:d.toner}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0421\u043b\u043e\u0442 \u0441\u043a\u0430\u043d\u0435\u0440\u0430",children:(0,o.createComponentVNode)(2,i.Button,{icon:"sign-out-alt",disabled:d.isAI||null===d.copyitem,content:"\u0418\u0437\u0432\u043b\u0435\u0447\u044c",onClick:function(){return s("remove")}})})]}),(0,o.createComponentVNode)(2,i.Box,{bold:!0,m:1,children:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435"}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e",children:[d.copies,(0,o.createComponentVNode)(2,i.Button,{icon:"minus",ml:2,disabled:!(d.copies>1),onClick:function(){return s("min")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"plus",disabled:!(d.copies<=d.toner),onClick:function(){return s("add")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0420\u0435\u0436\u0438\u043c",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"clone",disabled:0===d.toner,content:"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",selected:"mode_copy"===d.mode?"selected":null,onClick:function(){return s("mode_copy")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"file",disabled:0===d.toner,content:"\u041f\u0435\u0447\u0430\u0442\u044c",selected:"mode_print"===d.mode?"selected":null,onClick:function(){return s("mode_print")}}),!!d.isAI&&(0,o.createComponentVNode)(2,i.Button,{icon:"terminal",disabled:0===d.toner,content:"\u0424\u043e\u0442\u043e \u0438\u0437 \u0414\u0411",selected:"mode_aipic"===d.mode?"selected":null,onClick:function(){return s("mode_aipic")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c",children:["mode_copy"===d.mode&&(0,o.createComponentVNode)(2,i.Button,{icon:"print",disabled:0===d.toner||null===d.copyitem&&!d.ass,content:"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c",onClick:function(){return s("copy")}}),"mode_print"===d.mode&&(0,o.createComponentVNode)(2,i.Button,{icon:"print",disabled:0===d.toner||null===d.form,content:"\u041f\u0435\u0447\u0430\u0442\u044c",onClick:function(){return s("print_form")}}),"mode_aipic"===d.mode&&(0,o.createComponentVNode)(2,i.Button,{icon:"print",disabled:0===d.toner,content:"\u041f\u0435\u0447\u0430\u0442\u044c \u0444\u043e\u0442\u043e",onClick:function(){return s("aipic")}})]})]})]}),(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,m:1,children:"\u0411\u044e\u0440\u043e\u043a\u0440\u0430\u0442\u0438\u044f"}),(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0424\u043e\u0440\u043c\u0430",children:""===d.form_id?"\u041d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u0430":d.form_id})}),(0,o.createComponentVNode)(2,i.Flex,{direction:"column",mt:2,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"chevron-right",content:"\u0412\u0441\u0435 \u0444\u043e\u0440\u043c\u044b",selected:""===d.category?"selected":null,onClick:function(){return s("choose_category",{category:null})},mb:1})}),h.map((function(e){return(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"chevron-right",content:e,selected:d.category===e?"selected":null,onClick:function(){return s("choose_category",{category:e})},mb:1},e)},e)}))]})]}),(0,o.createComponentVNode)(2,i.NoticeBox,{color:d.info_box_color,children:d.info_box})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:27,children:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,m:1,children:""===d.category?"\u0412\u0441\u0435 \u0444\u043e\u0440\u043c\u044b":d.category}),(0,o.createComponentVNode)(2,i.Flex,{direction:"column",mt:2,children:p.map((function(e){return(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,content:e.id+": "+e.altername.trimLongStr(30),tooltip:e.id+": "+e.altername,selected:d.form===e.path?"selected":null,onClick:function(){return s("choose_form",{path:e.path,id:e.id})},mb:1},e.path)},e.path)}))})]})})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PodTracking=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.PodTracking=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.pods);return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:c.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Position",children:[e.podx,", ",e.pody,", ",e.podz]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pilot",children:e.pilot}),(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3);var c={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,a=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["tempKey"]),l=c[n];if(!l)return null;var s=(0,r.useBackend)(t),d=s.data,u=s.act,p=d.currentTemp,m=l.label,h=l.icon,f=n===p;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({selected:f,onClick:function(){u("setTemp",{temp:n})}},a,{children:[(0,o.createComponentVNode)(2,i.Icon,{name:h}),m]})))};t.PoolController=function(e,t){for(var n=(0,r.useBackend)(t).data,s=n.emagged,d=n.currentTemp,u=c[d]||c.normal,p=u.label,m=u.color,h=[],f=0,C=Object.entries(c);f1100?"purple":e>500?"orange":e>250?"yellow":"green"}(d.reward,p);return(0,o.createComponentVNode)(2,i.Section,{title:"Order from "+d.target_departament,className:"QuestConsoleSection QuestConsoleSection--"+h+" "+(a===d.ref&&"QuestConsoleSection--dimmed")+" "+(d.active&&"QuestConsoleSection--active"),height:"100%",stretchContents:!0,position:"relative",overflow:"clip",onClick:function(){return c(a!==d.ref?d.ref:-1)},children:[!d.fast_bonus||(0,o.createComponentVNode)(2,u,{color:h}),(0,o.createComponentVNode)(2,i.Flex,{className:"QuestConsoleSection__content",direction:"column",height:"calc(100% - 33px)",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Table,{children:l(d.quests_items,(function(e,t,n){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{width:"50%",children:(0,o.createComponentVNode)(2,m,{task:e})}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"50%",children:t?(0,o.createComponentVNode)(2,m,{task:t}):(0,o.createComponentVNode)(2,i.Box)})]},n)}))})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:1}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Table,{children:(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Box,{fontSize:1.15,children:[(0,o.createVNode)(1,"b",null,"PROFIT:",16)," +",d.reward," ",p?"credits":"points"]})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createVNode)(1,"b",null,"Time left:",16)," ",d.timer]})})]})})})]}),a!==d.ref||(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{fillPositionedParent:!0,backgroundColor:"black",opacity:"0.5",style:{"z-index":"1"}}),d.active?(0,o.createComponentVNode)(2,i.Box,{position:"absolute",top:"50%",left:"50%",textAlign:"center",style:{"z-index":"2",transform:"translate(-50%, -50%)"},children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,fontSize:1.3,children:"The order is already being processed"}),(0,o.createComponentVNode)(2,i.Button,{mt:2,icon:"print",color:"blue",fontSize:1.2,py:1,px:2,onClick:function(){return s("print_order",{uid:d.ref})},children:"Print"})]}):(0,o.createComponentVNode)(2,i.Box,{position:"absolute",top:"50%",left:"50%",textAlign:"center",style:{"z-index":"2",transform:"translate(-50%, -50%)"},children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,fontSize:1.3,mb:2,children:"Choose an option:"}),(0,o.createComponentVNode)(2,i.Button,{icon:"check",color:"green",fontSize:1.2,py:1,px:2,onClick:function(){return s("activate",{uid:d.ref})},children:"Take"}),(0,o.createComponentVNode)(2,i.Button,{ml:2,icon:"undo",color:"blue",fontSize:1.2,py:1,px:2,onClick:function(){return s("denied",{uid:d.ref})},children:"Reroll"})]})],0)]})},m=function(e){var t=e.task;return(0,o.createComponentVNode)(2,i.Flex,{align:"center",position:"relative",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"42px",mr:1,children:(0,o.createComponentVNode)(2,i.Box,{position:"relative",children:[(0,o.createComponentVNode)(2,i.Tooltip,{position:"right",content:"Send "+(null==t?void 0:t.quest_type_name)}),(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+(null==t?void 0:t.image),style:{"-ms-interpolation-mode":"nearest-neighbor","vertical-align":"middle",width:"42px",margin:"0px"}})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{style:{"max-width":"180px","white-space":"pre"},children:(0,c.decodeHtmlEntities)(t.desc)})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RCD=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(44),l=n(102);t.RCD=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,c.ComplexModal),(0,o.createComponentVNode)(2,a.Window.Content,{display:"flex",className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})]})};var s=function(e,t){var n=(0,r.useBackend)(t).data,a=n.matter,c=n.max_matter,l=.7*c,s=.25*c;return(0,o.createComponentVNode)(2,i.Section,{title:"Matter Storage",flexBasis:"content",children:(0,o.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[l,Infinity],average:[s,l],bad:[-Infinity,s]},value:a,maxValue:c,children:(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",children:a+" / "+c+" units"})})})},d=function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Construction Type",flexBasis:"content",children:(0,o.createComponentVNode)(2,i.Flex,{children:(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,u,{mode_type:"Floors and Walls"}),(0,o.createComponentVNode)(2,u,{mode_type:"Airlocks"}),(0,o.createComponentVNode)(2,u,{mode_type:"Windows"}),(0,o.createComponentVNode)(2,u,{mode_type:"Deconstruction"}),(0,o.createComponentVNode)(2,u,{mode_type:"Firelocks"})]})})})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=e.mode_type,s=c.mode;return(0,o.createComponentVNode)(2,i.Button.Checkbox,{content:l,checked:s===l?1:0,onClick:function(){return a("mode",{mode:l})}})},p=function(e,t){var n=(0,r.useBackend)(t).data.door_name;return(0,o.createComponentVNode)(2,i.Section,{title:"Airlock Settings",flexBasis:"content",height:5.5,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:"silver",label:"Name",children:[n,(0,o.createComponentVNode)(2,i.Button,{ml:2.5,icon:"pen-alt",content:"Edit",onClick:function(){return(0,c.modalOpen)(t,"renameAirlock")}})]})})})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,s=c.tab,d=c.locked,u=c.one_access,p=c.selected_accesses,m=c.regions;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{content:"Airlock Types",icon:"cog",selected:1===s,onClick:function(){return a("set_tab",{tab:1})}}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===s,content:"Airlock Access",icon:"list",onClick:function(){return a("set_tab",{tab:2})}})]}),1===s?(0,o.createComponentVNode)(2,i.Section,{title:"Types",flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",mr:1,children:(0,o.createComponentVNode)(2,h,{check_number:0})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,h,{check_number:1})})]})}):2===s&&d?(0,o.createComponentVNode)(2,i.Section,{title:"Access",flexGrow:"1",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"lock-open",content:"Unlock",onClick:function(){return a("set_lock",{new_lock:"unlock"})}}),children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",textAlign:"center",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"lock",size:"5",mb:3}),(0,o.createVNode)(1,"br"),"Airlock access selection is currently locked."]})})}):(0,o.createComponentVNode)(2,l.AccessList,{sectionFlexGrow:"1",sectionButtons:(0,o.createComponentVNode)(2,i.Button,{icon:"lock",content:"Lock",onClick:function(){return a("set_lock",{new_lock:"lock"})}}),usedByRcd:1,rcdButtons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:u,content:"One",onClick:function(){return a("set_one_access",{access:"one"})}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:!u,width:4,content:"All",onClick:function(){return a("set_one_access",{access:"all"})}})],4),accesses:m,selectedList:p,accessMod:function(e){return a("set",{access:e})},grantAll:function(){return a("grant_all")},denyAll:function(){return a("clear_all")},grantDep:function(e){return a("grant_region",{region:e})},denyDep:function(e){return a("deny_region",{region:e})}})],0)},h=function(e,t){for(var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.door_types_ui_list,s=c.door_type,d=e.check_number,u=[],p=0;p0?"envelope-open-text":"envelope",onClick:function(){return c("setScreen",{setScreen:6})}})}),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:[(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Request Assistance",icon:"hand-paper",onClick:function(){return c("setScreen",{setScreen:1})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Request Supplies",icon:"box",onClick:function(){return c("setScreen",{setScreen:2})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Relay Anonymous Information",icon:"comment",onClick:function(){return c("setScreen",{setScreen:3})}})})]}),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:[(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Print Shipping Label",icon:"tag",onClick:function(){return c("setScreen",{setScreen:9})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"View Shipping Logs",icon:"clipboard-list",onClick:function(){return c("setScreen",{setScreen:10})}})})]}),!!d&&(0,o.createComponentVNode)(2,i.Box,{mt:2,children:(0,o.createComponentVNode)(2,i.Button,{content:"Send Station-Wide Announcement",icon:"bullhorn",onClick:function(){return c("setScreen",{setScreen:8})}})}),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:(0,o.createComponentVNode)(2,i.Button,{content:u?"Speaker Off":"Speaker On",selected:!u,icon:u?"volume-mute":"volume-up",onClick:function(){return c("toggleSilent")}})})]})},l=function(e,t){var n,a,c=(0,r.useBackend)(t),l=c.act,s=c.data,d=s.department;switch(e.purpose){case"ASSISTANCE":n=s.assist_dept,a="Request assistance from another department";break;case"SUPPLIES":n=s.supply_dept,a="Request supplies from another department";break;case"INFO":n=s.info_dept,a="Relay information to another department"}return(0,o.createComponentVNode)(2,i.Section,{title:a,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return l("setScreen",{setScreen:0})}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:n.filter((function(e){return e!==d})).map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e,children:[(0,o.createComponentVNode)(2,i.Button,{content:"Message",icon:"envelope",onClick:function(){return l("writeInput",{write:e,priority:1})}}),(0,o.createComponentVNode)(2,i.Button,{content:"High Priority",icon:"exclamation-circle",onClick:function(){return l("writeInput",{write:e,priority:2})}})]},e)}))})})},s=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act;a.data;switch(e.type){case"SUCCESS":n="Message sent successfully";break;case"FAIL":n="Request supplies from another department"}return(0,o.createComponentVNode)(2,i.Section,{title:n,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return c("setScreen",{setScreen:0})}})})},d=function(e,t){var n,a,c=(0,r.useBackend)(t),l=c.act,s=c.data;switch(e.type){case"MESSAGES":n=s.message_log,a="Message Log";break;case"SHIPPING":n=s.shipping_log,a="Shipping label print log"}return(0,o.createComponentVNode)(2,i.Section,{title:a,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return l("setScreen",{setScreen:0})}}),children:n.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{className:"RequestConsole__message",children:e},e)}))})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.recipient,s=c.message,d=c.msgVerified,u=c.msgStamped;return(0,o.createComponentVNode)(2,i.Section,{title:"Message Authentication",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return a("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Recipient",children:l}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message",children:s}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Validated by",color:"green",children:d}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stamped by",color:"blue",children:u})]}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,mt:1,textAlign:"center",content:"Send Message",icon:"envelope",onClick:function(){return a("department",{department:l})}})]})},p=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.message,s=c.announceAuth;return(0,o.createComponentVNode)(2,i.Section,{title:"Station-Wide Announcement",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return a("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,i.Button,{content:l||"Edit Message",icon:"edit",onClick:function(){return a("writeAnnouncement")}}),s?(0,o.createComponentVNode)(2,i.Box,{mt:1,color:"green",children:"ID verified. Authentication accepted."}):(0,o.createComponentVNode)(2,i.Box,{mt:1,children:"Swipe your ID card to authenticate yourself."}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,mt:1,textAlign:"center",content:"Send Announcement",icon:"bullhorn",disabled:!(s&&l),onClick:function(){return a("sendAnnouncement")}})]})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.shipDest,s=c.msgVerified,d=c.ship_dept;return(0,o.createComponentVNode)(2,i.Section,{title:"Print Shipping Label",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return a("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Destination",children:l}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Validated by",children:s})]}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,mt:1,textAlign:"center",content:"Print Label",icon:"print",disabled:!(l&&s),onClick:function(){return a("printLabel")}}),(0,o.createComponentVNode)(2,i.Section,{title:"Destinations",mt:1,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:d.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e,children:(0,o.createComponentVNode)(2,i.Button,{content:l===e?"Selected":"Select",selected:l===e,onClick:function(){return a("shipSelect",{shipSelect:e})}})},e)}))})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RequestManager=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(3);t.RequestManager=function(e,t){var n=(0,i.useBackend)(t),u=(n.act,n.data.requests),p=(0,i.useLocalState)(t,"filteredTypes",Object.fromEntries(Object.entries(l).map((function(e){var t=e[0];e[1];return[t,!0]})))),m=p[0],h=(p[1],(0,i.useLocalState)(t,"searchText")),f=h[0],C=h[1],g=u.filter((function(e){return m[e.req_type]}));if(f){var N=f.toLowerCase();g=g.filter((function(e){return(0,r.decodeHtmlEntities)(e.message).toLowerCase().includes(N)||e.owner_name.toLowerCase().includes(N)}))}return(0,o.createComponentVNode)(2,c.Window,{title:"Request Manager",width:575,height:600,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Requests",buttons:(0,o.createComponentVNode)(2,a.Input,{value:f,onInput:function(e,t){return C(t)},placeholder:"Search...",mr:1}),children:g.map((function(e){return(0,o.createVNode)(1,"div","RequestManager__row",[(0,o.createVNode)(1,"div","RequestManager__rowContents",[(0,o.createVNode)(1,"h2","RequestManager__header",[(0,o.createVNode)(1,"span","RequestManager__headerText",[e.owner_name,null===e.owner&&" [DC]"],0),(0,o.createVNode)(1,"span","RequestManager__timestamp",e.timestamp_str,0)],4),(0,o.createVNode)(1,"div","RequestManager__message",[(0,o.createComponentVNode)(2,s,{requestType:e.req_type}),(0,r.decodeHtmlEntities)(e.message)],0)],4),null!==e.owner&&(0,o.createComponentVNode)(2,d,{request:e})],0,null,e.id)}))})})})};var l={request_prayer:"PRAYER",request_centcom:"CENTCOM",request_syndicate:"SYNDICATE",request_honk:"HONK",request_ert:"ERT",request_nuke:"NUKE CODE"},s=function(e){var t=e.requestType;return(0,o.createVNode)(1,"b","RequestManager__"+t,[l[t],(0,o.createTextVNode)(":")],0)},d=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=(n._,e.request);return(0,o.createVNode)(1,"div","RequestManager__controlsContainer",[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("pp",{id:c.id})},children:"PP"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("vv",{id:c.id})},children:"VV"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("sm",{id:c.id})},children:"SM"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("tp",{id:c.id})},children:"TP"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("logs",{id:c.id})},children:"LOGS"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("bless",{id:c.id})},children:"BLESS"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("smite",{id:c.id})},children:"SMITE"}),"request_prayer"!==c.req_type&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("rply",{id:c.id})},children:"RPLY"}),"request_ert"===c.req_type&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("ertreply",{id:c.id})},children:"ERTREPLY"}),"request_nuke"===c.req_type&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("getcode",{id:c.id})},children:"GETCODE"})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.CurrentLevels=void 0;var o=n(0),r=n(1),i=n(2);t.CurrentLevels=function(e,t){var n=(0,r.useBackend)(t).data.tech_levels;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createVNode)(1,"h3",null,"Current Research Levels:",16),n.map((function(e,t){var n=e.name,r=e.level,a=e.desc;return(0,o.createComponentVNode)(2,i.Box,{children:[t>0?(0,o.createComponentVNode)(2,i.Divider):null,(0,o.createComponentVNode)(2,i.Box,{children:n}),(0,o.createComponentVNode)(2,i.Box,{children:["* Level: ",r]}),(0,o.createComponentVNode)(2,i.Box,{children:["* Summary: ",a]})]},n)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.DataDiskMenu=void 0;var o=n(0),r=n(1),i=n(2),a=n(53),c=n(67),l=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.disk_data;return l?(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:l.name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:l.level}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:l.desc})]}),(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Upload to Database",icon:"arrow-up",onClick:function(){return c("updt_tech")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Clear Disk",icon:"trash",onClick:function(){return c("clear_tech")}}),(0,o.createComponentVNode)(2,u)]})]}):null},s=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.disk_data;if(!l)return null;var s=l.name,d=l.lathe_types,p=l.materials,m=d.join(", ");return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:s}),m?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Lathe Types",children:m}):null,(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Required Materials"})]}),p.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:["- ",(0,o.createVNode)(1,"span",null,e.name,0,{style:{"text-transform":"capitalize"}})," x ",e.amount]},e.name)})),(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Upload to Database",icon:"arrow-up",onClick:function(){return c("updt_design")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Clear Disk",icon:"trash",onClick:function(){return c("clear_design")}}),(0,o.createComponentVNode)(2,u)]})]})},d=function(e,t){var n=(0,r.useBackend)(t).data.disk_type;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{children:"This disk is empty."}),(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,a.RndNavButton,{submenu:c.SUBMENU.DISK_COPY,icon:"arrow-down",content:"tech"===n?"Load Tech to Disk":"Load Design to Disk"}),(0,o.createComponentVNode)(2,u)]})]})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.disk_type;return l?(0,o.createComponentVNode)(2,i.Button,{content:"Eject Disk",icon:"eject",onClick:function(){c("tech"===l?"eject_tech":"eject_design")}}):null},p=function(e,t){var n=(0,r.useBackend)(t).data,a=n.disk_data,c=n.disk_type;return(0,o.createComponentVNode)(2,i.Section,{title:"Data Disk Contents",children:function(){if(!a)return(0,o.createComponentVNode)(2,d);switch(c){case"design":return(0,o.createComponentVNode)(2,s);case"tech":return(0,o.createComponentVNode)(2,l);default:return null}}()})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.disk_type,s=a.to_copy;return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Box,{overflowY:"auto",overflowX:"hidden",maxHeight:"450px",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:s.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,i.LabeledList.Item,{noColon:!0,label:t,children:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",content:"Copy to Disk",onClick:function(){c("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,a.RndRoute,{submenu:c.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,p)}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:c.SUBMENU.DISK_COPY,render:function(){return(0,o.createComponentVNode)(2,m)}})],4):null}},function(e,t,n){"use strict";t.__esModule=!0,t.DeconstructionMenu=void 0;var o=n(0),r=n(1),i=n(2);t.DeconstructionMenu=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.loaded_item;return a.linked_destroy?l?(0,o.createComponentVNode)(2,i.Section,{noTopPadding:!0,title:"Deconstruction Menu",children:[(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:["Name: ",l.name]}),(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:(0,o.createVNode)(1,"h3",null,"Origin Tech:",16)}),(0,o.createComponentVNode)(2,i.LabeledList,{children:l.origin_tech.map((function(e){return(0,o.createComponentVNode)(2,i.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,i.Box,{mt:"10px",children:(0,o.createVNode)(1,"h3",null,"Options:",16)}),(0,o.createComponentVNode)(2,i.Button,{content:"Deconstruct Item",icon:"unlink",onClick:function(){c("deconstruct")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Eject Item",icon:"eject",onClick:function(){c("eject_item")}})]}):(0,o.createComponentVNode)(2,i.Section,{title:"Deconstruction Menu",children:"No item loaded. Standing by..."}):(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(53);t.LatheCategory=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,s=c.category,d=c.matching_designs,u=4===c.menu?"build":"imprint";return(0,o.createComponentVNode)(2,i.Section,{title:s,children:[(0,o.createComponentVNode)(2,a.LatheMaterials),(0,o.createComponentVNode)(2,i.Table,{className:"RndConsole__LatheCategory__MatchingDesigns",children:d.map((function(e){var t=e.id,n=e.name,r=e.can_build,a=e.materials;return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"print",content:n,disabled:r<1,onClick:function(){return l(u,{id:t,amount:1})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:r>=5?(0,o.createComponentVNode)(2,i.Button,{content:"x5",onClick:function(){return l(u,{id:t,amount:5})}}):null}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:r>=10?(0,o.createComponentVNode)(2,i.Button,{content:"x10",onClick:function(){return l(u,{id:t,amount:10})}}):null}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:a.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),i=n(2);t.LatheChemicalStorage=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.loaded_chemicals,s=4===a.menu;return(0,o.createComponentVNode)(2,i.Section,{title:"Chemical Storage",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Purge All",icon:"trash",onClick:function(){c(s?"disposeallP":"disposeallI")}}),(0,o.createComponentVNode)(2,i.LabeledList,{children:l.map((function(e){var t=e.volume,n=e.name,r=e.id;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"* "+t+" of "+n,children:(0,o.createComponentVNode)(2,i.Button,{content:"Purge",icon:"trash",onClick:function(){c(s?"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),i=n(2),a=n(53);t.LatheMainMenu=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,s=c.menu,d=c.categories,u=4===s?"Protolathe":"Circuit Imprinter";return(0,o.createComponentVNode)(2,i.Section,{title:u+" Menu",children:[(0,o.createComponentVNode)(2,a.LatheMaterials),(0,o.createComponentVNode)(2,a.LatheSearch),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Flex,{wrap:"wrap",children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Flex,{style:{"flex-basis":"50%","margin-bottom":"6px"},children:(0,o.createComponentVNode)(2,i.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),i=n(2);t.LatheMaterials=function(e,t){var n=(0,r.useBackend)(t).data,a=n.total_materials,c=n.max_materials,l=n.max_chemicals,s=n.total_chemicals;return(0,o.createComponentVNode)(2,i.Box,{className:"RndConsole__LatheMaterials",mb:"10px",children:(0,o.createComponentVNode)(2,i.Table,{width:"auto",children:[(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Material Amount:"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:a}),c?(0,o.createComponentVNode)(2,i.Table.Cell,{children:" / "+c}):null]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Chemical Amount:"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:s}),l?(0,o.createComponentVNode)(2,i.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),i=n(2);t.LatheMaterialStorage=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.loaded_materials;return(0,o.createComponentVNode)(2,i.Section,{className:"RndConsole__LatheMaterialStorage",title:"Material Storage",children:(0,o.createComponentVNode)(2,i.Table,{children:l.map((function(e){var t=e.id,n=e.amount,r=e.name,l=function(e){var n=4===a.menu?"lathe_ejectsheet":"imprinter_ejectsheet";c(n,{id:t,amount:e})},s=Math.floor(n/2e3),d=n<1,u=1===s?"":"s";return(0,o.createComponentVNode)(2,i.Table.Row,{className:d?"color-grey":"color-yellow",children:[(0,o.createComponentVNode)(2,i.Table.Cell,{minWidth:"210px",children:["* ",n," of ",r]}),(0,o.createComponentVNode)(2,i.Table.Cell,{minWidth:"110px",children:["(",s," sheet",u,")"]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:n>=2e3?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"1x",icon:"eject",onClick:function(){return l(1)}}),(0,o.createComponentVNode)(2,i.Button,{content:"C",icon:"eject",onClick:function(){return l("custom")}}),n>=1e4?(0,o.createComponentVNode)(2,i.Button,{content:"5x",icon:"eject",onClick:function(){return l(5)}}):null,(0,o.createComponentVNode)(2,i.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),i=n(199),a=n(53),c=n(2),l=n(67);t.LatheMenu=function(e,t){var n=(0,r.useBackend)(t).data,s=n.menu,d=n.linked_lathe,u=n.linked_imprinter;return 4!==s||d?5!==s||u?(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,i.RndRoute,{submenu:l.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,a.LatheMainMenu)}}),(0,o.createComponentVNode)(2,i.RndRoute,{submenu:l.SUBMENU.LATHE_CATEGORY,render:function(){return(0,o.createComponentVNode)(2,a.LatheCategory)}}),(0,o.createComponentVNode)(2,i.RndRoute,{submenu:l.SUBMENU.LATHE_MAT_STORAGE,render:function(){return(0,o.createComponentVNode)(2,a.LatheMaterialStorage)}}),(0,o.createComponentVNode)(2,i.RndRoute,{submenu:l.SUBMENU.LATHE_CHEM_STORAGE,render:function(){return(0,o.createComponentVNode)(2,a.LatheChemicalStorage)}})]}):(0,o.createComponentVNode)(2,c.Box,{children:"NO CIRCUIT IMPRITER LINKED TO CONSOLE"}):(0,o.createComponentVNode)(2,c.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),i=n(2);t.LatheSearch=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(53),c=n(67);t.MainMenu=function(e,t){var n=(0,r.useBackend)(t).data,l=n.disk_type,s=n.linked_destroy,d=n.linked_lathe,u=n.linked_imprinter,p=n.tech_levels;return(0,o.createComponentVNode)(2,i.Section,{title:"Main Menu",children:[(0,o.createComponentVNode)(2,i.Flex,{className:"RndConsole__MainMenu__Buttons",direction:"column",align:"flex-start",children:[(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!l,menu:c.MENU.DISK,submenu:c.SUBMENU.MAIN,icon:"save",content:"Disk Operations"}),(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!s,menu:c.MENU.DESTROY,submenu:c.SUBMENU.MAIN,icon:"unlink",content:"Destructive Analyzer Menu"}),(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!d,menu:c.MENU.LATHE,submenu:c.SUBMENU.MAIN,icon:"print",content:"Protolathe Menu"}),(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!u,menu:c.MENU.IMPRINTER,submenu:c.SUBMENU.MAIN,icon:"print",content:"Circuit Imprinter Menu"}),(0,o.createComponentVNode)(2,a.RndNavButton,{menu:c.MENU.SETTINGS,submenu:c.SUBMENU.MAIN,icon:"cog",content:"Settings"})]}),(0,o.createComponentVNode)(2,i.Box,{mt:"12px"}),(0,o.createVNode)(1,"h3",null,"Current Research Levels:",16),(0,o.createComponentVNode)(2,i.LabeledList,{children:p.map((function(e){var t=e.name,n=e.level;return(0,o.createComponentVNode)(2,i.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(53),i=n(2),a=n(67);t.RndNavbar=function(){return(0,o.createComponentVNode)(2,i.Box,{className:"RndConsole__RndNavbar",children:[(0,o.createComponentVNode)(2,r.RndRoute,{menu:function(e){return e!==a.MENU.MAIN},render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{menu:a.MENU.MAIN,submenu:a.SUBMENU.MAIN,icon:"reply",content:"Main Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{submenu:function(e){return e!==a.SUBMENU.MAIN},render:function(){return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,r.RndRoute,{menu:a.MENU.DISK,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.MAIN,icon:"reply",content:"Disk Operations Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:a.MENU.LATHE,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.MAIN,icon:"reply",content:"Protolathe Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:a.MENU.IMPRINTER,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.MAIN,icon:"reply",content:"Circuit Imprinter Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:a.MENU.SETTINGS,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.MAIN,icon:"reply",content:"Settings Menu"})}})]})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:function(e){return e===a.MENU.LATHE||e===a.MENU.IMPRINTER},submenu:a.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.LATHE_MAT_STORAGE,icon:"arrow-up",content:"Material Storage"}),(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.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),i=n(2);t.RndNavButton=function(e,t){var n=e.icon,a=e.children,c=e.disabled,l=e.content,s=(0,r.useBackend)(t),d=s.data,u=s.act,p=d.menu,m=d.submenu,h=p,f=m;return null!==e.menu&&e.menu!==undefined&&(h=e.menu),null!==e.submenu&&e.submenu!==undefined&&(f=e.submenu),(0,o.createComponentVNode)(2,i.Button,{content:l,icon:n,disabled:c,onClick:function(){u("nav",{menu:h,submenu:f})},children:a})}},function(e,t,n){"use strict";t.__esModule=!0,t.SettingsMenu=void 0;var o=n(0),r=n(1),i=n(2),a=n(53),c=n(67);t.SettingsMenu=function(e,t){var n=(0,r.useBackend)(t),l=n.data,s=n.act,d=l.sync,u=l.admin,p=l.linked_destroy,m=l.linked_lathe,h=l.linked_imprinter;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,a.RndRoute,{submenu:c.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Settings",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",align:"flex-start",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Sync Database with Network",icon:"sync",disabled:!d,onClick:function(){s("sync")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Connect to Research Network",icon:"plug",disabled:d,onClick:function(){s("togglesync")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d,icon:"unlink",content:"Disconnect from Research Network",onClick:function(){s("togglesync")}}),(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!d,content:"Device Linkage Menu",icon:"link",menu:c.MENU.SETTINGS,submenu:c.SUBMENU.SETTINGS_DEVICES}),1===u?(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation",content:"[ADMIN] Maximize Research Levels",onClick:function(){return s("maxresearch")}}):null]})})}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:c.SUBMENU.SETTINGS_DEVICES,render:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Device Linkage Menu",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"link",content:"Re-sync with Nearby Devices",onClick:function(){return s("find_device")}}),(0,o.createComponentVNode)(2,i.Box,{mt:"5px",children:(0,o.createVNode)(1,"h3",null,"Linked Devices:",16)}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[p?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"* Destructive Analyzer",children:(0,o.createComponentVNode)(2,i.Button,{icon:"unlink",content:"Unlink",onClick:function(){return s("disconnect",{item:"destroy"})}})}):(0,o.createComponentVNode)(2,i.LabeledList.Item,{noColon:!0,label:"* No Destructive Analyzer Linked"}),m?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"* Protolathe",children:(0,o.createComponentVNode)(2,i.Button,{icon:"unlink",content:"Unlink",onClick:function(){s("disconnect",{item:"lathe"})}})}):(0,o.createComponentVNode)(2,i.LabeledList.Item,{noColon:!0,label:"* No Protolathe Linked"}),h?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"* Circuit Imprinter",children:(0,o.createComponentVNode)(2,i.Button,{icon:"unlink",content:"Unlink",onClick:function(){return s("disconnect",{item:"imprinter"})}})}):(0,o.createComponentVNode)(2,i.LabeledList.Item,{noColon:!0,label:"* No Circuit Imprinter Linked"})]})]})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RobotSelfDiagnosis=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(18),l=function(e,t){var n=e/t;return n<=.2?"good":n<=.5?"average":"bad"};t.RobotSelfDiagnosis=function(e,t){var n=(0,r.useBackend)(t).data.component_data;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:n.map((function(e,t){return(0,o.createComponentVNode)(2,i.Section,{title:(0,c.capitalize)(e.name),children:e.installed<=0?(0,o.createComponentVNode)(2,i.NoticeBox,{m:-.5,height:3.5,color:"red",style:{"font-style":"normal"},children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,textAlign:"center",align:"center",color:"#e8e8e8",children:-1===e.installed?"Destroyed":"Missing"})})}):(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"72%",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Brute Damage",color:l(e.brute_damage,e.max_damage),children:e.brute_damage}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Burn Damage",color:l(e.electronic_damage,e.max_damage),children:e.electronic_damage})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Powered",color:e.powered?"good":"bad",children:e.powered?"Yes":"No"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Enabled",color:e.status?"good":"bad",children:e.status?"Yes":"No"})]})})]})},t)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.RoboticsControlConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.RoboticsControlConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.can_hack,u=s.safety,p=s.show_detonate_all,m=s.cyborgs,h=void 0===m?[]:m;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!!p&&(0,o.createComponentVNode)(2,i.Section,{title:"Emergency Self Destruct",children:[(0,o.createComponentVNode)(2,i.Button,{icon:u?"lock":"unlock",content:u?"Disable Safety":"Enable Safety",selected:u,onClick:function(){return l("arm",{})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"bomb",disabled:u,content:"Destroy ALL Cyborgs",color:"bad",onClick:function(){return l("nuke",{})}})]}),(0,o.createComponentVNode)(2,c,{cyborgs:h,can_hack:d})]})})};var c=function(e,t){var n=e.cyborgs,a=(e.can_hack,(0,r.useBackend)(t)),c=a.act,l=a.data;return n.length?n.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,buttons:(0,o.createFragment)([!!e.hackable&&!e.emagged&&(0,o.createComponentVNode)(2,i.Button,{icon:"terminal",content:"Hack",color:"bad",onClick:function(){return c("hackbot",{uid:e.uid})}}),(0,o.createComponentVNode)(2,i.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 c("stopbot",{uid:e.uid})}}),(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"bomb",content:"Detonate",disabled:!l.auth,color:"bad",onClick:function(){return c("killbot",{uid:e.uid})}})],0),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,i.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,i.LabeledList.Item,{label:"Location",children:(0,o.createComponentVNode)(2,i.Box,{children:e.locstring})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:e.health>50?"good":"bad",value:e.health/100})}),"number"==typeof e.charge&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cell Charge",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:e.charge>30?"good":"bad",value:e.charge/100})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cell Capacity",children:(0,o.createComponentVNode)(2,i.Box,{color:e.cell_capacity<3e4?"average":"good",children:e.cell_capacity})})],4)||(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cell",children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"No Power Cell"})}),!!e.is_hacked&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safeties",children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"DISABLED"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Module",children:e.module}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Master AI",children:(0,o.createComponentVNode)(2,i.Box,{color:e.synchronization?"default":"average",children:e.synchronization||"None"})})]})},e.uid)})):(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3);t.Safe=function(e,t){var n=(0,r.useBackend)(t),d=(n.act,n.data),u=d.dial,p=d.open;d.locked,d.contents;return(0,o.createComponentVNode)(2,a.Window,{theme:"safe",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Box,{className:"Safe--engraving",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{className:"Safe--engraving--hinge",top:"25%"}),(0,o.createComponentVNode)(2,i.Box,{className:"Safe--engraving--hinge",top:"75%"})]}),(0,o.createComponentVNode)(2,i.Icon,{className:"Safe--engraving--arrow",name:"long-arrow-alt-down",size:"3"}),(0,o.createVNode)(1,"br"),p?(0,o.createComponentVNode)(2,l):(0,o.createComponentVNode)(2,i.Box,{as:"img",className:"Safe--dial",src:"safe_dial.png",style:{transform:"rotate(-"+3.6*u+"deg)","z-index":0}})]}),!p&&(0,o.createComponentVNode)(2,s)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.dial,s=c.open,d=c.locked,u=function(e,t){return(0,o.createComponentVNode)(2,i.Button,{disabled:s||t&&!d,icon:"arrow-"+(t?"right":"left"),content:(t?"Right":"Left")+" "+e,iconRight:t,onClick:function(){return a(t?"turnleft":"turnright",{num:e})},style:{"z-index":10}})};return(0,o.createComponentVNode)(2,i.Box,{className:"Safe--dialer",children:[(0,o.createComponentVNode)(2,i.Button,{disabled:d,icon:s?"lock":"lock-open",content:s?"Close":"Open",mb:"0.5rem",onClick:function(){return a("open")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Box,{position:"absolute",children:[u(50),u(10),u(1)]}),(0,o.createComponentVNode)(2,i.Box,{className:"Safe--dialer--right",position:"absolute",right:"5px",children:[u(1,!0),u(10,!0),u(50,!0)]}),(0,o.createComponentVNode)(2,i.Box,{className:"Safe--dialer--number",children:l})]})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.contents;return(0,o.createComponentVNode)(2,i.Box,{className:"Safe--contents",overflow:"auto",children:c.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{mb:"0.5rem",onClick:function(){return a("retrieve",{index:t+1})},children:[(0,o.createComponentVNode)(2,i.Box,{as:"img",src:e.sprite+".png",verticalAlign:"middle",ml:"-6px",mr:"0.5rem"}),e.name]}),(0,o.createVNode)(1,"br")],4,e)}))})},s=function(e,t){return(0,o.createComponentVNode)(2,i.Section,{className:"Safe--help",title:"Safe opening instructions (because you all keep forgetting)",children:[(0,o.createComponentVNode)(2,i.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,i.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),i=n(2),a=n(3);t.SatelliteControl=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.satellites,d=l.notice,u=l.meteor_shield,p=l.meteor_shield_coverage,m=l.meteor_shield_coverage_max,h=l.meteor_shield_coverage_percentage;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[u&&(0,o.createComponentVNode)(2,i.Section,{title:"Station Shield Coverage",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:h>=100?"good":"average",value:p,maxValue:m,children:[h," %"]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Satellite Network Control",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[d&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alert",color:"red",children:l.notice}),s.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"#"+e.id,children:[e.mode," ",(0,o.createComponentVNode)(2,i.Button,{content:e.active?"Deactivate":"Activate",icon:"arrow-circle-right",onClick:function(){return c("toggle",{id:e.id})}})]},e.id)}))]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SecureStorage=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.SecureStorage=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.emagged,d=l.locked,u=l.l_set,p=l.l_setshort,m=l.current_code,h=function(e){var t=e.buttonValue,n=e.color;return n||(n="default"),(0,o.createComponentVNode)(2,i.Button,{disabled:s||p,type:"button",color:n,onClick:function(){return c("setnumber",{buttonValue:t})},children:t})};return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,i.Flex,{spacing:"1",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:16,shrink:0,textAlign:"center",children:(0,o.createComponentVNode)(2,i.Section,{title:"Code Panel",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,h,{buttonValue:"1"}),(0,o.createComponentVNode)(2,h,{buttonValue:"2"}),(0,o.createComponentVNode)(2,h,{buttonValue:"3"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,h,{buttonValue:"4"}),(0,o.createComponentVNode)(2,h,{buttonValue:"5"}),(0,o.createComponentVNode)(2,h,{buttonValue:"6"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,h,{buttonValue:"7"}),(0,o.createComponentVNode)(2,h,{buttonValue:"8"}),(0,o.createComponentVNode)(2,h,{buttonValue:"9"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,h,{buttonValue:"R",color:"red"}),(0,o.createComponentVNode)(2,h,{buttonValue:"0"}),(0,o.createComponentVNode)(2,h,{buttonValue:"E",color:"green"})]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Current Status",children:s||p?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Lock Status",children:(0,o.createComponentVNode)(2,i.Box,{color:"red",children:s?"LOCKING SYSTEM ERROR - 1701":"ALERT: MEMORY SYSTEM ERROR - 6040 201"})}),s?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Input Code",children:(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"NEW INPUT, ASSHOLE"})}):""]}):(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Secure Code",children:(0,o.createComponentVNode)(2,i.Box,{color:u?"red":"green",children:u?"*****":"NOT SET. ENTER NEW."})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Lock Status",children:(0,o.createComponentVNode)(2,i.Box,{color:d?"red":"green",children:d?"Locked":"Unlocked"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Input Code",children:(0,o.createComponentVNode)(2,i.Box,{children:m||"Waiting for input"})}),(0,o.createComponentVNode)(2,i.Button,{top:".35em",left:".5em",disabled:d,color:"red",content:"Lock",icon:"lock",onClick:function(){return c("close")}})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SecurityRecords=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(51),l=n(3),s=n(44),d=n(100),u=n(101),p=n(145),m={"*Execute*":"execute","*Arrest*":"arrest",Incarcerated:"incarcerated",Parolled:"parolled",Released:"released",Demote:"demote",Search:"search",Monitor:"monitor"},h=function(e,t){(0,s.modalOpen)(e,"edit",{field:t.edit,value:t.value})};t.SecurityRecords=function(e,t){var n,r=(0,i.useBackend)(t),c=(r.act,r.data),m=c.loginState,h=c.currentPage;return m.logged_in?(1===h?n=(0,o.createComponentVNode)(2,C):2===h?n=(0,o.createComponentVNode)(2,b):3===h&&(n=(0,o.createComponentVNode)(2,V)),(0,o.createComponentVNode)(2,l.Window,{theme:"security",resizable:!0,children:[(0,o.createComponentVNode)(2,s.ComplexModal),(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,d.LoginInfo),(0,o.createComponentVNode)(2,p.TemporaryNotice),(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,a.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,u.LoginScreen)})})};var f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.currentPage,s=c.general;return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===l,onClick:function(){return r("page",{page:1})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"list"}),"List Records"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===l,onClick:function(){return r("page",{page:2})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"wrench"}),"Record Maintenance"]}),3===l&&s&&!s.empty&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:3===l,children:[(0,o.createComponentVNode)(2,a.Icon,{name:"file"}),"Record: ",s.fields[0].value]})]})},C=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data.records,s=(0,i.useLocalState)(t,"searchText",""),d=s[0],u=(s[1],(0,i.useLocalState)(t,"sortId","name")),p=u[0],h=(u[1],(0,i.useLocalState)(t,"sortOrder",!0)),f=h[0];h[1];return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,N),(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",mt:"0.5rem",children:(0,o.createComponentVNode)(2,a.Table,{className:"SecurityRecords__list",children:[(0,o.createComponentVNode)(2,a.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,g,{id:"name",children:"Name"}),(0,o.createComponentVNode)(2,g,{id:"id",children:"ID"}),(0,o.createComponentVNode)(2,g,{id:"rank",children:"Assignment"}),(0,o.createComponentVNode)(2,g,{id:"fingerprint",children:"Fingerprint"}),(0,o.createComponentVNode)(2,g,{id:"status",children:"Criminal Status"})]}),l.filter((0,r.createSearch)(d,(function(e){return e.name+"|"+e.id+"|"+e.rank+"|"+e.fingerprint+"|"+e.status}))).sort((function(e,t){var n=f?1:-1;return e[p].localeCompare(t[p])*n})).map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{className:"SecurityRecords__listRow--"+m[e.status],onClick:function(){return c("view",{uid_gen:e.uid_gen,uid_sec:e.uid_sec})},children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user"})," ",e.name]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.id}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.rank}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.fingerprint}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.status})]},e.id)}))]})})]})},g=function(e,t){var n=(0,i.useLocalState)(t,"sortId","name"),r=n[0],c=n[1],l=(0,i.useLocalState)(t,"sortOrder",!0),s=l[0],d=l[1],u=e.id,p=e.children;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{color:r!==u&&"transparent",width:"100%",onClick:function(){r===u?d(!s):(c(u),d(!0))},children:[p,r===u&&(0,o.createComponentVNode)(2,a.Icon,{name:s?"sort-up":"sort-down",ml:"0.25rem;"})]})})},N=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data.isPrinting,d=(0,i.useLocalState)(t,"searchText",""),u=(d[0],d[1]);return(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,c.FlexItem,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"New Record",icon:"plus",onClick:function(){return r("new_general")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:l,icon:l?"spinner":"print",iconSpin:!!l,content:"Print Cell Log",ml:"0.25rem",onClick:function(){return(0,s.modalOpen)(t,"print_cell_log")}})]}),(0,o.createComponentVNode)(2,c.FlexItem,{grow:"1",ml:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search by Name, ID, Assignment, Fingerprint, Status",width:"100%",onInput:function(e,t){return u(t)}})})]})},b=function(e,t){var n=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Button.Confirm,{icon:"trash",content:"Delete All Cell Logs",onClick:function(){return n("delete_cell_logs")}})]})},V=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.isPrinting,s=c.general,d=c.security;return s&&s.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"General Data",level:2,mt:"-6px",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:l,icon:l?"spinner":"print",iconSpin:!!l,content:"Print Record",onClick:function(){return r("print_record")}}),(0,o.createComponentVNode)(2,a.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,a.Section,{title:"Security Data",level:2,mt:"-12px",buttons:(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",disabled:d.empty,content:"Delete Record",onClick:function(){return r("delete_security")}}),children:(0,o.createComponentVNode)(2,x)})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"General records lost!"})},v=function(e,t){var n=(0,i.useBackend)(t).data.general;return n&&n.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{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,prewrap:!0,children:[(0,r.decodeHtmlEntities)(""+e.value),!!e.edit&&(0,o.createComponentVNode)(2,a.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return h(t,e)}})]},n)}))})}),(0,o.createComponentVNode)(2,a.Box,{position:"absolute",right:"0",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!"})},x=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data.security;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,prewrap:!0,children:[(0,r.decodeHtmlEntities)(e.value),!!e.edit&&(0,o.createComponentVNode)(2,a.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return h(t,e)}})]},n)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Comments/Log",level:2,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"comment",content:"Add Entry",onClick:function(){return(0,s.modalOpen)(t,"comment_add")}}),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,{prewrap:!0,children:[(0,o.createComponentVNode)(2,a.Box,{color:"label",display:"inline",children:e.header||"Auto-generated"}),(0,o.createVNode)(1,"br"),e.text||e,(0,o.createComponentVNode)(2,a.Button,{icon:"comment-slash",color:"bad",ml:"0.5rem",onClick:function(){return c("comment_delete",{id:t+1})}})]},t)}))})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["Security records lost!",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"pen",content:"Create New Record",mt:"0.5rem",onClick:function(){return c("new_security")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.SeedExtractor=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(3),l={title:"Seeds",plantName:"Plant",lifespan:"Lifespan",endurance:"Endurance",maturation:"Maturation",production:"Production",yield:"Yield",potency:"Potency",searchTooltip:"Search..",sortByTooltip:"Sort by",dispOneTooltip:"Dispense one",dispAllTooltip:"Dispense all",inStock:"in stock",noContents:"No seeds loaded.",emptySearchResult:"No items matching your criteria was found!"},s={plantName:function(e,t){return e.display_name!==t.display_name?e.display_name>t.display_name?1:-1:0},lifespan:function(e,t){return e.life-t.life},endurance:function(e,t){return e.endr-t.endr},maturation:function(e,t){return e.matr-t.matr},production:function(e,t){return e.prod-t.prod},yield:function(e,t){return e.yld-t.yld},potency:function(e,t){return e.potn-t.potn}};t.SeedExtractor=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.data),s=r.total,d=r.capacity,h=r.contents;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,a.Section,{title:l.title,buttons:(0,o.createComponentVNode)(2,u),m:0,p:0,children:(0,o.createComponentVNode)(2,p,{seedsTotal:s,seedsCapacity:d})}),h?(0,o.createVNode)(1,"div","Divider Divider__noMargin"):(0,o.createComponentVNode)(2,a.NoticeBox,{m:0,children:[" ",l.noContents," "]}),(0,o.createComponentVNode)(2,a.Section,{flexGrow:1,stretchContents:!0,mt:0,children:!!h&&(0,o.createComponentVNode)(2,m)})]})})};var d=function(e,t){var n=e.name,r=e.alpha,c=(0,i.useLocalState)(t,"sort",{field:"plantName",desc:!1}),s=c[0],d=c[1];return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,iconRight:!0,icon:s.field!==n?"":s.desc?r?"sort-alpha-down":"sort-amount-down":r?"sort-alpha-up":"sort-amount-up",color:"transparent",textColor:"white",content:l[n],tooltip:l.sortByTooltip+" "+n.toLowerCase(),tooltipPosition:"bottom",onClick:function(){s.field!==e.name?d({field:n,desc:!1}):d({field:n,desc:!s.desc})}})},u=function(e,t){var n=(0,i.useLocalState)(t,"search",""),r=(n[0],n[1]);return(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",width:"50vw",style:{display:"block"},children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mx:1,align:"center",children:(0,o.createComponentVNode)(2,a.Icon,{name:"filter"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",mr:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:l.searchTooltip,width:"100%",onInput:function(e,t){return r(t)}})})]})})},p=function(e,t){var n=e.seedsTotal,r=e.seedsCapacity;return(0,o.createComponentVNode)(2,a.Flex,{direction:"row",textAlign:"center",bold:!0,align:"baseline",mt:0,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"15vw",children:(0,o.createComponentVNode)(2,d,{name:"plantName",alpha:!0})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"65vw",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"lifespan"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"endurance"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"maturation"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"production"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"yield"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"potency"})})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,color:"average",children:[n,"/",r]})]})},m=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data.contents),d=(0,i.useLocalState)(t,"search",""),u=d[0],p=(d[1],(0,i.useLocalState)(t,"sort",{field:"plantName",desc:!1})),m=p[0],f=(p[1],(0,r.createSearch)(u,(function(e){return e.display_name+e.strain_text}))),C=c.filter(f).sort(s[m.field]);m.desc&&(C=C.reverse());var g=0===C.length;return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:[!!g&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:[" ",l.emptySearchResult," "]}),!g&&(0,o.createComponentVNode)(2,a.Box,{className:"SeedExtractor__Contents",children:C.map((function(e){return(0,o.createComponentVNode)(2,h,{displayName:e.display_name,descriptionText:e.strain_text,lifespanVal:e.life,enduranceVal:e.endr,maturationVal:e.life,productionVal:e.prod,yieldVal:e.yld,potencyVal:e.potn,vendIdx:e.vend,pileStock:e.quantity},e.vend)}))})]})},h=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=(n.data,e.key,e.displayName),s=e.descriptionText,d=e.lifespanVal,u=e.enduranceVal,p=e.maturationVal,m=e.productionVal,h=e.yieldVal,f=e.potencyVal,C=e.vendIdx,g=e.pileStock;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{direction:"row",textAlign:"center",className:"SeedExtractor__contents--row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"15vw",textAlign:"left",bold:!0,children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:c})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"65vw",py:1,children:(0,o.createVNode)(1,"table",null,[(0,o.createVNode)(1,"tr",null,(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,a.Flex,{direction:"row",textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:d}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:u}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:p}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:m}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:h}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:f})]}),2),2),(0,o.createVNode)(1,"tr",null,(0,o.createVNode)(1,"td",null,s,0,{style:{"font-size":"90%","padding-top":"0.5em"}}),2)],4,{style:{width:"100%",border:"0"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,py:1,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{color:"good",children:[g," ",l.inStock]}),(0,o.createComponentVNode)(2,a.Flex.Item,{minHeight:"25px",pt:1,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",content:"1",tooltip:"Dispense one",tooltipPosition:"bottom-left",onClick:function(){return r("vend",{index:C,amount:1})}}),(0,o.createComponentVNode)(2,a.NumberInput,{width:"40px",minValue:0,value:0,maxValue:g,step:1,stepPixelSize:3,onChange:function(e,t){return r("vend",{index:C,amount:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",content:"All",tooltip:"Dispense all",tooltipPosition:"bottom-left",onClick:function(){return r("vend",{index:C,amount:g})}})]})]})})]}),(0,o.createComponentVNode)(2,a.Divider)],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleConsoleContent=t.ShuttleConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ShuttleConsole=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=e.type,u=void 0===s?"shuttle":s,p=e.blind_drop,m=l.authorization_required;return(0,o.createComponentVNode)(2,a.Window,{width:350,height:240,children:[!!m&&(0,o.createComponentVNode)(2,i.Modal,{ml:1,mt:1,width:26,height:12,fontSize:"28px",fontFamily:"monospace",textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mt:2,children:(0,o.createComponentVNode)(2,i.Icon,{name:"minus-circle"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{mt:2,ml:2,color:"bad",children:"shuttle"===u?"SHUTTLE LOCKED":"BASE LOCKED"})]}),(0,o.createComponentVNode)(2,i.Box,{fontSize:"18px",mt:4,children:(0,o.createComponentVNode)(2,i.Button,{lineHeight:"40px",icon:"arrow-circle-right",content:"Request Authorization",color:"bad",onClick:function(){return c("request")}})})]}),(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,d,{type:u,blind_drop:p})})]})};var c=function(e,t){var n;return null==e||null==(n=e.find((function(e){return e.id===t})))?void 0:n.name},l=function(e,t){var n;return null==e||null==(n=e.find((function(e){return e.name===t})))?void 0:n.id},s={"In Transit":"good",Idle:"average",Igniting:"average",Recharging:"average",Missing:"bad","Unauthorized Access":"bad",Locked:"bad"},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,d=n.data,u=e.type,p=e.blind_drop,m=d.status,h=d.locked,f=d.authorization_required,C=d.destination,g=d.docked_location,N=d.timer_str,b=d.locations,V=void 0===b?[]:b;return(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,fontSize:"26px",textAlign:"center",fontFamily:"monospace",children:N||"00:00"}),(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",fontSize:"14px",mb:1,children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,bold:!0,children:"STATUS:"}),(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:s[m]||"bad",ml:1,children:m||"Not Available"})]}),(0,o.createComponentVNode)(2,i.Section,{title:"shuttle"===u?"Shuttle Controls":"Base Launch Controls",level:2,children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:g||"Not Available"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Destination",buttons:"shuttle"!==u&&0===V.length&&!!p&&(0,o.createComponentVNode)(2,i.Button,{color:"bad",icon:"exclamation-triangle",disabled:f||!p,content:"Blind Drop",onClick:function(){return a("random")}}),children:0===V.length&&(0,o.createComponentVNode)(2,i.Box,{mb:1.7,color:"bad",children:"Not Available"})||1===V.length&&(0,o.createComponentVNode)(2,i.Box,{mb:1.7,color:"average",children:c(V,C)})||(0,o.createComponentVNode)(2,i.Dropdown,{mb:1.7,over:!0,width:"240px",options:V.map((function(e){return e.name})),disabled:h||f,selected:c(V,C)||"Select a Destination",onSelected:function(e){return a("set_destination",{destination:l(V,e)})}})})]}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,content:"Depart",disabled:!c(V,C)||h||f||"Idle"!==m,icon:"arrow-up",textAlign:"center",onClick:function(){return a("move",{shuttle_id:C})}})]})]})};t.ShuttleConsoleContent=d},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleManipulator=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ShuttleManipulator=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),d=n[0],u=n[1];return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,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===d,onClick:function(){return u(0)},icon:"info-circle",content:"Status"},"Status"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===d,onClick:function(){return u(1)},icon:"file-import",content:"Templates"},"Templates"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===d,onClick:function(){return u(2)},icon:"tools",content:"Modification"},"Modification")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,c);case 1:return(0,o.createComponentVNode)(2,l);case 2:return(0,o.createComponentVNode)(2,s);default:return"WE SHOULDN'T BE HERE!"}}(d)]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.shuttles;return(0,o.createComponentVNode)(2,i.Box,{children:c.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID",children:e.id}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Timer",children:e.timeleft}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Mode",children:e.mode}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Status",children:e.status}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Jump To",icon:"location-arrow",onClick:function(){return a("jump_to",{type:"mobile",id:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Fast Travel",icon:"fast-forward",onClick:function(){return a("fast_travel",{id:e.id})}})]})]})},e.name)}))})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.templates_tabs,s=c.existing_shuttle,d=c.templates;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Tabs,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:e===s.id,icon:"file",content:e,onClick:function(){return a("select_template_category",{cat:e})}},e)}))}),!!s&&d[s.id].templates.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[e.description&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:e.description}),e.admin_notes&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Admin Notes",children:e.admin_notes}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,i.Button,{content:"Load Template",icon:"download",onClick:function(){return a("select_template",{shuttle_id:e.shuttle_id})}})})]})},e.name)}))]})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.existing_shuttle,s=c.selected;return(0,o.createComponentVNode)(2,i.Box,{children:[l?(0,o.createComponentVNode)(2,i.Section,{title:"Selected Shuttle: "+l.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:l.status}),l.timer&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Timer",children:l.timeleft}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,i.Button,{content:"Jump To",icon:"location-arrow",onClick:function(){return a("jump_to",{type:"mobile",id:l.id})}})})]})}):(0,o.createComponentVNode)(2,i.Section,{title:"Selected Shuttle: None"}),s?(0,o.createComponentVNode)(2,i.Section,{title:"Selected Template: "+s.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[s.description&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:s.description}),s.admin_notes&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Admin Notes",children:s.admin_notes}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Preview",icon:"eye",onClick:function(){return a("preview",{shuttle_id:s.shuttle_id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Load",icon:"download",onClick:function(){return a("load",{shuttle_id:s.shuttle_id})}})]})]})}):(0,o.createComponentVNode)(2,i.Section,{title:"Selected Template: None"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Sleeper=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],s=[["Resp.","oxyLoss"],["Toxin","toxLoss"],["Brute","bruteLoss"],["Burn","fireLoss"]],d={average:[.25,.5],bad:[.5,Infinity]},u=["bad","average","average","good","average","average","bad"];t.Sleeper=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.data.hasOccupant?(0,o.createComponentVNode)(2,p):(0,o.createComponentVNode)(2,g));return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[r,(0,o.createComponentVNode)(2,f)]})})};var p=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data.occupant;return(0,o.createFragment)([(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,C)],4)},m=function(e,t){var n=(0,i.useBackend)(t),c=n.act,s=n.data,d=s.occupant,p=s.auto_eject_dead;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:"label",display:"inline",children:"Auto-eject if dead:\xa0"}),(0,o.createComponentVNode)(2,a.Button,{icon:p?"toggle-on":"toggle-off",selected:p,content:p?"On":"Off",onClick:function(){return c("auto_eject_dead_"+(p?"off":"on"))}}),(0,o.createComponentVNode)(2,a.Button,{icon:"user-slash",content:"Eject",onClick:function(){return c("ejectify")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:d.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d.maxHealth,value:d.health/d.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]},children:(0,r.round)(d.health,0)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:l[d.stat][0],children:l[d.stat][1]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d.maxTemp,value:d.bodyTemperature/d.maxTemp,color:u[d.temperatureSuitability+3],children:[(0,r.round)(d.btCelsius,0),"\xb0C,",(0,r.round)(d.btFaren,0),"\xb0F"]})}),!!d.hasBlood&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood Level",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d.bloodMax,value:d.bloodLevel/d.bloodMax,ranges:{bad:[-Infinity,.6],average:[.6,.9],good:[.6,Infinity]},children:[d.bloodPercent,"%, ",d.bloodLevel,"cl"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pulse",verticalAlign:"middle",children:[d.pulse," BPM"]})],4)]})})},h=function(e,t){var n=(0,i.useBackend)(t).data.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant Damage",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:s.map((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e[0],children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:"100",value:n[e[1]]/100,ranges:d,children:(0,r.round)(n[e[1]],0)},t)},t)}))})})},f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.hasOccupant,s=c.isBeakerLoaded,d=c.beakerMaxSpace,u=c.beakerFreeSpace,p=c.dialysis&&u>0;return(0,o.createComponentVNode)(2,a.Section,{title:"Dialysis",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:!s||u<=0||!l,selected:p,icon:p?"toggle-on":"toggle-off",content:p?"Active":"Inactive",onClick:function(){return r("togglefilter")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!s,icon:"eject",content:"Eject",onClick:function(){return r("removebeaker")}})],4),children:s?(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remaining Space",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d,value:u/d,ranges:{good:[.5,Infinity],average:[.25,.5],bad:[-Infinity,.25]},children:[u,"u"]})})}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No beaker loaded."})})},C=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.occupant,s=c.chemicals,d=c.maxchem,u=c.amounts;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant Chemicals",flexGrow:"1",children:s.map((function(e,t){var n,i="";return e.overdosing?(i="bad",n=(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-circle"}),"\xa0 Overdosing!"]})):e.od_warning&&(i="average",n=(0,o.createComponentVNode)(2,a.Box,{color:"average",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle"}),"\xa0 Close to overdosing"]})),(0,o.createComponentVNode)(2,a.Box,{backgroundColor:"rgba(0, 0, 0, 0.33)",mb:"0.5rem",children:(0,o.createComponentVNode)(2,a.Section,{title:e.title,level:"3",mx:"0",lineHeight:"18px",buttons:n,children:(0,o.createComponentVNode)(2,a.Flex,{align:"flex-start",children:[(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d,value:e.occ_amount/d,color:i,title:"Amount of chemicals currently inside the occupant / Total amount injectable by this machine",mr:"0.5rem",children:[e.pretty_amount,"/",d,"u"]}),u.map((function(t,n){return(0,o.createComponentVNode)(2,a.Button,{disabled:!e.injectable||e.occ_amount+t>d||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)}))})},g=function(e,t){return(0,o.createComponentVNode)(2,a.Section,{textAlign:"center",flexGrow:"1",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:"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),i=n(2),a=n(3);t.SlotMachine=function(e,t){var n,c=(0,r.useBackend)(t),l=c.act,s=c.data;return null===s.money?(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{children:"Could not scan your card or could not find account!"}),(0,o.createComponentVNode)(2,i.Box,{children:"Please wear or hold your ID and try again."})]})})}):(n=1===s.plays?s.plays+" player has tried their luck today!":s.plays+" players have tried their luck today!",(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{lineHeight:2,children:n}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Credits Remaining",children:(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:s.money})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"50 credits to spin",children:(0,o.createComponentVNode)(2,i.Button,{icon:"coins",disabled:s.working,content:s.working?"Spinning...":"Spin",onClick:function(){return l("spin")}})})]}),(0,o.createComponentVNode)(2,i.Box,{bold:!0,lineHeight:2,color:s.resultlvl,children:s.result})]})})}))}},function(e,t,n){"use strict";t.__esModule=!0,t.Smartfridge=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.Smartfridge=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.secure,d=l.can_dry,u=l.drying,p=l.contents;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[!!s&&(0,o.createComponentVNode)(2,i.Section,{title:"Secure",children:(0,o.createComponentVNode)(2,i.NoticeBox,{children:"Secure Access: Please have your identification ready."})}),!!d&&(0,o.createComponentVNode)(2,i.Section,{title:"Drying rack",children:(0,o.createComponentVNode)(2,i.Button,{icon:u?"power-off":"times",content:u?"On":"Off",selected:u,onClick:function(){return c("drying")}})}),(0,o.createComponentVNode)(2,i.Section,{title:"Contents",children:[!p&&(0,o.createComponentVNode)(2,i.Box,{color:"average",children:" No products loaded. "}),!!p&&p.map((function(e){return(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"45%",children:e.display_name}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"25%",children:["(",e.quantity," in stock)"]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"30%",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",tooltip:"Dispense one.",content:"1",onClick:function(){return c("vend",{index:e.vend,amount:1})}}),(0,o.createComponentVNode)(2,i.NumberInput,{width:"40px",minValue:0,value:0,maxValue:e.quantity,step:1,stepPixelSize:3,onChange:function(t,n){return c("vend",{index:e.vend,amount:n})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",content:"All",tooltip:"Dispense all. ",onClick:function(){return c("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),i=n(2),a=n(103),c=n(3);t.Smes=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.capacityPercent,u=(s.capacity,s.charge),p=s.inputAttempt,m=s.inputting,h=s.inputLevel,f=s.inputLevelMax,C=s.inputAvailable,g=s.outputAttempt,N=s.outputting,b=s.outputLevel,V=s.outputLevelMax,v=s.outputUsed,x=(d>=100?"good":m&&"average")||"bad",y=(N?"good":u>0&&"average")||"bad";return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Stored Energy",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:.01*d,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]}})}),(0,o.createComponentVNode)(2,i.Section,{title:"Input",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Charge Mode",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:p?"sync-alt":"times",selected:p,onClick:function(){return l("tryinput")},children:p?"Auto":"Off"}),children:(0,o.createComponentVNode)(2,i.Box,{color:x,children:(d>=100?"Fully Charged":m&&"Charging")||"Not Charging"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target Input",children:(0,o.createComponentVNode)(2,i.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:0===h,onClick:function(){return l("input",{target:"min"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"backward",disabled:0===h,onClick:function(){return l("input",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,i.Slider,{value:h/1e3,fillValue:C/1e3,minValue:0,maxValue:f/1e3,step:5,stepPixelSize:4,format:function(e){return(0,a.formatPower)(1e3*e,1)},onChange:function(e,t){return l("input",{target:1e3*t})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"forward",disabled:h===f,onClick:function(){return l("input",{adjust:1e4})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:h===f,onClick:function(){return l("input",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available",children:(0,a.formatPower)(C)})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Output",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Output Mode",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:g?"power-off":"times",selected:g,onClick:function(){return l("tryoutput")},children:g?"On":"Off"}),children:(0,o.createComponentVNode)(2,i.Box,{color:y,children:N?"Sending":u>0?"Not Sending":"No Charge"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target Output",children:(0,o.createComponentVNode)(2,i.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:0===b,onClick:function(){return l("output",{target:"min"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"backward",disabled:0===b,onClick:function(){return l("output",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,i.Slider,{value:b/1e3,minValue:0,maxValue:V/1e3,step:5,stepPixelSize:4,format:function(e){return(0,a.formatPower)(1e3*e,1)},onChange:function(e,t){return l("output",{target:1e3*t})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"forward",disabled:b===V,onClick:function(){return l("output",{adjust:1e4})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:b===V,onClick:function(){return l("output",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Outputting",children:(0,a.formatPower)(v)})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SolarControl=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.SolarControl=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.generated,d=l.generated_ratio,u=l.tracking_state,p=l.tracking_rate,m=l.connected_panels,h=l.connected_tracker,f=l.cdir,C=l.direction,g=l.rotating_direction;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Scan for new hardware",onClick:function(){return c("refresh")}}),children:(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Solar tracker",color:h?"good":"bad",children:h?"OK":"N/A"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Solar panels",color:m>0?"good":"bad",children:m})]})}),(0,o.createComponentVNode)(2,i.Grid.Column,{size:2,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power output",children:(0,o.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[.66,Infinity],average:[.33,.66],bad:[-Infinity,.33]},minValue:0,maxValue:1,value:d,children:s+" W"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Panel orientation",children:[f,"\xb0 (",C,")"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tracker rotation",children:[2===u&&(0,o.createComponentVNode)(2,i.Box,{children:" Automated "}),1===u&&(0,o.createComponentVNode)(2,i.Box,{children:[" ",p,"\xb0/h (",g,") "]}),0===u&&(0,o.createComponentVNode)(2,i.Box,{children:" Tracker offline "})]})]})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Controls",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Panel orientation",children:[2!==u&&(0,o.createComponentVNode)(2,i.NumberInput,{unit:"\xb0",step:1,stepPixelSize:1,minValue:0,maxValue:359,value:f,onDrag:function(e,t){return c("cdir",{cdir:t})}}),2===u&&(0,o.createComponentVNode)(2,i.Box,{lineHeight:"19px",children:" Automated "})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tracker status",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Off",selected:0===u,onClick:function(){return c("track",{track:0})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"clock-o",content:"Timed",selected:1===u,onClick:function(){return c("track",{track:1})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Auto",selected:2===u,disabled:!h,onClick:function(){return c("track",{track:2})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tracker rotation",children:[1===u&&(0,o.createComponentVNode)(2,i.NumberInput,{unit:"\xb0/h",step:1,stepPixelSize:1,minValue:-7200,maxValue:7200,value:p,format:function(e){return(Math.sign(e)>0?"+":"-")+Math.abs(e)},onDrag:function(e,t){return c("tdir",{tdir:t})}}),0===u&&(0,o.createComponentVNode)(2,i.Box,{lineHeight:"19px",children:" Tracker offline "}),2===u&&(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3);t.SpawnersMenu=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.spawners||[];return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{mb:.5,title:e.name+" ("+e.amount_left+" left)",level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-circle-right",content:"Jump",onClick:function(){return c("jump",{ID:e.uids})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-circle-right",content:"Spawn",onClick:function(){return c("spawn",{ID:e.uids})}})],4),children:[(0,o.createComponentVNode)(2,i.Box,{style:{"white-space":"pre-wrap"},mb:1,fontSize:"16px",children:e.desc}),!!e.fluff&&(0,o.createComponentVNode)(2,i.Box,{style:{"white-space":"pre-wrap"},textColor:"#878787",fontSize:"14px",children:e.fluff}),!!e.important_info&&(0,o.createComponentVNode)(2,i.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.ShuttleConsole=t.SpiderOS=void 0;var o=n(0),r=n(1),i=n(2),a=n(52),c=n(3);t.SpiderOS=function(e,t){var n,a=(0,r.useBackend)(t),f=a.act,C=a.data;return 0===C.suit_tgui_state?n=(0,o.createComponentVNode)(2,i.Flex,{direction:"row",spacing:1,children:[(0,o.createComponentVNode)(2,i.Flex,{direction:"column",width:"60%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{backgroundColor:"rgba(0, 0, 0, 0)",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,i.Flex.Item,{mt:2.2,backgroundColor:"rgba(0, 0, 0, 0)",children:(0,o.createComponentVNode)(2,p)})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"40%",height:"190px",grow:1,backgroundColor:"rgba(0, 0, 0, 0)",children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s)]})]}):1===C.suit_tgui_state&&(n=(0,o.createComponentVNode)(2,i.Flex,{width:"100%",height:"100%",direction:"column",shrink:1,spacing:1,children:(0,o.createComponentVNode)(2,i.Flex.Item,{backgroundColor:"rgba(0, 0, 0, 0.8)",height:"100%",children:[(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,h,{allMessages:C.current_load_text,finishedTimeout:3e3,current_initialisation_phase:C.current_initialisation_phase,end_terminal:C.end_terminal,onFinished:function(){return f("set_UI_state",{suit_tgui_state:0})}})]})})),(0,o.createComponentVNode)(2,c.Window,{theme:"spider_clan",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",spacing:1,children:n})})})};var l=function(e,t){var n=(0,r.useBackend)(t).data,a=n.allStylesPreview,c=n.style_preview_icon_state;return(0,o.createComponentVNode)(2,i.Section,{title:"\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u0441\u0442\u044e\u043c\u0430",style:{"text-align":"center"},buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0441\u0442\u044e\u043c\u0430! \u041d\u0430\u0448\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u0430\u043c \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u0441\u0442\u044e\u043c \u043f\u043e\u0434 \u0441\u0435\u0431\u044f, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0442\u0435\u0440\u044f\u044f \u043e\u0431\u043e\u0440\u043e\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0430\u0447\u0435\u0441\u0442\u0432. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043f\u0440\u0438 \u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u043a\u043e\u0441\u0442\u044e\u043c\u0430, \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0443\u0431\u0438\u0439\u0446\u044b.",tooltipPosition:"bottom-left"}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",grow:1,alignContent:"center",children:(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_blue",success:0,danger:0,align:"center",children:(0,o.createComponentVNode)(2,i.Section,{style:{background:"rgba(4, 74, 27, 0.75)"},mr:10,ml:10,children:(0,o.createVNode)(1,"img",null,null,1,{height:"128px",width:"128px",src:"data:image/jpeg;base64,"+a[c],style:{"margin-left":"0px","-ms-interpolation-mode":"nearest-neighbor"}})})})})})},s=function(e,t){var n,a,c,l,s=(0,r.useBackend)(t),d=s.act,u=s.data,p=u.designs,m=u.design_choice,h=u.scarf_design_choice,f=u.colors,C=u.color_choice,g=u.genders,N=u.preferred_clothes_gender,b=u.suit_state,V=u.preferred_scarf_over_hood,v=u.show_charge_UI,x=u.has_martial_art,y=u.show_concentration_UI;return n=0===b?"\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044e\u043c":"\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044e\u043c",a=0===V?"\u041a\u0430\u043f\u044e\u0448\u043e\u043d":"\u0428\u0430\u0440\u0444",c=1===V?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0421\u0442\u0438\u043b\u044c \u0448\u0430\u0440\u0444\u0430",content:(0,o.createComponentVNode)(2,i.Dropdown,{options:p,selected:h,onSelected:function(e){return d("set_scarf_design",{scarf_design_choice:e})}})}):null,l=x?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u044f",content:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{selected:y,width:"78px",textAlign:"left",content:y?"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c":"\u0421\u043a\u0440\u044b\u0442\u044c",onClick:function(){return d("toggle_ui_concentration")}}),(0,o.createComponentVNode)(2,i.Button,{textAlign:"center",content:"?",tooltip:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043b\u0438 \u0432\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u0435\u0432\u043e\u0433\u043e \u0438\u0441\u0441\u043a\u0443\u0441\u0442\u0432\u0430.",tooltipPosition:"top-left"})]})}):null,(0,o.createComponentVNode)(2,i.Flex,{direction:"row",grow:1,alignContent:"center",ml:.5,children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,width:"100%",children:[(0,o.createComponentVNode)(2,i.NoticeBox,{success:0,danger:0,align:"center",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0421\u0442\u0438\u043b\u044c",children:(0,o.createComponentVNode)(2,i.Dropdown,{options:p,selected:m,onSelected:function(e){return d("set_design",{design_choice:e})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0426\u0432\u0435\u0442",children:(0,o.createComponentVNode)(2,i.Dropdown,{options:f,selected:C,onSelected:function(e){return d("set_color",{color_choice:e})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0416\u0435\u043d\u0441\u043a\u0438\u0439/\u041c\u0443\u0436\u0441\u043a\u043e\u0439",children:(0,o.createComponentVNode)(2,i.Dropdown,{options:g,selected:N,onSelected:function(e){return d("set_gender",{preferred_clothes_gender:e})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0428\u0430\u0440\u0444/\u041a\u0430\u043f\u044e\u0448\u043e\u043d",children:[(0,o.createComponentVNode)(2,i.Button,{className:0===b?"":"Button_disabled",width:"78px",selected:V,disabled:b,textAlign:"left",content:a,onClick:function(){return d("toggle_scarf")}}),(0,o.createComponentVNode)(2,i.Button,{textAlign:"center",content:"?",tooltip:'\u0421 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 "\u0428\u0430\u0440\u0444" \u0432\u0430\u0448 \u043a\u0430\u043f\u044e\u0448\u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u043e\u043b\u043e\u0441\u044b. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u0430\u0448\u0430 \u0433\u043e\u043b\u043e\u0432\u0430 \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430! \u0410\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0435 \u043d\u0430\u043d\u043e-\u0432\u043e\u043b\u043e\u043a\u043d\u0430 \u043a\u043e\u0441\u0442\u044e\u043c\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u044e\u0442 \u043d\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0433\u0440\u043e\u0437\u044b \u043f\u0440\u0438\u043a\u0440\u044b\u0432\u0430\u044f \u0432\u0430\u0448\u0443 \u0433\u043e\u043b\u043e\u0432\u0443! \u0423\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435: \u043d\u0430\u043d\u043e\u0432\u043e\u043b\u043e\u043a\u043d\u0430 \u0442\u0430\u043a \u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0443 \u0433\u043e\u043b\u043e\u0432\u0443 \u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0433\u043e\u043b\u043e\u0432\u043d\u044b\u0445 \u0443\u0431\u043e\u0440\u043e\u0432 \u0441 \u0446\u0435\u043b\u044c\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u043c\u0435\u0445 \u0432 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0435.',tooltipPosition:"top-left"})]}),c,(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0417\u0430\u0440\u044f\u0434 \u043a\u043e\u0441\u0442\u044e\u043c\u0430",children:[(0,o.createComponentVNode)(2,i.Button,{selected:v,width:"78px",textAlign:"left",content:v?"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c":"\u0421\u043a\u0440\u044b\u0442\u044c",onClick:function(){return d("toggle_ui_charge")}}),(0,o.createComponentVNode)(2,i.Button,{textAlign:"center",content:"?",tooltip:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u0440\u044f\u0434 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0441\u0442\u044e\u043c\u0430.",tooltipPosition:"top-left"})]}),l]})}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_"+C,success:0,danger:0,mt:-1.2,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{width:"80%",icon:"power-off",mt:.5,textAlign:"center",content:n,tooltip:"\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u0441\u0442\u044e\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043d\u0451\u043c \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445. \n\u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043b\u044e\u0431\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0441\u0442\u044e\u043c \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d. \n\u0422\u0430\u043a \u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0441\u0442\u044e\u043c \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0437\u0430\u0440\u044f\u0434 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \n\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0441\u0442\u044e\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043d\u044f\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d. \n\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0441\u0442\u044e\u043c\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435 \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u0432\u0440\u0430\u0433\u0430!",tooltipPosition:"top-left",onClick:function(){return d("initialise_suit")}})})]})})},d=function(e,t){var n=(0,r.useBackend)(t).data.allActionsPreview;return(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u043e\u0432\u0435\u0442\u044b \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438",style:{"text-align":"center"},buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u041c\u043e\u043b\u043e\u0434\u044b\u043c \u0443\u0431\u0438\u0439\u0446\u0430\u043c \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u043b\u0435\u0433\u043a\u043e \u043e\u0441\u0432\u043e\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u044b\u0445 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u043a. \n\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u0438\u0437\u0432\u0430\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u0441\u043e\u0432\u0435\u0442\u0430\u043c\u0438 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043c\u0438\u0441\u0441\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0432\u044b\u0434\u0430\u0434\u0443\u0442 \u0438\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u0441\u0432\u043e\u044e \u043f\u043e\u043b\u044c\u0437\u0443.",tooltipPosition:"bottom-left"}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",grow:1,alignContent:"center",children:(0,o.createComponentVNode)(2,i.Flex.Item,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.ninja_teleport,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044f \u0438 \u0448\u0430\u0442\u0442\u043b",content:"\u0412 \u0432\u0430\u0448\u0435\u043c \u0414\u043e\u0434\u0437\u0451 \u0435\u0441\u0442\u044c \u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \u0422\u043e\u0447\u043a\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0430\u044f, \u043d\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u043e\u043d\u043d\u0435\u043b\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0438\u043b\u0438 \u043c\u0430\u043b\u043e\u043f\u043e\u0441\u0435\u0449\u0430\u0435\u043c\u044b\u0435 \u043c\u0435\u0441\u0442\u0430. \n\u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \n\u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0448\u0430\u0442\u0442\u043b\u0430, \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u0437\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a \u0441\u0435\u0431\u0435 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430\u0437\u0430\u0434. \n\u0422\u0430\u043a \u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u043e\u043b\u0435\u0442\u0435\u0442\u044c \u043d\u0430 \u0448\u0430\u0442\u0442\u043b\u0435, \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0432\u0430\u043c, \u0447\u0442\u043e \u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043a\u0440\u0430\u0436\u0438 \u0448\u0430\u0442\u0442\u043b\u0430 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u0430 \u0432\u0430\u0448\u0443 \u0431\u0430\u0437\u0443 \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043b\u0438\u0446, \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0437\u0432\u0430\u0442\u044c \u0435\u0433\u043e.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.headset_green,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0430\u0448 \u043d\u0430\u0443\u0448\u043d\u0438\u043a",content:"\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0439, \u043d\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043c\u043e\u0449\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0438. \u0412 \u043d\u0435\u0433\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0432\u0430\u0448\u0438\u043c \u0431\u043e\u0440\u0433\u043e\u043c \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0447\u043b\u0435\u043d\u0430\u043c\u0438 \u043a\u043b\u0430\u043d\u0430. \n\u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438 \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u043a\u0438 \u0438/\u0438\u043b\u0438 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u043a\u0430\u043d\u0430\u043b\u044b \u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0432\u0430\u043c \u043c\u0435\u0441\u0442\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0441\u0432\u044f\u0437\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \n\u0422\u0430\u043a \u0436\u0435 \u0432\u0430\u0448 \u043d\u0430\u0443\u0448\u043d\u0438\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438- \u0447\u0435\u0441\u043a\u0438 \u0443\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u0438 \u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0432\u0430\u043c \u0441\u0430\u043c\u0438\u043c \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0438\u043c\u0438.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.ninja_sleeper,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041f\u043e\u0445\u0438\u0449\u0435\u043d\u0438\u0435 \u044d\u043a\u0438\u043f\u0430\u0436\u0430",content:"\u041f\u043e\u0440\u043e\u0439 \u043a\u043b\u0430\u043d\u0443 \u043d\u0443\u0436\u043d\u044b \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u043b\u044e\u0434\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442\u0435 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \u0412 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432\u0430\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043e\u0441\u043e\u0431\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0443\u0436\u043e\u0433\u043e \u0440\u0430\u0437\u0443\u043c\u0430. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u0440\u0443\u043f\u0438\u0446\u0430\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u043f\u043e\u0445\u0438\u0449\u0430\u0442\u044c \u043b\u044e\u0434\u0435\u0439. \n\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u0445\u0438- \u0442\u0438\u0442\u044c \u043b\u044e\u0434\u0435\u0439. \u0423 \u0432\u0430\u0441 \u043d\u0430 \u0448\u0430\u0442\u0442\u043b\u0435 \u0435\u0441\u0442\u044c \u0441\u043a\u0430\u0444\u0430\u043d\u0434\u0440\u044b, \u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0437\u0430\u043f\u0430\u0441 \u043d\u0430- \u0440\u0443\u0447\u043d\u0438\u043a\u043e\u0432, \u043a\u0438\u0441\u043b\u043e\u0440\u043e\u0434\u0430 \u0438 \u0431\u0430\u043b\u043b\u043e- \u043d\u043e\u0432. \n\u0422\u0430\u043a \u0436\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0430\u0448\u0438 \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043b\u044e\u0434\u0435\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0441\u0442\u0430\u043d\u044f \u0438\u0445 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. ",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.ai_face,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0421\u0430\u0431\u043e\u0442\u0430\u0436 \u0418\u0418",content:"\u0418\u043d\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u0430\u0431\u043e- \u0442\u0430\u0436 \u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442\u0430\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043f\u0440\u043e- \u0446\u0435\u0441\u0441 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u043e\u0442 \u043d\u0430\u0441 \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438. \n\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043b\u0430\u043d\u043e\u043c \u043c\u0435\u0442\u043e\u0434 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439 \u0434\u043b\u044f \u0437\u0430\u043a\u043e\u043d\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0418\u0418 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0418\u0418 \u0430\u0431\u0441\u0443\u0440\u0434\u043d\u044b\u043c\u0438 \u0437\u0430\u043a\u043e\u043d\u0430\u043c\u0438, \u043d\u043e \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0432 \u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u0437\u043b\u043e\u043c\u0430 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439. \u0422\u0430\u043a \u0436\u0435 \u0432\u0437\u043b\u043e\u043c \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u043b\u0451\u0433\u043a\u0430\u044f - \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0435\u0441\u0442\u044c \u0432\u0435\u0437\u0434\u0435. \u0410 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f. \u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c \u0435\u0441\u043b\u0438 \u0418\u0418 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442- \u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438\u043c \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c \u0435\u0433\u043e \u0441\u043b\u043e\u043c\u0430\u0442\u044c.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.ninja_borg,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0421\u0430\u0431\u043e\u0442\u0430\u0436 \u0440\u043e\u0431\u043e\u0442\u043e\u0432",content:'\u0418\u043d\u043e\u0433\u0434\u0430 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044f \u0432\u0430\u0448\u0438 \u0448\u0430\u043d\u0441\u044b \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0438\u0441\u0441\u0438\u0438 \u0434\u043b\u044f \u0438\u0445 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442\u0430\u0445, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u0435\u0439, \u043c\u044b \u0434\u0430\u0451\u043c \u0432\u0430\u043c \u043e\u0441\u043e\u0431\u044b\u0439 "\u0423\u043b\u0443\u0447\u0448\u0430\u044e\u0449\u0438\u0439" \u0438\u0445 \u043f\u0440\u0438\u0431\u043e\u0440, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u0432\u0430\u0448\u0438 \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0438. \n\u041f\u0440\u0438 \u0432\u0437\u043b\u043e\u043c\u0435 \u043a\u0438\u0431\u043e\u0440\u0433\u0430 \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u043c(\u0412\u0437\u043b\u043e\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f) \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043b\u043e\u044f\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u043d\u0443 \u0438 \u0432\u0430\u043c \u043b\u0438\u0447\u043d\u043e \u0441\u043b\u0443\u0433\u0443 \u0441\u043f\u043e\u0441\u043e\u0431- \u043d\u043e\u0433\u043e \u043d\u0430 \u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u0430\u043a \u0432 \u0441\u0430\u0431\u043e\u0442\u0430\u0436\u0435 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0442\u0430\u043a \u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043b\u0435\u0447\u0435\u043d\u0438\u0438. \n\u0422\u0430\u043a \u0436\u0435 \u0440\u043e\u0431\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u0430\u0449\u0451\u043d \u043b\u0438\u0447\u043d\u043e\u0439 \u043a\u0430\u0442\u0430\u043d\u043e\u0439, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u043f\u0438\u043d\u043f\u043e\u0438\u043d\u0442\u0435\u0440\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0435\u043c\u0443 \u043d\u0430 \u0432\u0430\u0441 \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u044e\u0440\u0438\u043a\u0435\u043d\u043e\u0432. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u043a\u0430\u0442\u0430\u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0430 \u043d\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0431\u043b\u044e\u0441\u043f\u0435\u0439\u0441 \u0442\u0440\u0430\u043d\u0441\u043b\u043e\u043a\u0430\u0446\u0438\u044e!',position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.server,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0421\u0430\u0431\u043e\u0442\u0430\u0436 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439",content:"\u041d\u0430 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u043e\u0431\u044c\u0435\u043a\u0442\u0430\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0443\u0447\u0451\u043d\u044b\u0445 \u0438 \u043c\u043d\u043e- \u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0445\u043e- \u0434\u0438\u0442\u0441\u044f \u0433\u0434\u0435 \u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044c\u0435\u043a\u0442\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0441\u0442\u0443- \u043f\u0430\u044e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0410 \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0438 \u0432\u0435\u0447\u043d\u043e \u0433\u0440\u044b\u0437\u0443\u0442\u0441\u044f \u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u044f. \u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430 \u0440\u0443\u043a\u0443. \n\u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0440\u0443\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0432\u0430\u0448\u0438 \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043c\u0438\u0441\u0441\u0438\u0435\u0439 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430. \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0430 \u0438\u0445 \u043d\u0430\u0443\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0432\u0441\u0435 \u0438\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b. \n\u041d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0440\u0443\u0441\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0431\u044c\u0435\u043a\u0442\u043e\u0432 \u043d\u0435 \u0434\u0440\u0435\u043c\u043b\u044e\u0442. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e \u0432\u0430\u0448\u0435\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u0437\u043b\u043e\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u043e\u0432\u0435\u0449\u0451\u043d \u043c\u0435\u0441\u0442\u043d\u044b\u0439 \u0418\u0418. \u0411\u0443\u0434\u044c\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u044d\u0442\u043e\u043c\u0443.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.buckler,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0417\u0430\u0449\u0438\u0442\u0430 \u0446\u0435\u043b\u0438",content:'\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u0433\u0430\u0442\u044b\u0435 \u0448\u0438\u0448\u043a\u0438 \u043f\u043b\u0430\u0442\u044f\u0442 \u0437\u0430 \u0443\u0441\u043b\u0443\u0433\u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u0446\u0435\u043b\u044c \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \n * \u0417\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044f\u0437\u0430\u043d \u0434\u043e\u0436\u0438\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0441\u043c\u0435\u043d\u044b! \n * \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u044b\u0439 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043e \u0432\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435. \u0418 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u043d\u0430\u043b! \n * \u041d\u0435 \u0432\u0430\u0436\u043d\u043e \u043a\u0442\u043e \u0438\u043b\u0438 \u0447\u0442\u043e \u043e\u0445\u043e\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u0437\u0430\u0449\u0438\u0442\u043d\u043e\u0433\u043e, \u043d\u043e \u0434\u043b\u044f \u043e\u0431\u044c\u0435\u043a\u0442\u0430 \u0433\u0434\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043c\u0438\u0441\u0441\u0438\u044f \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u0436\u0435\u043b\u0430\u043d\u043d\u043e\u0435 \u043b\u0438\u0446\u043e. \u041d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u0441\u0435\u0431\u044f \u0431\u0435\u0437 \u043d\u0443\u0436\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u043d\u0430 \u0432\u0430\u0441 \u0441\u0430\u043c\u0438\u0445 \u043d\u0435 \u0432\u0435\u043b\u0438 \u043e\u0445\u043e\u0442\u0443! \n\u0422\u0430\u043a \u0436\u0435 \u043c\u044b \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043a\u043b\u0430\u043d \u043d\u0435 \u043e\u0434\u043e\u0431\u0440\u044f\u0435\u0442 \u0432\u0430\u0440\u0432\u0430\u0440\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b "\u0417\u0430\u0449\u0438\u0442\u044b" \u0446\u0435\u043b\u0438. \u041d\u0435\u0442 \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u0430\u0434\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0432 \u043a\u043b\u0435\u0442\u043a\u0443 \u0438 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043d\u0438\u043c \u0442\u0430\u043c! \u041d\u0435 \u043f\u043e\u0440\u0442\u0438\u0442\u0435 \u043d\u0430\u0448\u0443 \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u044e \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432!',position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.cash,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041a\u0440\u0430\u0436\u0430 \u0434\u0435\u043d\u0435\u0433",content:"\u041a\u0430\u043a \u0431\u044b \u044d\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u0418\u043d\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u043d \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u043d\u044c- \u0433\u0430\u0445. \u0418\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b \u0437\u0430\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u043d\u0430\u043c. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u0430\u0434\u0438\u043c \u0432\u0430\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0430\u0441 \u044d\u0442\u0438 \u0434\u0435\u043d\u044c\u0433\u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \n\u0414\u043b\u044f \u0432\u0430\u0441 \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0442\u0440\u0443\u0434\u043d\u0430\u044f, \u043d\u043e \u0432\u0440\u0435\u043c\u044f\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u0430\u044f. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u043a\u0430\u0440\u043c\u0430\u043d\u043d\u044b\u0445 \u043a\u0440\u0430\u0436. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0440\u0430\u0436\u0438 \u0447\u0443\u0436\u0438\u0445 \u043a\u0430\u0440\u0442 \u0438 \u043e\u0431\u043d\u0430\u043b\u0438\u0447\u0438- \u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0441\u0447\u0435\u0442\u043e\u0432. \u041b\u0438\u0431\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043c\u0435\u0442\u0438\u0442\u044c \u0432\u044b\u0448\u0435 \u0438 \u043e\u0433\u0440\u0430\u0431\u0438\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438\u043b\u0438 \u0441\u0447\u0435\u0442\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u044c\u0435\u043a\u0442\u0430 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435. \u0414\u043e\u0441\u0442\u0430\u043d\u044c\u0442\u0435 \u044d\u0442\u0438 \u0434\u0435\u043d\u044c\u0433\u0438!",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.handcuff,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430",content:"\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0447\u0443\u0436\u043e\u0439 \u043f\u043e\u0437\u043e\u0440 \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0447\u0435\u043c \u0441\u043c\u0435\u0440\u0442\u044c. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u0430\u043c \u043f\u0440\u0438\u0439\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u044c \u043a\u0440\u0435\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0448\u0443 \u0436\u0435\u0440\u0442\u0432\u0443 \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u043d\u044b\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0443\u043f\u0435\u043a\u043b\u0438 \u0437\u0430 \u0440\u0435\u0448\u0451\u0442\u043a\u0443 \u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0446\u0435\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0441\u043b\u0435\u0434. \u041d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0439\u0442\u0438 \u0438 \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0435\u043b\u0438 \u0441\u0440\u043e\u043a \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 - \u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043c\u0435\u0442\u043e\u0434. \u0426\u0435\u043b\u044c \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u044e\u0442 \u0432 \u0441\u0443\u0434\u0435, \u0447\u0442\u043e \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \n \u0423 \u0432\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u043b\u0438\u0447\u0438\u043d\u043e\u0439 \u0446\u0435\u043b\u0438. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0439\u0442\u0435\u0441\u044c \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0441\u043b\u0438\u0448- \u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439. \u041b\u0438\u0448\u043d\u044f\u044f \u0434\u044b\u0440\u0430 \u0432 \u043e\u0431\u0448\u0438\u0432\u043a\u0435 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0438\u043b\u0438 \u0442\u0440\u0443\u043f\u044b - \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0448\u0430\u043d\u0441\u044b \u043f\u0440\u043e\u0432\u0430\u043b\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u043b\u0430\u043d\u0430.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.spider_charge,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041f\u043e\u0434\u0440\u044b\u0432 \u043e\u0442\u0434\u0435\u043b\u0430",content:"\u0421\u0442\u0430\u0440\u044b\u0435 \u0434\u043e\u0431\u0440\u044b\u0435 \u0431\u043e\u043c\u0431\u044b. \u042d\u0444\u0444\u0435\u043a- \u0442\u0438\u0432\u043d\u044b\u0435 \u043e\u0440\u0443\u0434\u0438\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0436\u0438\u0432\u043e\u0433\u043e \u0438 \u043d\u0435\u0436\u0438\u0432\u043e\u0433\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u0435. \u041a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0441\u044f\u0442 \u043f\u043e\u0434\u043e\u0440\u0432\u0430\u0442\u044c \u043e\u0431\u044c\u0435\u043a\u0442, \u043e\u043d\u0438 \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f. \u041d\u043e \u0440\u0435\u0434\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u044b \u0441\u0434\u0430\u0442\u044c\u0441\u044f. \u041a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u044b \u043d\u0430 \u043f\u043e\u0434\u0440\u044b\u0432 \u043e\u0434\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u0430. \n\u0411\u0443\u0434\u044c\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u0437\u0440\u044b\u0432\u0430 \u043d\u0430 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u043e\u0445\u043e\u0442\u0430. \n \u041d\u0430\u0448\u0438 \u0431\u043e\u043c\u0431\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u044b \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u044f\u043c\u0438. \u041d\u0438\u043a\u0442\u043e \u043a\u0440\u043e\u043c\u0435 \u0432\u0430\u0441 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u043f\u043e\u0434\u043e\u0440\u0432\u0430\u0442\u044c \u0438 \u0434\u0430\u0436\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043b\u0438\u0448\u044c \u0432 \u0437\u043e\u043d\u0435 \u0437\u0430\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c. \u0421\u043e\u0432\u0435\u0442\u0443\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0425\u043e\u0442\u044f \u044d\u0442\u043e \u0438 \u0442\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.BSM,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u0440\u043e\u0432\u0438",content:'"\u0417\u043d\u0430\u0439 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0440\u0430\u0433\u0430" - \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438\u0441\u0442\u0438\u043d\u0430. \n\u0417\u0430 \u0433\u043e\u0434\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u043d\u0430 \u043c\u044b \u0438\u0437\u0443\u0447\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u0442\u0432\u0430\u0440\u0435\u0439. \u0418 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e- \u0442\u043e\u0440\u044b\u0445. \u0410 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e, \u0447\u0442\u043e \u0438\u0437\u0443\u0447\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u0446\u044b. \u041a\u0440\u043e\u0432\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043d\u0430\u0448\u0438\u043c \u0443\u0447\u0451\u043d\u044b\u043c. \n\u0418\u043c\u0435\u044e\u0449\u0430\u044f\u0441\u044f \u0443 \u0432\u0430\u0441 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0446\u0435\u043d\u0442\u0440\u0438\u0444\u0443\u0433\u0430 \u0434\u043b\u044f \u043a\u0440\u043e\u0432\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u0446\u044b \u043d\u0435 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0432 \u0438\u0445 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430\u043c. \n\u0414\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u0440\u043e\u0432\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c 3 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u0446\u0430. \u0418 \u043f\u043e\u043c\u0435- \u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u0432 \u043f\u0440\u043e\u0431\u0438\u0440\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \n\u041f\u0440\u0438\u043c\u0435\u0441\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442!',position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.changeling,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0413\u0435\u043d\u043e\u043a\u0440\u0430\u0434\u044b",content:"\u0427\u0435\u0440\u0432\u0438 \u0432\u043e\u0437\u043e\u043c\u043d\u0438\u0432\u0448\u0438\u0435 \u0441\u0435\u0431\u044f \u0432\u044b\u0448\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0438\u0434\u043e\u0432 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443\u043c\u0435\u044e\u0442 \u043a\u0440\u0430\u0441\u0442\u044c \u0433\u0435\u043d\u044b \u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \n\u0421\u0432\u043e\u0438\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0431- \u043b\u0435\u043c, \u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u044b. \n\u042d\u0442\u0438 \u0442\u0432\u0430\u0440\u0438 \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u0445\u0438\u0442\u0440\u044b \u0441\u043a\u043e\u043b\u044c \u0438 \u0441\u043a\u0440\u044b\u0442\u043d\u044b. \u041d\u0435 \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0441 \u043d\u0438\u043c\u0438 \u043d\u0438 \u043e \u0447\u0451\u043c! \n\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0434\u0430\u0436\u0435 \u043d\u0430\u043c \u0441\u043b\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0433\u0435\u043d\u043e\u043a\u0440\u0430\u0434\u0430 \u043d\u0435 \u0437\u0430\u043f\u0438\u0445- \u043d\u0443\u0432 \u0435\u0433\u043e \u0432 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u044e \u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432. \u041d\u043e \u043e\u043d\u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u044b\u0434\u0430\u044e\u0442 \u0441\u0435\u0431\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438. \u0418 \u0442\u0430\u043a \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043b\u043e\u0436\u0430\u0442\u0441\u044f \u043d\u0430 \u0434\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0438\u0445 \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0434\u0430\u0439\u0442\u0435 \u0438\u043c \u043f\u043e\u043f\u043b\u044f\u0441\u0430\u0442\u044c, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u0446\u0435\u043d\u0443. \u0418 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0443\u0448\u0430\u0439\u0442\u0435 \u0440\u0430\u0434\u0438\u043e \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442\u0435. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043c\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0445\u0440\u0430\u043d\u0430 \u0443\u0436\u0435 \u043e\u0445\u043e\u0442\u0438\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0438\u0445. \n\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c \u0441 \u044d\u0442\u0438\u043c...",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.vampire,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0430\u043c\u043f\u0438\u0440\u044b",content:"\u0414\u0435\u0448\u0451\u0432\u044b\u0435 \u0440\u043e\u043c\u0430\u043d\u044b, \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438 \u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438 \u0432\u0430\u043c\u043f\u0438\u0440\u043e\u0432 \u043a\u0430\u043a \u0445\u0438\u0449\u043d\u0438\u043a\u043e\u0432 \u043f\u044c\u044e\u0449\u0438\u0445 \u043a\u0440\u043e\u0432\u044c \u043b\u044e\u0434\u0435\u0439 \u0432 \u043d\u043e\u0447\u0438 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e- \u0449\u0438\u0445 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e- \u0441\u0442\u044f\u043c\u0438. \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u0435\u0435 \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0447\u043d\u044b... \n\u041c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043d\u043e \u043d\u0430\u0448\u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0435- \u043d\u0438\u044f \u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u0430 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0439 \u0431\u043b\u044e\u0441\u043f\u0435\u0439\u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u0432\u0430\u043c\u043f\u0438\u0440 \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438 \u0438\u043b\u0438 \u0443\u0433\u0440\u043e\u0436\u0430\u0435\u0442 \u0432\u0430\u0448\u0435\u0439 \u0436\u0438\u0437\u043d\u0438. \u0412\u044b \u0432\u043e\u043b\u044c\u043d\u044b \u0435\u0433\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \n\u0412\u0430\u043c\u043f\u0438\u0440\u044b \u043e\u0447\u0435\u043d\u044c \u043e\u043f\u0430\u0441\u043d\u044b \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438, \u043e\u043d\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043e\u0433\u043b\u0443\u0448\u0430\u0442\u044c \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u0438 \u043f\u043e\u0440\u0430\u0431\u043e\u0449\u0430\u0442\u044c \u0440\u0430\u0437\u0443\u043c \u0441\u0432\u043e\u0438\u0445 \u0436\u0435\u0440\u0442\u0432. \u041d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0438\u043c, \u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u0435 - \u043e\u043d\u0438 \u043b\u0438\u0448\u044c \u0436\u0435\u0440\u0442\u0432\u044b \u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432. \u0418 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u044e \u043f\u043e\u043b\u044c\u0437\u0443...",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.syndicate,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0421\u0438\u043d\u0434\u0438\u043a\u0430\u0442",content:"\u041d\u0430\u0448\u0438 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435. \u0421\u0431\u043e\u0440\u0438\u0449\u0435 \u043c\u043e\u0433\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0444\u0438\u0433\u0443\u0440 \u0432 \u043f\u043e\u0434\u043f\u043e\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043c\u0430\u043b\u043e... \n\u0421\u0438\u043d\u0434\u0438\u043a\u0430\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043a\u0430\u0437\u043e\u0432. \u041d\u043e \u0441\u0430\u043c\u043e\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439, \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u0442\u043e \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0445 \u0438\u0437\u0443\u0447\u0438\u0442, \u0447\u0435\u0440\u0442\u043e\u0439 \u044d\u0442\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b - \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u0430\u044f \u043d\u0435\u043d\u0430\u0432\u0438\u0441\u0442\u044c \u043a \u041d\u0422. \n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0441 \u0430\u0433\u0435\u043d\u0442\u0430\u043c\u0438 \u0421\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043d\u0430\u0448\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u0430. \n\u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u043c\u0435\u0448\u0430\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \u041c\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u043c \u0438\u043c.",position:"bottom-left"})]})]})})})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.allActionsPreview,s=c.blocked_TGUI_rows,d=[{blue:"Button_blue",green:"Button_green",red:"Button_red",disabled:"Button_disabled"}];return(0,o.createComponentVNode)(2,i.Section,{title:"\u041c\u043e\u0434\u0443\u043b\u0438 \u043a\u043e\u0441\u0442\u044e\u043c\u0430",style:{"text-align":"center"},buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0441\u0442\u044e\u043c\u0430! \u0414\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 3 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \u0418\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0441\u0442\u044e\u043c\u0430, \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432",tooltipPosition:"bottom"}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",alignContent:"center",ml:1.5,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"33%",shrink:1,children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u041f\u0440\u0438\u0437\u0440\u0430\u043a",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u0421\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0441\u0440\u0435\u0434\u0438 \u0432\u0440\u0430\u0433\u043e\u0432, \u043d\u0430\u043f\u0430\u0434\u0430\u0439\u0442\u0435 \u0438\u0437 \u0442\u0435\u043d\u0438 \u0438 \u0431\u0443\u0434\u044c\u0442\u0435 \u043d\u0435\u0437\u0440\u0438\u043c\u043e\u0439 \u0443\u0433\u0440\u043e\u0437\u043e\u0439, \u0432\u0441\u0451 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e \u0432\u0430\u0441 \u0438 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0443\u0437\u043d\u0430\u043b! \u0411\u0443\u0434\u044c\u0442\u0435 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b \u043a\u0430\u043a \u043f\u0440\u0438\u0437\u0440\u0430\u043a!",tooltipPosition:"bottom"}),style:{"text-align":"center",background:"rgba(53, 94, 163, 0.8)"}}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_blue",success:0,danger:0,align:"center",children:[(0,o.createComponentVNode)(2,i.Button,{className:s[0]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[0],onClick:function(){return a("give_ability",{style:"smoke",row:"1"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.smoke,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0414\u042b\u041c\u041e\u0412\u0410\u042f \u0417\u0410\u0412\u0415\u0421\u0410",content:"\u0412\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0431\u043b\u0430\u043a\u043e \u0434\u044b\u043c\u0430 \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u0432\u0440\u0430\u0433\u043e\u0432. \n\u042d\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u0430\u0448\u0438\u043c \u0432\u0438\u0437\u043e\u0440\u043e\u043c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0442\u0435\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430. \n\u0410 \u0442\u0430\u043a \u0436\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0433\u043e \u043f\u043e\u0436\u0435\u043b\u0430\u0435\u0442\u0435. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 1000 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 250 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[1]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[1],onClick:function(){return a("give_ability",{style:"ninja_cloak",row:"2"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.ninja_cloak,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041d\u0415\u0412\u0418\u0414\u0418\u041c\u041e\u0421\u0422\u042c",content:"\u0412\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0435\u0431\u044f \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0441\u043a\u0440\u044b\u0432\u0430- \u044e\u0449\u0435\u0435 \u0432\u0430\u0441 \u0438\u0437 \u0432\u0438\u0434\u0443 \u0438 \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0430- \u044e\u0449\u0435\u0435 \u0432\u0430\u0448\u0438 \u0448\u0430\u0433\u0438. \n\u041f\u043e\u043b\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u0440\u0443\u043f\u043a\u043e\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043b\u0435\u0442\u0435\u0442\u044c\u0441\u044f \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0435\u0437\u043a\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u043b\u0438 \u0443\u0434\u0430\u0440\u0430. \n\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0425\u043e\u0442\u044c \u043f\u043e\u043b\u0435 \u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0443\u0431\u0438\u0439\u0446\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0445\u043b\u0430\u0434\u043d\u043e\u043a\u0440\u043e\u0432\u0435\u043d. \n\u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0435\u0434\u043e\u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445 \u043b\u044e\u0434\u0435\u0439. \n\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043b\u0430\u0431\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 15 \u0441\u0435\u043a\u0443\u043d\u0434.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[2]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[2],onClick:function(){return a("give_ability",{style:"ninja_clones",row:"3"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.ninja_clones,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041d\u0415\u0420\u0413\u0415\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0415 \u041a\u041b\u041e\u041d\u042b",content:"\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u0434\u0432\u0443\u0445 \u043a\u043b\u043e\u043d\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u0431\u0438\u0442\u0432\u0435 \u0438 \u0434\u0435\u0437\u043e\u0440\u0438\u0435\u043d\u0442\u0438- \u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \n\u0422\u0430\u043a \u0436\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u0430\u0441 \u0438 \u0432\u0430\u0448\u0438\u0445 \u043a\u043b\u043e\u043d\u043e\u0432 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 \u043f\u0430\u0440\u044b \u043c\u0435\u0442\u0440\u043e\u0432. \n\u041f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e. \u0421\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0435\u0440\u0435\u0442\u044c \u0432\u0430\u0441 \u0437\u0430 4-\u043c\u044f \u0441\u0442\u0435\u043d\u0430\u043c\u0438. \u0411\u0443\u0434\u044c\u0442\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0433\u043e\u0442\u043e\u0432\u044b. \n\u041a\u043b\u043e\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 20 \u0441\u0435\u043a\u0443\u043d\u0434. \u041a\u043b\u043e\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u0448\u0430\u043d\u0441 \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u0442\u0441\u044f \u0430\u0442\u0430\u043a\u0443\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 4000 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 8 \u0441\u0435\u043a\u0443\u043d\u0434.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[3]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[3],onClick:function(){return a("give_ability",{style:"chameleon",row:"4"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.chameleon,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0425\u0410\u041c\u0415\u041b\u0415\u041e\u041d",content:"\u0412\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0435\u0431\u044f \u0433\u043e\u043b\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u0438\u0441\u043a\u0430\u0436\u0430\u044e\u0449\u0435\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u0441\u043b\u0443\u0445\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432. \n\u0412\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0438 \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043a\u0430\u043a \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \n\u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0440 \u043f\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e \u0438 \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0447\u043b\u0435\u043d\u0430 \u044d\u043a\u0438\u043f\u0430\u0436\u0430. \n\u041f\u043e\u043b\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u0440\u0443\u043f\u043a\u043e\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043b\u0435\u0442\u0435\u0442\u044c\u0441\u044f \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0435\u0437\u043a\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u043b\u0438 \u0443\u0434\u0430\u0440\u0430. \n\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \n\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0445\u0430\u043c\u0435\u043b\u0435\u043e\u043d \u0441\u043b\u0430\u0431\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[4]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[4],onClick:function(){return a("give_ability",{style:"ninja_spirit_form",row:"5"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.ninja_spirit_form,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0424\u041e\u0420\u041c\u0410 \u0414\u0423\u0425\u0410",content:"\u0412\u044b \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442\u0435 \u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0430 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u044d\u0442\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \n\u0414\u0435\u043b\u0430\u044f \u0432\u0430\u0448\u0435 \u0442\u0435\u043b\u043e \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u044d\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u0440\u0443\u0435\u0442 \u0432\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u0441\u0442\u0435\u043d\u044b. \n\u042d\u0442\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0430\u0441 \u043d\u0435\u0443\u044f\u0437\u0432\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u043f\u0443\u043b\u044c \u0438 \u043b\u0435\u0437\u0432\u0438\u0439! \n\u041d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0441\u043d\u044f\u0442\u044c \u0441 \u0441\u0435\u0431\u044f \u043d\u0430\u0440\u0443\u0447\u043d\u0438\u043a\u0438, \u0431\u043e\u043b\u044b \u0438 \u0434\u0430\u0436\u0435 \u0432\u044b\u043b\u0435\u0437\u0442\u0438 \u0438\u0437 \u0433\u0440\u043e\u0431\u0430 \u0438\u043b\u0438 \u044f\u0449\u0438\u043a\u0430, \u043e\u043a\u0430\u0436\u0438\u0441\u044c \u0432\u044b \u0442\u0430\u043c \u0437\u0430\u043f\u0435\u0440\u0442\u044b... \n\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u0430. \n\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0434\u0443\u0445\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u044d\u043d\u0435\u0440\u0433\u0438\u0438! \u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u0431\u044a\u0451\u043c\u0430 \u0431\u0430\u0442\u0430\u0440\u0435\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 25 \u0441\u0435\u043a\u0443\u043d\u0434.",position:"right"})]})]})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"33%",shrink:1,children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u0417\u043c\u0435\u0439",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u0423\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435! \u0422\u0440\u044e\u043a\u0438, \u043b\u043e\u0432\u0443\u0448\u043a\u0438, \u0449\u0438\u0442\u044b. \u041f\u043e\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0431\u043e\u0439 \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0443\u0431\u0438\u0439\u0446\u0435\u0439. \u0418\u0437\u0432\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0438 \u0438\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430\u0445\u043e\u0434\u044f \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0412\u0440\u0430\u0433\u0438 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0433\u0440\u044b\u0437\u0443\u043d\u044b, \u0447\u044c\u0451 \u043b\u043e\u0433\u043e\u0432\u043e \u043d\u0430\u0432\u0435\u0441\u0442\u0438\u043b \u0437\u043c\u0435\u0439!",tooltipPosition:"bottom"}),style:{"text-align":"center",background:"rgba(0, 174, 208, 0.15)"}}),(0,o.createComponentVNode)(2,i.NoticeBox,{success:0,danger:0,align:"center",children:[(0,o.createComponentVNode)(2,i.Button,{className:s[0]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[0],onClick:function(){return a("give_ability",{style:"kunai",row:"1"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.kunai,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0421\u0422\u0420\u041e\u0415\u041d\u041d\u041e\u0415 \u0414\u0416\u041e\u0425\u042c\u0401",content:"\u0422\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u0430\u043a \u0428\u044d\u043d\u0431\u044f\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u041a\u0438\u043d\u0436\u0430\u043b \u043d\u0430 \u0446\u0435\u043f\u0438. \n\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432 \u043a\u043e\u0441\u0442\u044e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u0442\u044f\u043d\u0443\u0442\u044c \u043a \u0441\u0435\u0431\u0435 \u0436\u0435\u0440\u0442\u0432\u0443 \u0437\u0430 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \n\u041e\u0440\u0443\u0436\u0438\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u043e\u043b\u0433\u0438\u0445 \u0431\u043e\u0451\u0432, \u043d\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0436\u0435\u0440\u0442\u0432\u044b - \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u0434\u0430\u0440\u0430! \n\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u043f\u0440\u043e\u043c\u0430\u0445\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u0435. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0430: 500 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 5 \u0441\u0435\u043a\u0443\u043d\u0434.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[1]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[1],onClick:function(){return a("give_ability",{style:"chem_injector",row:"2"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.chem_injector,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0418\u0421\u0426\u0415\u041b\u042f\u042e\u0429\u0418\u0419 \u041a\u041e\u041a\u0422\u0415\u0419\u041b\u042c",content:"\u0412\u0432\u043e\u0434\u0438\u0442 \u0432 \u0432\u0430\u0441 \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0435\u0447\u0435\u0431\u043d\u0443\u044e \u0441\u043c\u0435\u0441\u044c. \u0421\u043f\u043e\u0441\u043e\u0431\u043d\u0443\u044e \u0437\u0430\u043b\u0435\u0447\u0438\u0442\u044c \u0434\u0430\u0436\u0435 \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0441\u0442\u0438 \u0438 \u043e\u0442\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438. \n\u041f\u0440\u0435\u043f\u0430\u0440\u0430\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442- \n\u0432\u0435\u043d\u043d\u043e-\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u0434\u043e\u043a\u0441\u044b \u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u0430! \n\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u043e\u0437\u0438\u0440\u043e\u0432\u043a\u0435 \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u043f\u0430\u0441\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041d\u0435 \u0432\u0432\u043e\u0434\u0438\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 30 \u0435\u0434. \u043f\u0440\u0435\u043f\u0430\u0440\u0430\u0442\u0430 \u0432 \u0432\u0430\u0448 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c! \n\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u0430\u0442\u044b \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0438\u043c\u0435\u0435\u0442 3 \u0437\u0430\u0440\u044f\u0434\u0430. \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u043e\u0432 \u0431\u043b\u044e\u0441\u043f\u0435\u0439\u0441 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u043e\u0432 \u043f\u043e\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u0441\u0442\u044e\u043c.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[2]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[2],onClick:function(){return a("give_ability",{style:"emergency_blink",row:"3"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.emergency_blink,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041a\u0421\u0422\u0420\u0415\u041d\u041d\u0410\u042f \u0422\u0415\u041b\u0415\u041f\u041e\u0420\u0422\u0410\u0426\u0418\u042f",content:"\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u0437\u043e\u043d\u0443 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 \u043e\u043a\u043e\u043b\u043e \u0434\u0432\u0443\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043c\u0435\u0442\u0440\u043e\u0432. \n\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043c\u043e\u0437\u0433\u043e\u0432\u044b\u0435 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0432\u043e\u0438\u043d\u044b \u043a\u043b\u0430\u043d\u0430, \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0434\u0430\u0436\u0435 \u0432\u043e \u0441\u043d\u0435. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 1500 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[3]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[3],onClick:function(){return a("give_ability",{style:"caltrop",row:"4"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.caltrop,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041b\u0415\u041a\u0422\u0420\u041e-\u0427\u0415\u0421\u041d\u041e\u041a",content:"\u0427\u0430\u0449\u0435 \u0438\u0445 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043b\u0442\u0440\u043e\u043f\u044b, \u0438\u0437-\u0437\u0430 \u0437\u0430\u043f\u0443\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0439 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0441\u044a\u0435\u0441\u0442\u043d\u044b\u043c \u0447\u0435\u0441\u043d\u043e\u043a\u043e\u043c. \n\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0437\u0430\u0434\u0438 \u0432\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u043f\u0440\u0435\u0441\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u043b\u043e\u0432\u0443\u0448\u043a\u0438. \n\u041b\u043e\u0432\u0443\u0448\u043a\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10 \u0441\u0435\u043a\u0443\u043d\u0434. \u0422\u0430\u043a \u0436\u0435 \u043e\u043d\u0438 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0442 - \u0435\u0441\u043b\u0438 \u043d\u0430 \u043d\u0438\u0445 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c. \n\u0411\u043e\u043b\u044c \u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u043d\u0430 \u043d\u0438\u0445 \u043d\u0430\u0441\u0442\u0438\u0433\u043d\u0435\u0442 \u0434\u0430\u0436\u0435 \u0440\u043e\u0431\u043e\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d- \u043d\u044b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438. \n\u0412\u044b \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u043e\u0442 \u043d\u0438\u0445. \u041d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0439\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0438 \u0436\u0435 \u043b\u043e\u0432\u0443\u0448\u043a\u0438! \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 1500 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0430.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[4]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[4],onClick:function(){return a("give_ability",{style:"cloning",row:"5"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.cloning,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0422\u041e\u0420\u041e\u0419 \u0428\u0410\u041d\u0421",content:"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043c\u043d\u043e\u0433\u0438\u0435 \u0443\u0431\u0438\u0439\u0446\u044b \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u044f \u0441\u0432\u043e\u0438 \u043c\u0438\u0441\u0441\u0438\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u043b\u0438 \u0441\u0430\u043c\u043e\u0443\u0431\u0438\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043b\u0430\u043f\u0430\u0445 \u0432\u0440\u0430\u0433\u0430. \n\u0421\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430. \u041c\u043e\u0449\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0432\u0430\u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u0442\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430. \n\u042d\u0442\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u0448\u0430\u043d\u0441, \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0432\u0430\u0441 \u043a \u0441\u0435\u0431\u0435 \u0438 \u0438\u0437\u043b\u0435\u0447\u0438\u0432 \u043b\u044e\u0431\u044b\u0435 \u0442\u0440\u0430\u0432\u043c\u044b. \n\u041c\u044b \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043f\u0440\u043e \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0438\u0434\u0435\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u043b\u0435\u043d\u043e\u0432 \u043a\u043b\u0430\u043d\u0430. \u041d\u043e \u0443\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u0430\u0441, \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \n\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0438 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044e. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043f\u0430\u0441\u0451\u0442 \u0432\u0430\u0441 \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \n\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0440\u0438 \u0441\u043c\u0435\u0440\u0442\u0438.",position:"right"})]})]})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"33%",shrink:1,children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u0442\u0430\u043b\u044c",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u042f\u0440\u043e\u0441\u0442\u044c \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043b\u044e\u0434\u044f\u043c. \u0421\u0438\u043b\u0430, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043e\u0440\u0443\u0434\u0438\u044f \u0432\u044b\u0448\u0435 \u0438\u0445 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0420\u0430\u0437\u0438\u0442\u0435 \u0438\u0445 \u043a\u0430\u043a \u0445\u0438\u0449\u043d\u0438\u043a \u0447\u0442\u043e \u0440\u0430\u0437\u0438\u0442 \u0441\u0432\u043e\u044e \u0434\u043e\u0431\u044b\u0447\u0443. \u041f\u043e\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0432\u043a\u0443\u0441 \u0441\u0442\u0430\u043b\u0438!",tooltipPosition:"bottom"}),style:{"text-align":"center",background:"rgba(80, 20, 20, 1)"}}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_red",success:0,danger:0,align:"center",children:[(0,o.createComponentVNode)(2,i.Button,{className:s[0]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[0],onClick:function(){return a("give_ability",{style:"shuriken",row:"1"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.shuriken,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041d\u0415\u0420\u0413\u0415\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0415 \u0421\u042e\u0420\u0418\u041a\u0415\u041d\u042b",content:"\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u0441\u043a\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043a\u0440\u044b\u0442\u043e\u0435 \u0432 \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0430\u0445 \u043a\u043e\u0441\u0442\u044e\u043c\u0430. \n\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u043e \u0442\u0440\u0438 \u0441\u044e\u0440\u0438\u043a\u0435\u043d\u0430, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0436\u0430\u0442\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438, \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e. \n\u0421\u044e\u0440\u0438\u043a\u0435\u043d\u044b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0438\u0437\u043d\u0443\u0440\u044f\u044e\u0442 \u0432\u0440\u0430\u0433\u043e\u0432 \u0438 \u043d\u0430\u043d\u043e\u0441\u044f\u0442 \u0441\u043b\u0430\u0431\u044b\u0439 \u043e\u0436\u043e\u0433\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u043d. \n\u0422\u0430\u043a \u0436\u0435 \u043e\u043d\u0438 \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0435\u043a\u043b\u043e, \u043a\u0430\u043a \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043b\u0430\u0437\u0435\u0440\u043d\u044b\u0435 \u0441\u043d\u0430\u0440\u044f\u0434\u044b. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0430: 300 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[1]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[1],onClick:function(){return a("give_ability",{style:"adrenal",row:"2"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.adrenal,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0421\u041f\u041b\u0415\u0421\u041a \u0410\u0414\u0420\u0415\u041d\u0410\u041b\u0418\u041d\u0410",content:"\u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442 \u0432 \u0432\u0430\u0441 \u043c\u043e\u0449\u043d\u0443\u044e \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u044b\u0432\u043e\u0440\u043e\u0442\u043a\u0443 \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0449\u0443\u044e \u0432\u0430\u0441 \u0432 \u0431\u043e\u044e \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0443\u044e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u043a\u043b\u0435\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0433\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432. \n\u041a\u043e\u0441\u0442\u044e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0441\u044b\u0432\u043e\u0440\u043e\u0442\u043a\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0440\u0430\u043d\u0430. \u0427\u0442\u043e \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0434\u0430\u0451\u0442 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u0432 \u0432\u0438\u0434\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0434\u0438\u044f \u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \n\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u0430\u0442\u044b \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0436\u0435\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u043e\u0432 \u0443\u0440\u0430\u043d\u0430 \u043f\u043e\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u0441\u0442\u044e\u043c.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[2]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[2],onClick:function(){return a("give_ability",{style:"emp",row:"3"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.emp,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041b\u0415\u041a\u0422\u0420\u041e\u041c\u0410\u0413\u041d\u0418\u0422\u041d\u042b\u0419 \u0412\u0417\u0420\u042b\u0412",content:"\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043c\u0430\u0433\u043d\u0438\u0442\u043d\u044b\u0435 \u0432\u043e\u043b\u043d\u044b \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0442, \u043f\u043e\u0434\u0440\u044b\u0432\u0430\u044e\u0442 \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0430\u044e\u0442 - \u043a\u0438\u0431\u043e\u0440\u0433\u043e\u0432, \u0434\u0440\u043e\u043d\u043e\u0432, \u041a\u041f\u0411, \u044d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435, \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0421\u0432\u0435\u0442\u043e\u0448\u0443\u043c\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0432\u044f\u0437\u0438 \u0438 \u0442.\u0434. \n\u042d\u0442\u043e\u0442 \u0432\u0437\u0440\u044b\u0432 \u043c\u043e\u0436\u0435\u0442 \u043a\u0430\u043a \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u0432 \u0431\u043e\u044e, \u0442\u0430\u043a \u0438 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0430\u0432\u0440\u0435\u0434\u0438\u0442\u044c. \u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0439\u0442\u0435 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c. \n\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u043e \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0449\u0435\u043c \u043e\u0442 \u0441\u0432\u0435\u0442\u0430 \u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u0438\u0437\u043e\u0440\u0430. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u0435 \u043e\u0441\u043b\u0435\u043f\u043d\u0443\u0442\u044c, \u043f\u0440\u0438 \u043f\u043e\u0434\u0440\u044b\u0432\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \n\u0412\u0437\u0440\u044b\u0432 - \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0430\u0441. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 5000 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[3]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[3],onClick:function(){return a("give_ability",{style:"energynet",row:"4"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.energynet,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041d\u0415\u0420\u0413\u0415\u0422\u0418\u0427\u0415\u0421\u041a\u0410\u042f \u0421\u0415\u0422\u042c",content:"\u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043b\u043e\u0432\u0438\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0432\u0430\u043c\u0438 \u0446\u0435\u043b\u044c \u0432 \u043e\u0431\u0435\u0437\u0434\u0432\u0438\u0436\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u043b\u043e\u0432\u0443\u0448\u043a\u0443. \n\u0418\u0437 \u043b\u043e\u0432\u0443\u0448\u043a\u0438 \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0432 \u0435\u0451 \u043b\u044e\u0431\u044b\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c. \n\u041e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0435\u0439\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0430\u0433\u0430. \n\u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0432 \u043d\u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0445 \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0430\u0434\u043e\u0435\u0434\u043b\u0438\u0432\u044b\u0445 \u043e\u0445\u0440\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u0442\u043e\u0432. \n\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0441\u0435\u0442\u044c \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0436\u0435\u0440\u0442\u0432\u0435 \u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0432\u0430\u0441. \n\u0422\u0430\u043a \u0436\u0435 \u0441\u0435\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043a\u0438\u043d\u0443\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0451\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u0435\u0439. \n\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0441\u0435\u0442\u0438 - \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0430\u0441. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 4000 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[4]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[4],onClick:function(){return a("give_ability",{style:"spider_red",row:"5"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.spider_red,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0411\u041e\u0415\u0412\u041e\u0415 \u0418\u0421\u041a\u0423\u0421\u0421\u0422\u0412\u041e \n\u041f\u041e\u041b\u0417\u0423\u0427\u0415\u0419 \u0412\u0414\u041e\u0412\u042b",content:"\u0411\u043e\u0435\u0432\u043e\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e \u043d\u0438\u043d\u0434\u0437\u044f \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0451\u043c\u043e\u0432. \n\u0412 \u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u0451\u043c\u044b: \n\u0412\u044b\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0440\u0443\u043a\u0438 - \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0435\u0440\u0442\u0432\u0443 \u0432\u044b\u0440\u043e\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0451 \u043e\u0440\u0443\u0436\u0438\u0435. \n\u0423\u0434\u0430\u0440 \u043b\u0430\u0434\u043e\u043d\u044c\u044e - \u043e\u0442\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0436\u0435\u0440\u0442\u0432\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u0442 \u0432\u0430\u0441, \u043b\u0438\u0448\u0430\u044f \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u0438\u044f. \n\u041f\u0435\u0440\u0435\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u0448\u0435\u0438 - \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u0435\u0437\u0433\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043b\u0435\u0436\u0430\u0447\u0443\u044e \u0436\u0435\u0440\u0442\u0432\u0443 \u043a\u0430\u0442\u0430\u043d\u043e\u0439 \u0432\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0443\u043a\u0435. \n\u042d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0442\u043e\u0440\u043d\u0430\u0434\u043e - \u0440\u0430\u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0432\u0440\u0430\u0433\u043e\u0432 \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0430\u0441 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0431\u043b\u0430\u043a\u043e \u0434\u044b\u043c\u0430 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0434\u044b\u043c\u043e\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u0422\u0430\u043a \u0436\u0435 \u0432\u044b \u043e\u0431\u0443\u0447\u0430\u0435\u0442\u0435\u0441\u044c \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0448\u0430\u043d\u0441\u043e\u043c \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u043d\u044f\u0440\u044f\u0434\u044b \u0432\u0440\u0430\u0433\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.",position:"right"})]})]})]})]})})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,i.Section,{title:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0448\u0430\u0442\u0442\u043b\u043e\u043c",style:{"text-align":"center"},buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u041f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0438\u043c \u043b\u0438\u0447\u043d\u044b\u043c \u0448\u0430\u0442\u0442\u043b\u043e\u043c. \u0422\u0430\u043a \u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0443 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0441\u0430\u043c\u043e\u0433\u043e \u0448\u0430\u0442\u0442\u043b\u0430!",tooltipPosition:"right"}),children:(0,o.createComponentVNode)(2,i.Flex,{ml:2,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041f\u043e\u0437\u0438\u0446\u0438\u044f",children:l.status?l.status:(0,o.createComponentVNode)(2,i.NoticeBox,{color:"red",children:"Shuttle Missing"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0412\u0430\u0448\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f",children:l.player_pos}),!!l.shuttle&&(!!l.docking_ports_len&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0442\u0442\u043b",children:l.docking_ports.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-right",content:e.name,onClick:function(){return c("move",{move:e.id})}},e.name)}))})||(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"Status",color:"red",children:(0,o.createComponentVNode)(2,i.NoticeBox,{color:"red",children:"Shuttle Locked"})}),!!l.admin_controlled&&(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f",children:(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation-circle",content:"\u0417\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e",disabled:!l.status,onClick:function(){return c("request")}})})],0))]})})})};t.ShuttleConsole=p;var m=function(e,t){var n=(0,r.useBackend)(t).data,a=n.randomPercent,c=n.allActionsPreview,l=n.color_choice;return(0,o.createComponentVNode)(2,i.Section,{stretchContents:!0,children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:l,value:a,minValue:0,maxValue:100,children:(0,o.createVNode)(1,"center",null,(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_"+l,mt:1,children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+c["spider_"+l],style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createVNode)(1,"br"),"Loading ",a+"%"]}),2)})})},h=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.state={lastText:"text do be there",currentDisplay:[]},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=r.prototype;return a.tick=function(){var e=this.props,t=this.state;e.allMessages===t.lastText||e.end_terminal?e.end_terminal&&(clearTimeout(this.timer),setTimeout(e.onFinished,e.finishedTimeout)):(t.currentDisplay.push(e.allMessages),t.lastText=e.allMessages)},a.componentDidMount=function(){var e=this,t=this.props.linesPerSecond,n=void 0===t?2.5:t;this.timer=setInterval((function(){return e.tick()}),1e3/n)},a.componentWillUnmount=function(){clearTimeout(this.timer)},a.render=function(){return(0,o.createComponentVNode)(2,i.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)},function(e,t,n){"use strict";t.__esModule=!0,t.StationAlertConsoleContent=t.StationAlertConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.StationAlertConsole=function(){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t).data.alarms||[];return Object.keys(n).map((function(e){var t,r;return(0,o.createComponentVNode)(2,i.Section,{title:e+" Alarms",children:(0,o.createVNode)(1,"ul",null,0===(null==(t=n[e])?void 0:t.length)?(0,o.createVNode)(1,"li","color-good","Systems Nominal",16):null==(r=n[e])?void 0:r.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)})),0)},e)}))};t.StationAlertConsoleContent=c},function(e,t,n){"use strict";t.__esModule=!0,t.SuitStorage=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.SuitStorage=function(e,t){var n=(0,r.useBackend)(t).data.uv;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{display:"flex",className:"Layout__content--flexColumn",children:[!!n&&(0,o.createComponentVNode)(2,i.Dimmer,{backgroundColor:"black",opacity:.85,children:(0,o.createComponentVNode)(2,i.Flex,{children:(0,o.createComponentVNode)(2,i.Flex.Item,{bold:!0,textAlign:"center",mb:2,children:[(0,o.createComponentVNode)(2,i.Icon,{name:"spinner",spin:1,size:4,mb:4}),(0,o.createVNode)(1,"br"),"Disinfection of contents in progress..."]})})}),(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,s)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,s=c.helmet,d=c.suit,u=c.magboots,p=c.mask,m=c.storage,h=c.open,f=c.locked;return(0,o.createComponentVNode)(2,i.Section,{title:"Stored Items",flexGrow:"1",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:f?"Unlock":"Lock",icon:f?"unlock":"lock",disabled:h,onClick:function(){return a("toggle_lock")}}),(0,o.createComponentVNode)(2,i.Button,{content:h?"Close unit":"Open unit",icon:h?"times-circle":"expand",color:h?"red":"green",disabled:f,onClick:function(){return a("toggle_open")}})],4),children:h&&!f?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,l,{object:s,label:"Helmet",missingText:"helmet",eject:"dispense_helmet"}),(0,o.createComponentVNode)(2,l,{object:d,label:"Suit",missingText:"suit",eject:"dispense_suit"}),(0,o.createComponentVNode)(2,l,{object:u,label:"Magboots",missingText:"magboots",eject:"dispense_magboots"}),(0,o.createComponentVNode)(2,l,{object:p,label:"Breathmask",missingText:"mask",eject:"dispense_mask"}),(0,o.createComponentVNode)(2,l,{object:m,label:"Storage",missingText:"storage item",eject:"dispense_storage"})]}):(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{bold:!0,grow:"1",textAlign:"center",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:f?"lock":"exclamation-circle",size:"5",mb:3}),(0,o.createVNode)(1,"br"),f?"The unit is locked.":"The unit is closed."]})})})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=(n.data,e.object),l=e.label,s=e.missingText,d=e.eject;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:l,children:(0,o.createComponentVNode)(2,i.Box,{my:.5,children:c?(0,o.createComponentVNode)(2,i.Button,{my:-1,icon:"eject",content:c,onClick:function(){return a(d)}}):(0,o.createComponentVNode)(2,i.Box,{color:"silver",bold:!0,children:["No ",s," found."]})})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data;return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"cog",textAlign:"center",content:"Start Disinfection Cycle",disabled:c.locked,onClick:function(){return a("cook")}})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SupermatterMonitor=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(80);t.SupermatterMonitor=function(e,t){var n=(0,r.useBackend)(t);n.act;return 0===n.data.active?(0,o.createComponentVNode)(2,l):(0,o.createComponentVNode)(2,s)};var l=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Detected Supermatter Shards",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Refresh",onClick:function(){return l("refresh")}}),children:(0,o.createComponentVNode)(2,i.Box,{m:1,children:0===s.supermatters.length?(0,o.createVNode)(1,"h3",null,"No shards detected",16):(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,c.TableCell,{children:"Area"}),(0,o.createComponentVNode)(2,c.TableCell,{children:"Integrity"}),(0,o.createComponentVNode)(2,c.TableCell,{children:"Details"})]}),s.supermatters.map((function(e){return(0,o.createComponentVNode)(2,c.TableRow,{children:[(0,o.createComponentVNode)(2,c.TableCell,{children:e.area_name}),(0,o.createComponentVNode)(2,c.TableCell,{children:[e.integrity,"%"]}),(0,o.createComponentVNode)(2,c.TableCell,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"sign-in-alt",content:"View",onClick:function(){return l("view",{view:e.uid})}})})]},e)}))]})})})})})},s=function(e,t){var n,c,l,s=(0,r.useBackend)(t),d=s.act,u=s.data;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Crystal Status",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"caret-square-left",content:"Back",onClick:function(){return d("back")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Core Integrity",children:(0,o.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[95,Infinity],average:[80,94],bad:[-Infinity,79]},minValue:"0",maxValue:"100",value:u.SM_integrity,children:[u.SM_integrity,"%"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Relative EER",children:(0,o.createComponentVNode)(2,i.Box,{color:(l=u.SM_power,l>300?"bad":l>150?"average":"good"),children:[u.SM_power," MeV/cm3"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,i.Box,{color:(c=u.SM_ambienttemp,c>5e3?"bad":c>4e3?"average":"good"),children:[u.SM_ambienttemp," K"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,i.Box,{color:(n=u.SM_ambientpressure,n>1e4?"bad":n>5e3?"average":"good"),children:[u.SM_ambientpressure," kPa"]})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Gas Composition",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen",children:[u.SM_gas_O2,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Carbon Dioxide",children:[u.SM_gas_CO2,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nitrogen",children:[u.SM_gas_N2,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Plasma",children:[u.SM_gas_PL,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Other",children:[u.SM_gas_OTHER,"%"]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SyndicateComputerSimple=void 0;var o=n(0),r=n(1),i=n(2),a=(n(52),n(3));t.SyndicateComputerSimple=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,a.Window,{theme:"syndicate",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:l.rows.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.title,buttons:(0,o.createComponentVNode)(2,i.Button,{content:e.buttontitle,disabled:e.buttondisabled,tooltip:e.buttontooltip,tooltipPosition:"left",onClick:function(){return c(e.buttonact)}}),children:[e.status,!!e.bullets&&(0,o.createComponentVNode)(2,i.Box,{children:e.bullets.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:e},e)}))})]},e.title)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SyndieCargoConsole=void 0;var o=n(0),r=n(43),i=n(24),a=n(1),c=n(2),l=n(3),s=(n(52),n(18));t.SyndieCargoConsole=function(e,t){return(0,o.createComponentVNode)(2,l.Window,{theme:"syndicate",children:(0,o.createComponentVNode)(2,l.Window.Content,{children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})})};var d=function(e,t){var n=(0,a.useLocalState)(t,"contentsModal",null),r=n[0],i=n[1],l=(0,a.useLocalState)(t,"contentsModalTitle",null),s=l[0],d=l[1];return null!==r&&null!==s?(0,o.createComponentVNode)(2,c.Modal,{maxWidth:"75%",width:window.innerWidth+"px",maxHeight:.75*window.innerHeight+"px",mx:"auto",children:[(0,o.createComponentVNode)(2,c.Box,{width:"100%",bold:!0,children:(0,o.createVNode)(1,"h1",null,[s,(0,o.createTextVNode)(" contents:")],0)}),(0,o.createComponentVNode)(2,c.Box,{children:r.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:["- ",e]},e)}))}),(0,o.createComponentVNode)(2,c.Box,{m:2,children:(0,o.createComponentVNode)(2,c.Button,{content:"Close",onClick:function(){i(null),d(null)}})})]}):void 0},u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.is_public,s=void 0===l?0:l,d=i.cash,u=i.wait_time,p=i.is_cooldown,m=i.telepads_status,h=i.adminAddCash,f=m,C="",g=0,N="";return"Pads not linked!"===m?(g=0,C="Attempts to link telepads to the console.",N="Link pads"):p?p&&(N="Cooldown...",C="Pads are cooling off...",g=1,f=1!==u?m+" (ETA: "+u+" seconds)":m+" (ETA: "+u+" second)"):(g=0,C="Teleports your crates to the market. A reminder, some of the crates are directly stolen from NT trading routes. That means they can be locked. We are NOT sorry for the inconvenience",N="Teleport"),(0,o.createComponentVNode)(2,c.Section,{title:"Status",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[0===s&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Money Available",children:[d,(0,o.createComponentVNode)(2,c.Button,{tooltip:"Withdraw money from the console",content:"Withdraw",onClick:function(){return r("withdraw",d)}}),(0,o.createComponentVNode)(2,c.Button,{content:h,tooltip:"Bless the players with da money!",onClick:function(){return r("add_money",d)}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Telepads Status",children:f}),0===s&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,c.Button,{content:N,tooltip:C,disabled:g,onClick:function(){return r("teleport")}}),(0,o.createComponentVNode)(2,c.Button,{content:"View Syndicate Black Market Log",onClick:function(){return r("showMessages")}})]})]})})},p=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data,u=d.categories,p=d.supply_packs,m=(0,a.useSharedState)(t,"category","Emergency"),h=m[0],f=m[1],C=(0,a.useSharedState)(t,"search_text",""),g=C[0],N=C[1],b=(0,a.useLocalState)(t,"contentsModal",null),V=(b[0],b[1]),v=(0,a.useLocalState)(t,"contentsModalTitle",null),x=(v[0],v[1]),y=(0,s.createSearch)(g,(function(e){return e.name})),k=(0,r.flow)([(0,i.filter)((function(e){return e.cat===u.filter((function(e){return e.name===h}))[0].category||g})),g&&(0,i.filter)(y),(0,i.sortBy)((function(e){return e.name.toLowerCase()}))])(p),w="Crate Catalogue";return g?w="Results for '"+g+"':":h&&(w="Browsing "+h),(0,o.createComponentVNode)(2,c.Section,{title:w,buttons:(0,o.createComponentVNode)(2,c.Dropdown,{width:"190px",options:u.map((function(e){return e.name})),selected:h,onSelected:function(e){return f(e)}}),children:[(0,o.createComponentVNode)(2,c.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return N(t)},mb:1}),(0,o.createComponentVNode)(2,c.Box,{maxHeight:25,overflowY:"auto",overflowX:"hidden",children:(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:k.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{bold:!0,children:[e.name," (",e.cost," Credits)"]}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,c.Button,{content:"Order 1",icon:"shopping-cart",onClick:function(){return l("order",{crate:e.ref,multiple:0})}}),(0,o.createComponentVNode)(2,c.Button,{content:"Order Multiple",icon:"cart-plus",onClick:function(){return l("order",{crate:e.ref,multiple:1})}}),(0,o.createComponentVNode)(2,c.Button,{content:"View Contents",icon:"search",onClick:function(){V(e.contents),x(e.name)}})]})]},e.name)}))})})]})},m=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.requests,s=i.canapprove,d=i.orders;return(0,o.createComponentVNode)(2,c.Section,{title:"Details",children:(0,o.createComponentVNode)(2,c.Box,{maxHeight:15,overflowY:"auto",overflowX:"hidden",children:[(0,o.createComponentVNode)(2,c.Box,{bold:!0,children:"Requests"}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:l.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Reason: ",e.comment]})]}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,c.Button,{content:"Approve",color:"green",disabled:!s,onClick:function(){return r("approve",{ordernum:e.ordernum})}}),(0,o.createComponentVNode)(2,c.Button,{content:"Deny",color:"red",onClick:function(){return r("deny",{ordernum:e.ordernum})}})]})]},e.ordernum)}))}),(0,o.createComponentVNode)(2,c.Box,{bold:!0,children:"Confirmed Orders"}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Reason: ",e.comment]})]})},e.ordernum)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TTSSeedsExplorerContent=t.TTSSeedsExplorer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c={0:"\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435",1:"Tier I",2:"Tier II",3:"Tier III",4:"Tier IV"},l={"\u041c\u0443\u0436\u0441\u043a\u043e\u0439":{icon:"mars",color:"blue"},"\u0416\u0435\u043d\u0441\u043a\u0438\u0439":{icon:"venus",color:"purple"},"\u041b\u044e\u0431\u043e\u0439":{icon:"venus-mars",color:"white"}},s=function(e,t,n,r){return void 0===r&&(r=null),e.map((function(e){var a,c=null!=(a=e[r])?a:e;return(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:t.includes(e),content:c,onClick:function(){t.includes(e)?n(t.filter((function(t){var n;return(null!=(n=t[r])?n:t)!==e}))):n([e].concat(t))}},c)}))};t.TTSSeedsExplorer=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:(0,o.createComponentVNode)(2,d)})})};var d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,d=n.data,u=d.providers,p=d.seeds,m=d.selected_seed,h=d.phrases,f=d.donator_level,C=p.map((function(e){return e.category})).filter((function(e,t,n){return n.indexOf(e)===t})),g=p.map((function(e){return e.gender})).filter((function(e,t,n){return n.indexOf(e)===t})),N=p.map((function(e){return e.donator_level})).filter((function(e,t,n){return n.indexOf(e)===t})).map((function(e){return c[e]})),b=(0,r.useLocalState)(t,"selectedProviders",u),V=b[0],v=b[1],x=(0,r.useLocalState)(t,"selectedGenders",g),y=x[0],k=x[1],w=(0,r.useLocalState)(t,"selectedCategories",C),_=w[0],B=w[1],S=(0,r.useLocalState)(t,"selectedDonatorLevels",N),L=S[0],A=S[1],I=(0,r.useLocalState)(t,"selectedPhrase",h[0]),E=I[0],D=I[1],T=(0,r.useLocalState)(t,"searchtext",""),F=T[0],M=T[1],P=s(u,V,v,"name"),O=s(g,y,k),R=s(C,_,B),j=s(N,L,A),U=(0,o.createComponentVNode)(2,i.Dropdown,{options:h,selected:E.replace(/(.{25})..+/,"$1..."),width:"220px",onSelected:function(e){return D(e)}}),z=(0,o.createComponentVNode)(2,i.Input,{placeholder:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435...",fluid:!0,onInput:function(e,t){return M(t)}}),W=p.sort((function(e,t){var n=e.name.toLowerCase(),o=t.name.toLowerCase();return n>o?1:n0&&m!==e.name?"orange":"white",children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,opacity:m===e.name?.5:.25,textAlign:"left",children:e.category}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,opacity:.5,textColor:m===e.name?"white":l[e.gender].color,textAlign:"left",children:(0,o.createComponentVNode)(2,i.Icon,{mx:1,size:1.2,name:l[e.gender].icon})}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,opacity:.5,textColor:"white",textAlign:"right",children:e.donator_level>0&&(0,o.createFragment)([c[e.donator_level],(0,o.createComponentVNode)(2,i.Icon,{ml:1,mr:2,name:"coins"})],0)})]},e.name)}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"\u0424\u0438\u043b\u044c\u0442\u0440\u044b",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b",children:P}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041f\u043e\u043b",children:O}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438",children:R}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438",children:j}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0424\u0440\u0430\u0437\u0430",children:U}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041f\u043e\u0438\u0441\u043a",children:z})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"\u0413\u043e\u043b\u043e\u0441\u0430 ("+W.length+"/"+p.length+")",flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Table,{children:H})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:[(0,o.createComponentVNode)(2,i.Box,{children:"\u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u0447\u0430\u0441\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043e\u0432 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430."}),(0,o.createComponentVNode)(2,i.Box,{mt:2,italic:!0,children:"\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c Discord-\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435."})]})})],4)};t.TTSSeedsExplorerContent=d},function(e,t,n){"use strict";t.__esModule=!0,t.TachyonArrayContent=t.TachyonArray=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.TachyonArray=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.records,u=void 0===d?[]:d,p=s.explosion_target,m=s.toxins_tech,h=s.printing;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shift's Target",children:p}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Toxins Level",children:m}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Administration",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"print",content:"Print All Logs",disabled:!u.length||h,align:"center",onClick:function(){return l("print_logs")}}),(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash",content:"Delete All Logs",disabled:!u.length,color:"bad",align:"center",onClick:function(){return l("delete_logs")}})]})]})}),u.length?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No Records"})]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.records,l=void 0===c?[]:c;return(0,o.createComponentVNode)(2,i.Section,{title:"Logged Explosions",children:(0,o.createComponentVNode)(2,i.Flex,{children:(0,o.createComponentVNode)(2,i.Flex.Item,{children:(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:"Time"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Epicenter"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Actual Size"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Theoretical Size"})]}),l.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.logged_time}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.epicenter}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.actual_size_message}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.theoretical_size_message}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash",content:"Delete",color:"bad",onClick:function(){return a("delete_record",{index:e.index})}})})]},e.index)}))]})})})})};t.TachyonArrayContent=c},function(e,t,n){"use strict";t.__esModule=!0,t.Tank=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.Tank=function(e,t){var n,c=(0,r.useBackend)(t),l=c.act,s=c.data;return n=s.has_mask?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mask",children:(0,o.createComponentVNode)(2,i.Button,{icon:s.connected?"check":"times",content:s.connected?"Internals On":"Internals Off",selected:s.connected,onClick:function(){return l("internals")}})}):(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mask",color:"red",children:"No Mask Equipped"}),(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tank Pressure",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:s.tankPressure/1013,ranges:{good:[.35,Infinity],average:[.15,.35],bad:[-Infinity,.15]},children:s.tankPressure+" kPa"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Release Pressure",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:s.ReleasePressure===s.minReleasePressure,tooltip:"Min",onClick:function(){return l("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,value:parseFloat(s.releasePressure),width:"65px",unit:"kPa",minValue:s.minReleasePressure,maxValue:s.maxReleasePressure,onChange:function(e,t){return l("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:s.ReleasePressure===s.maxReleasePressure,tooltip:"Max",onClick:function(){return l("pressure",{pressure:"max"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"undo",content:"",disabled:s.ReleasePressure===s.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),i=n(2),a=n(3);t.TankDispenser=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.o_tanks,d=l.p_tanks;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Dispense Oxygen Tank ("+s+")",disabled:0===s,icon:"arrow-circle-down",onClick:function(){return c("oxygen")}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Dispense Plasma Tank ("+d+")",disabled:0===d,icon:"arrow-circle-down",onClick:function(){return c("plasma")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TcommsCore=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.TcommsCore=function(e,t){var n=(0,r.useBackend)(t),u=(n.act,n.data.ion),p=(0,r.useLocalState)(t,"tabIndex",0),m=p[0],h=p[1];return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[1===u&&(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===m,onClick:function(){return h(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"wrench"}),"Configuration"]},"ConfigPage"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===m,onClick:function(){return h(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"link"}),"Device Linkage"]},"LinkagePage"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===m,onClick:function(){return h(2)},children:[(0,o.createComponentVNode)(2,i.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,s);case 2:return(0,o.createComponentVNode)(2,d);default:return"SOMETHING WENT VERY WRONG PLEASE AHELP"}}(m)]})})};var c=function(){return(0,o.createComponentVNode)(2,i.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),a=n.act,c=n.data,l=c.active,s=c.sectors_available,d=c.nttc_toggle_jobs,u=c.nttc_toggle_job_color,p=c.nttc_toggle_name_color,m=c.nttc_toggle_command_bold,h=c.nttc_job_indicator_type,f=c.nttc_setting_language,C=c.network_id;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Machine Power",children:(0,o.createComponentVNode)(2,i.Button,{content:l?"On":"Off",selected:l,icon:"power-off",onClick:function(){return a("toggle_active")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Sector Coverage",children:s})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Radio Configuration",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Job Announcements",children:(0,o.createComponentVNode)(2,i.Button,{content:d?"On":"Off",selected:d,icon:"user-tag",onClick:function(){return a("nttc_toggle_jobs")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Job Departmentalisation",children:(0,o.createComponentVNode)(2,i.Button,{content:u?"On":"Off",selected:u,icon:"clipboard-list",onClick:function(){return a("nttc_toggle_job_color")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name Departmentalisation",children:(0,o.createComponentVNode)(2,i.Button,{content:p?"On":"Off",selected:p,icon:"user-tag",onClick:function(){return a("nttc_toggle_name_color")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Command Amplification",children:(0,o.createComponentVNode)(2,i.Button,{content:m?"On":"Off",selected:m,icon:"volume-up",onClick:function(){return a("nttc_toggle_command_bold")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Advanced",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Job Announcement Format",children:(0,o.createComponentVNode)(2,i.Button,{content:h||"Unset",selected:h,icon:"pencil-alt",onClick:function(){return a("nttc_job_indicator_type")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Language Conversion",children:(0,o.createComponentVNode)(2,i.Button,{content:f||"Unset",selected:f,icon:"globe",onClick:function(){return a("nttc_setting_language")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Network ID",children:(0,o.createComponentVNode)(2,i.Button,{content:C||"Unset",selected:C,icon:"server",onClick:function(){return a("network_id")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Maintenance",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Import Configuration",icon:"file-import",onClick:function(){return a("import")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Export Configuration",icon:"file-export",onClick:function(){return a("export")}})]})],4)},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.link_password,s=c.relay_entries;return(0,o.createComponentVNode)(2,i.Section,{title:"Device Linkage",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Linkage Password",children:(0,o.createComponentVNode)(2,i.Button,{content:l||"Unset",selected:l,icon:"lock",onClick:function(){return a("change_password")}})})}),(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:"Network Address"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Network ID"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Sector"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Unlink"})]}),s.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.addr}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.net_id}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.sector}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:1===e.status?(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Online"}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Offline"})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Unlink",icon:"unlink",onClick:function(){return a("unlink",{addr:e.addr})}})})]},e.addr)}))]})]})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.filtered_users;return(0,o.createComponentVNode)(2,i.Section,{title:"User Filtering",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Add User",icon:"user-plus",onClick:function(){return a("add_filter")}}),children:(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,{style:{width:"90%"},children:"User"}),(0,o.createComponentVNode)(2,i.Table.Cell,{style:{width:"10%"},children:"Actions"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Remove",icon:"user-times",onClick:function(){return a("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),i=n(2),a=n(3);t.TcommsRelay=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data,u=d.linked,p=d.active,m=d.network_id;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Section,{title:"Relay Configuration",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Machine Power",children:(0,o.createComponentVNode)(2,i.Button,{content:p?"On":"Off",selected:p,icon:"power-off",onClick:function(){return s("toggle_active")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Network ID",children:(0,o.createComponentVNode)(2,i.Button,{content:m||"Unset",selected:m,icon:"server",onClick:function(){return s("network_id")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Link Status",children:1===u?(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Linked"}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Unlinked"})})]})}),1===u?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,l)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.linked_core_id,s=c.linked_core_addr,d=c.hidden_link;return(0,o.createComponentVNode)(2,i.Section,{title:"Link Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Linked Core ID",children:l}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Linked Core Address",children:s}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hidden Link",children:(0,o.createComponentVNode)(2,i.Button,{content:d?"Yes":"No",icon:d?"eye-slash":"eye",selected:d,onClick:function(){return a("toggle_hidden_link")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Unlink",children:(0,o.createComponentVNode)(2,i.Button,{content:"Unlink",icon:"unlink",color:"red",onClick:function(){return a("unlink")}})})]})})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.cores;return(0,o.createComponentVNode)(2,i.Section,{title:"Detected Cores",children:(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:"Network Address"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Network ID"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Sector"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Link"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.addr}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.net_id}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.sector}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Link",icon:"link",onClick:function(){return a("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),i=n(2),a=n(3),c=n(188);t.Teleporter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.targetsTeleport?s.targetsTeleport:{},u=s.calibrated,p=s.calibrating,m=s.powerstation,h=s.regime,f=s.teleporterhub,C=s.target,g=s.locked,N=s.accuracy;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(!m||!f)&&(0,o.createComponentVNode)(2,i.Section,{title:"Error",children:[f,!m&&(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:" Powerstation not linked "}),m&&!f&&(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:" Teleporter hub not linked "})]}),m&&f&&(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Regime",children:[(0,o.createComponentVNode)(2,i.Button,{tooltip:"Teleport to another teleport hub. ",color:1===h?"good":null,onClick:function(){return l("setregime",{regime:1})},children:"Gate"}),(0,o.createComponentVNode)(2,i.Button,{tooltip:"One-way teleport. ",color:0===h?"good":null,onClick:function(){return l("setregime",{regime:0})},children:"Teleporter"}),(0,o.createComponentVNode)(2,i.Button,{tooltip:"Teleport to a location stored in a GPS device. ",color:2===h?"good":null,disabled:!g,onClick:function(){return l("setregime",{regime:2})},children:"GPS"})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Teleport target",children:[0===h&&(0,o.createComponentVNode)(2,i.Dropdown,{width:"220px",selected:C,options:Object.keys(d),color:"None"!==C?"default":"bad",onSelected:function(e){return l("settarget",{x:d[e].x,y:d[e].y,z:d[e].z})}}),1===h&&(0,o.createComponentVNode)(2,i.Dropdown,{width:"220px",selected:C,options:Object.keys(d),color:"None"!==C?"default":"bad",onSelected:function(e){return l("settarget",{x:d[e].x,y:d[e].y,z:d[e].z})}}),2===h&&(0,o.createComponentVNode)(2,i.Box,{children:C})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Calibration",children:["None"!==C&&(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,c.GridColumn,{size:"2",children:p&&(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"In Progress"})||(u||N>=3)&&(0,o.createComponentVNode)(2,i.Box,{color:"good",children:"Optimal"})||(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Sub-Optimal"})}),(0,o.createComponentVNode)(2,c.GridColumn,{size:"3",children:(0,o.createComponentVNode)(2,i.Box,{"class":"ml-1",children:(0,o.createComponentVNode)(2,i.Button,{icon:"sync-alt",tooltip:"Calibrates the hub. Accidents may occur when the calibration is not optimal.",disabled:!(!u&&!p),onClick:function(){return l("calibrate")}})})})]}),"None"===C&&(0,o.createComponentVNode)(2,i.Box,{lineHeight:"21px",children:"No target set"})]})]})}),!!(g&&m&&f&&2===h)&&(0,o.createComponentVNode)(2,i.Section,{title:"GPS",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Upload GPS data",tooltip:"Loads the GPS data from the device.",icon:"upload",onClick:function(){return l("load")}}),(0,o.createComponentVNode)(2,i.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.ThiefKit=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ThiefKit=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.uses,d=l.possible_uses,u=l.multi_uses,p=l.kits,m=l.choosen_kits;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u041d\u0430\u0431\u043e\u0440 \u0413\u0438\u043b\u044c\u0434\u0438\u0438 \u0412\u043e\u0440\u043e\u0432:",children:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:[(0,o.createVNode)(1,"i",null,"\u0423\u0432\u0435\u0441\u0438\u0441\u0442\u0430\u044f \u043a\u043e\u0440\u043e\u0431\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0441\u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0433\u0438\u043b\u044c\u0434\u0438\u0438 \u0432\u043e\u0440\u043e\u0432.",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"i",null,"\u041d\u0430\u0431\u043e\u0440 \u0432\u043e\u0440\u0430-\u0448\u0440\u0435\u0434\u0438\u043d\u0433\u0435\u0440\u0430. \u041d\u0435\u043b\u044c\u0437\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0447\u0442\u043e \u0432 \u043d\u0451\u043c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u0448\u044c \u0432\u043d\u0443\u0442\u0440\u044c.",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"p",null,(0,o.createVNode)(1,"b",null,"\u041a\u0430\u043a\u043e\u0435 \u0441\u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0451\u043c \u043b\u0435\u0436\u0438\u0442?:",16),2),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430\u0431\u043e\u0440\u043e\u0432:"),(0,o.createComponentVNode)(2,i.Box,{as:"span",color:s<=0?"good":s=d,onClick:function(){return c("randomKit")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:p&&p.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"upload",content:"\u0412\u044b\u0431\u0440\u0430\u0442\u044c",disabled:e.was_taken||s>=d,onClick:function(){return c("takeKit",{item:e.type})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"undo",disabled:!e.was_taken,onClick:function(){return c("undoKit",{item:e.type})}})]}),children:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:e.desc})},e.type)}))})}),(0,o.createComponentVNode)(2,i.Section,{title:"\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b:",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:m&&m.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"undo",content:"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440",onClick:function(){return c("undoKit",{item:e.type})}}),children:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:" "})},e.type)}))})}),(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440",color:sp}),children:(0,o.createComponentVNode)(2,l.Box,{italic:!0,children:(0,a.decodeHtmlEntities)(e.desc)})},(0,a.decodeHtmlEntities)(e.name))}))})]})]})},f=function(e,t){var n=(0,c.useBackend)(t),s=(n.act,n.data.exploitable),u=(0,c.useLocalState)(t,"selectedRecord",s[0]),p=u[0],m=u[1],h=(0,c.useLocalState)(t,"searchText",""),f=h[0],C=h[1],g=function(e,t){void 0===t&&(t="");var n=(0,a.createSearch)(t,(function(e){return e.name}));return(0,i.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)}(s,f);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:g.map((function(e){return(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:e===p,onClick:function(){return m(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: "+p.name,children:[(0,o.createComponentVNode)(2,l.Box,{children:["Age: ",p.age]}),(0,o.createComponentVNode)(2,l.Box,{children:["Fingerprint: ",p.fingerprint]}),(0,o.createComponentVNode)(2,l.Box,{children:["Rank: ",p.rank]}),(0,o.createComponentVNode)(2,l.Box,{children:["Sex: ",p.sex]}),(0,o.createComponentVNode)(2,l.Box,{children:["Species: ",p.species]})]})})]})})};(0,p.modalRegisterBodyOverride)("become_contractor",(function(e,t){var n,r,i,a=(0,c.useBackend)(t).data,d=(a.contractor||{}).time_left,u=!!(null==a||null==(n=a.contractor)?void 0:n.available),m=!!(null==a||null==(r=a.contractor)?void 0:r.affordable),h=!!(null==a||null==(i=a.contractor)?void 0:i.accepted);return(0,o.createComponentVNode)(2,l.Section,{level:"2",m:"-1rem",pb:"1rem",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Icon,{name:"suitcase"}),(0,o.createTextVNode)("\xa0 Contracting Opportunity")],4),children:[(0,o.createComponentVNode)(2,l.Box,{mx:"0.5rem",mb:"0.5rem",children:[(0,o.createVNode)(1,"b",null,"Your achievements for the Syndicate have not gone unnoticed, agent. We have decided to give you the rare opportunity of becoming a Contractor.",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"br"),"For the small price of 20 telecrystals, we will upgrade your rank to that of a Contractor, allowing you to undertake kidnapping contracts for TC and credits.",(0,o.createVNode)(1,"br"),"In addition, you will be supplied with a Contractor Kit which contains a Contractor Uplink, standard issue contractor gear and three random low cost items.",(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"br"),"More detailed instructions can be found within your kit, should you accept this offer."]}),(0,o.createComponentVNode)(2,l.Button.Confirm,{disabled:!u||h,italic:!u,bold:u,icon:u&&!h&&"check",color:"good",content:h?"Accepted":u?["Accept Offer",(0,o.createComponentVNode)(2,s.Countdown,{timeLeft:d,format:function(e,t){return" ("+t+")"}},"countdown")]:m?"Offer expired":"Insufficient TC",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){return(0,p.modalAnswer)(t,e.id,1)}})]})}))},function(e,t,n){"use strict";t.__esModule=!0,t.VampireSpecMenu=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.VampireSpecMenu=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"nologo",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Flex,{justify:"space-around",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,i.Divider,{vertical:1}),(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,i.Divider,{vertical:1}),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,i.Divider,{vertical:1}),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,i.Divider,{vertical:1}),(0,o.createComponentVNode)(2,u)]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Hemomancer",children:[(0,o.createVNode)(1,"h3",null,"Focuses on blood magic and the manipulation of blood around you.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Vampiric claws",16),(0,o.createTextVNode)(": Unlocked at 150 blood, allows you to summon a robust pair of claws that attack rapidly, drain a targets blood, and heal you.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood Barrier",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to select two turfs and create a wall between them.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood tendrils",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to slow everyone in a targeted 3x3 area after a short delay.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Sanguine pool",16),(0,o.createTextVNode)(": Unlocked at 400 blood, allows you to travel at high speeds for a short duration. Doing this leaves behind blood splatters. You can move through anything but walls and space when doing this.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Predator senses",16),(0,o.createTextVNode)(": Unlocked at 600 blood, allows you to sniff out anyone within the same sector as you.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood eruption",16),(0,o.createTextVNode)(": Unlocked at 800 blood, allows you to manipulate all nearby blood splatters, in 4 tiles around you, into spikes that impale anyone stood ontop of them.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"The blood bringers rite",16),(0,o.createTextVNode)(": When toggled you will rapidly drain the blood of everyone who is nearby and use it to heal yourself slightly and remove any incapacitating effects rapidly.")],4),(0,o.createComponentVNode)(2,i.Button,{content:"Hemomancer",onClick:function(){return a("hemomancer")}})]})})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Umbrae",children:[(0,o.createVNode)(1,"h3",null,"Focuses on darkness, stealth ambushing and mobility.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Cloak of darkness",16),(0,o.createTextVNode)(": Unlocked at 150 blood, when toggled, allows you to become nearly invisible and move rapidly when in dark regions. While active, burn damage is more effective against you.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Shadow anchor",16),(0,o.createTextVNode)(": Unlocked at 250 blood, casting it will create an anchor at the cast location after a short delay. If you then cast the ability again, you are teleported back to the anchor. If you do not cast again within 2 minutes, you are forced back to the anchor. It will not teleport you between Z levels.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Shadow snare",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to summon a trap that when crossed blinds and ensares the victim. This trap is hard to see, but withers in the light.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Dark passage",16),(0,o.createTextVNode)(": Unlocked at 400 blood, allows you to target a turf on screen, you will then teleport to that turf.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Extinguish",16),(0,o.createTextVNode)(": Unlocked at 600 blood, allows you to snuff out nearby electronic light sources and glowshrooms.")],4),(0,o.createVNode)(1,"b",null,"Shadow boxing",16),": Unlocked at 800 blood, sends out shadow clones towards a target, damaging them while you remain in range.",(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"Eternal darkness",16),(0,o.createTextVNode)(": When toggled, you consume yourself in unholy darkness, only the strongest of lights will be able to see through it. It will also cause nearby creatures to freeze.")],4),(0,o.createVNode)(1,"p",null,"In addition, you also gain permament X-ray vision.",16),(0,o.createComponentVNode)(2,i.Button,{content:"Umbrae",onClick:function(){return a("umbrae")}})]})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Gargantua",children:[(0,o.createVNode)(1,"h3",null,"Focuses on tenacity and melee damage.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Rejuvenate",16),(0,o.createTextVNode)(": Will heal you at an increased rate based on how much damage you have taken.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood swell",16),(0,o.createTextVNode)(": Unlocked at 150 blood, increases your resistance to physical damage, stuns and stamina for 30 seconds. While it is active you cannot fire guns.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Seismic stomp",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to stomp the ground to send out a shockwave, knocking people back.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood rush",16),(0,o.createTextVNode)(": Unlocked at 250 blood, gives you a short speed boost when cast.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood swell II",16),(0,o.createTextVNode)(": Unlocked at 400 blood, increases all melee damage by 10.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Overwhelming force",16),(0,o.createTextVNode)(": Unlocked at 600 blood, when toggled, if you bump into a door that you dont have access to, it will force it open. In addition, you cannot be pushed or pulled while it is active.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Demonic grasp",16),(0,o.createTextVNode)(": Unlocked at 800 blood, allows you to send out a demonic hand to snare someone. If you are on disarm/grab intent you will push/pull the target, respectively.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full Power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"Charge",16),(0,o.createTextVNode)(": You gain the ability to charge at a target. Destroying and knocking back pretty much anything you collide with.")],4),(0,o.createComponentVNode)(2,i.Button,{content:"Gargantua",onClick:function(){return a("gargantua")}})]})})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Dantalion",children:[(0,o.createVNode)(1,"h3",null,"Focuses on thralling and illusions.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Enthrall",16),(0,o.createTextVNode)(": Unlocked at 150 blood, Thralls your target to your will, requires you to stand still. Does not work on mindshielded or already enthralled/mindslaved people.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Thrall cap",16),(0,o.createTextVNode)(": You can only thrall a max of 1 person at a time. This can be increased at 400 blood, 600 blood and at full power to a max of 4 thralls.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Thrall commune",16),(0,o.createTextVNode)(": Unlocked at 150 blood, Allows you to talk to your thralls, your thralls can talk back in the same way.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Subspace swap",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to swap positions with a target.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Pacify",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to pacify a target, preventing them from causing harm for 40 seconds.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Decoy",16),(0,o.createTextVNode)(": Unlocked at 400 blood, briefly turn invisible and send out an illusion to fool everyone nearby.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Rally thralls",16),(0,o.createTextVNode)(": Unlocked at 600 blood, removes all incapacitating effects from nearby thralls.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood bond",16),(0,o.createTextVNode)(": Unlocked at 800 blood, when cast, all nearby thralls become linked to you. If anyone in the network takes damage, it is shared equally between everyone in the network. If a thrall goes out of range, they will be removed from the network.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full Power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"Mass Hysteria",16),(0,o.createTextVNode)(": Casts a powerful illusion that, blinds then make everyone nearby perceive others to looks like random animals.")],4),(0,o.createComponentVNode)(2,i.Button,{content:"Dantalion",onClick:function(){return a("dantalion")}})]})})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Bestia",children:[(0,o.createVNode)(1,"h3",null,"Focuses on transformations and trophies harvesting.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Check Trophies",16),(0,o.createTextVNode)(": Unlocked at 150 blood, allows you to check current trophies amount and all the passive effects they provide.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Dissect",16),(0,o.createTextVNode)(": Unlocked at 150 blood, main source of gaining power, besides blood, allows you to harvest human organs, as a trophies, to passively increase your might.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Dissect Cap",16),(0,o.createTextVNode)(": You can only harvest one organ trophie at a time. This can be increased at 600 blood and at full power to a max of 3 trophies per victim.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Infected Trophy",16),(0,o.createTextVNode)(": Unlocked at 150 blood, allows you to stun enemies from the safe distance and infect them with the deadly Grave Fever.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Lunge",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to rapidly close distance to a victim or escape a dangerous situation.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Mark the Prey",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to mark a victim which drastically reduces their movement speed and forces them to take spontaneous actions.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Metamorphosis - Bats",16),(0,o.createTextVNode)(": Unlocked at 400 blood, allows you to shapeshift into the deadly and vicious space bats swarm.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Anabiosis",16),(0,o.createTextVNode)(": Unlocked at 600 blood, ancient technique which allows you to cure almost any wounds while sleeping in a coffin.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Summon Bats",16),(0,o.createTextVNode)(": Unlocked at 800 blood, allows you to call extraplanar space bats to aid you in combat.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full Power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"Metamorphosis - Hound",16),(0,o.createTextVNode)(": Allows you to shapeshift into the ultimate form of bluespace entity which took over your soul.")],4),(0,o.createComponentVNode)(2,i.Button,{content:"Bestia",onClick:function(){return a("bestia")}})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VampireTrophiesStatus=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=function(e){return(Math.round(10*e)/10).toFixed(1)};t.VampireTrophiesStatus=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{theme:"nologo",children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,C),(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,N)]})})};var l=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data),c=a.hearts,l=a.lungs,s=a.livers,d=a.kidneys,u=a.eyes,p=a.ears,m=a.trophies_max_gen,h=a.trophies_max_crit,f=a.icon_hearts,C=a.icon_lungs,g=a.icon_livers,N=a.icon_kidneys,b=a.icon_eyes,V=a.icon_ears;return(0,o.createComponentVNode)(2,i.Section,{title:"Trophies",color:"red",textAlign:"center",verticalAlign:"middle",children:[(0,o.createComponentVNode)(2,i.Box,{display:"inline-block",width:"16.6%",children:[(0,o.createComponentVNode)(2,i.Box,{as:"img",src:"data:image/jpeg;base64,"+f,verticalAlign:"middle",style:{"margin-left":"-32px","margin-right":"-48px","margin-top":"-32px","margin-bottom":"-48px",height:"128px",width:"128px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Box,{bold:!0,textColor:cp;return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+d,style:{"vertical-align":"middle",width:"32px",margin:"0px","margin-left":"0px"}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:l.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,i.Box,{color:(s<=0?"bad":s<=l.max_amount/2&&"average")||"good",children:[s," in stock"]})}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,disabled:N,icon:g,content:C,textAlign:"left",onClick:function(){return a("vend",{inum:l.inum})}})})]})};t.Vending=function(e,t){var n,l=(0,r.useBackend)(t),s=l.act,d=l.data,u=d.user,p=d.guestNotice,m=d.userMoney,h=d.chargesMoney,f=d.product_records,C=void 0===f?[]:f,g=d.coin_records,N=void 0===g?[]:g,b=d.hidden_records,V=void 0===b?[]:b,v=d.stock,x=(d.vend_ready,d.coin_name),y=d.inserted_item_name,k=d.panel_open,w=d.speaker,_=d.imagelist;return n=[].concat(C,N),d.extended_inventory&&(n=[].concat(n,V)),n=n.filter((function(e){return!!e})),(0,o.createComponentVNode)(2,a.Window,{title:"Vending Machine",resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!!h&&(0,o.createComponentVNode)(2,i.Section,{title:"User",children:u&&(0,o.createComponentVNode)(2,i.Box,{children:["Welcome, ",(0,o.createVNode)(1,"b",null,u.name,0),","," ",(0,o.createVNode)(1,"b",null,u.job||"Unemployed",0),"!",(0,o.createVNode)(1,"br"),"Your balance is ",(0,o.createVNode)(1,"b",null,[m,(0,o.createTextVNode)(" credits")],0),"."]})||(0,o.createComponentVNode)(2,i.Box,{color:"light-grey",children:p})}),!!x&&(0,o.createComponentVNode)(2,i.Section,{title:"Coin",buttons:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:"Remove Coin",onClick:function(){return s("remove_coin",{})}}),children:(0,o.createComponentVNode)(2,i.Box,{children:x})}),!!y&&(0,o.createComponentVNode)(2,i.Section,{title:"Item",buttons:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:"Eject Item",onClick:function(){return s("eject_item",{})}}),children:(0,o.createComponentVNode)(2,i.Box,{children:y})}),!!k&&(0,o.createComponentVNode)(2,i.Section,{title:"Maintenance",children:(0,o.createComponentVNode)(2,i.Button,{icon:w?"check":"volume-mute",selected:w,content:"Speaker",textAlign:"left",onClick:function(){return s("toggle_voice",{})}})}),(0,o.createComponentVNode)(2,i.Section,{title:"Products",children:(0,o.createComponentVNode)(2,i.Table,{children:n.map((function(e){return(0,o.createComponentVNode)(2,c,{product:e,productStock:v[e.name],productImage:_[e.path]},e.name)}))})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VolumeMixer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.VolumeMixer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.channels;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{height:"100%",overflow:"auto",children:l.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{fontSize:"1.25rem",color:"label",mt:t>0&&"0.5rem",children:e.name}),(0,o.createComponentVNode)(2,i.Box,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{width:"24px",color:"transparent",children:(0,o.createComponentVNode)(2,i.Icon,{name:"volume-off",size:"1.5",mt:"0.1rem",onClick:function(){return c("volume",{channel:e.num,volume:0})}})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",mx:"1rem",children:(0,o.createComponentVNode)(2,i.Slider,{minValue:0,maxValue:100,stepPixelSize:3.13,value:e.volume,onChange:function(t,n){return c("volume",{channel:e.num,volume:n})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{width:"24px",color:"transparent",children:(0,o.createComponentVNode)(2,i.Icon,{name:"volume-up",size:"1.5",mt:"0.1rem",onClick:function(){return c("volume",{channel:e.num,volume:100})}})})})]})})],4,e.num)}))})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VotePanel=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.VotePanel=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.remaining,d=l.question,u=l.choices,p=l.user_vote,m=l.counts,h=l.show_counts,f=l.show_cancel;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:d,children:[(0,o.createComponentVNode)(2,i.Box,{mb:1,children:["Time remaining: ",Math.round(s/10),"s"]}),u.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:e+(h?" ("+(m[e]||0)+")":""),onClick:function(){return c("vote",{target:e})},selected:e===p})},e)})),!!f&&(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Cancel",onClick:function(){return c("cancel")}})},"Cancel")]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Wires=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.Wires=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.wires||[],d=l.status||[];return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:s.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{className:"candystripe",label:e.color_name,labelColor:e.seen_color,color:e.seen_color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:e.cut?"Mend":"Cut",onClick:function(){return c("cut",{wire:e.color})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Pulse",onClick:function(){return c("pulse",{wire:e.color})}}),(0,o.createComponentVNode)(2,i.Button,{content:e.attached?"Detach":"Attach",onClick:function(){return c("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)}))})}),!!d.length&&(0,o.createComponentVNode)(2,i.Section,{children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{color:"lightgray",mt:.1,children:e},e)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Workshop=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(105),l=n(3);var s=function(e,t,n){return null===e.requirements||!(e.requirements.brass>t)&&!(e.requirements.power>n)};t.Workshop=function(e,t){var n=(0,i.useBackend)(t),r=n.act,s=n.data,p=s.brass_amount,m=s.power_amount,h=s.building,f=s.buildStart,C=s.buildEnd,g=s.worldTime,N=p.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),b=m.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");return(0,o.createComponentVNode)(2,l.Window,{theme:"clockwork",resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,a.Section,{title:"Materials",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Brass",children:[N,(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",height:"19px",tooltip:"Dispense Brass",tooltipPosition:"bottom-left",ml:"0.5rem",onClick:function(){return r("dispense")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:b})]})})]}),(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.Flex,{mb:"0.5rem",children:h&&(0,o.createComponentVNode)(2,a.ProgressBar.Countdown,{start:f,current:g,end:C,bold:!0,children:["Building ",h,"\xa0(",(0,o.createComponentVNode)(2,c.Countdown,{current:g,timeLeft:C-g,format:function(e,t){return t.substr(3)}}),")"]})})]})})};var d=function(e,t){var n=(0,i.useLocalState)(t,"search",""),r=(n[0],n[1]),c=(0,i.useLocalState)(t,"sort",""),l=(c[0],c[1],(0,i.useLocalState)(t,"descending",!1)),s=l[0],d=l[1];return(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",mr:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search by item name..",width:"100%",onInput:function(e,t){return r(t)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:s?"arrow-down":"arrow-up",height:"19px",tooltip:s?"Descending order":"Ascending order",tooltipPosition:"bottom-left",ml:"0.5rem",onClick:function(){return d(!s)}})})]})})},u=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data),l=c.items,d=(0,i.useLocalState)(t,"search",""),u=d[0],m=(d[1],(0,i.useLocalState)(t,"sort","Alphabetical")),h=(m[0],m[1],(0,i.useLocalState)(t,"descending",!1)),f=h[0],C=(h[1],(0,r.createSearch)(u,(function(e){return e[0]}))),g=!1,N=Object.entries(l).map((function(e,t){var n=Object.entries(e[1]).filter(C).map((function(e){return e[1].affordable=s(e[1],c.brass_amount,c.power_amount),e[1]}));if(0!==n.length)return f&&(n=n.reverse()),g=!0,(0,o.createComponentVNode)(2,p,{title:e[0],items:n},e[0])}));return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"auto",children:(0,o.createComponentVNode)(2,a.Section,{children:g?N:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No items matching your criteria was found!"})})})},p=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data,d=e.title,u=e.items,p=function(e,t){if(null==e)return{};var n,o,r={},i=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,a.Collapsible,Object.assign({open:!0,title:d},p,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{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,a.Button,{icon:"hammer",disabled:!s(e,l.brass_amount,l.power_amount),onClick:function(){return c("make",{cat:d,name:e.name})},children:(0,r.toTitleCase)((0,r.toTitleCase)(e.name))}),(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",lineHeight:"20px",style:{float:"right"},children:e.requirements&&Object.keys(e.requirements).map((function(t){return(0,r.toTitleCase)(t)+": "+e.requirements[t]})).join(", ")||(0,o.createComponentVNode)(2,a.Box,{children:"No resources required."})}),(0,o.createComponentVNode)(2,a.Box,{style:{clear:"both"}})]},e.name)}))})))}}]); \ No newline at end of file +var o=n(510),r=n(511),i=n(512);function a(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function c(e,t){if(a()=a())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+a().toString(16)+" bytes");return 0|e}function h(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var o=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case undefined:return j(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return U(e).length;default:if(o)return j(e).length;t=(""+t).toLowerCase(),o=!0}}function f(e,t,n){var o=!1;if((t===undefined||t<0)&&(t=0),t>this.length)return"";if((n===undefined||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return L(this,t,n);case"utf8":case"utf-8":return _(this,t,n);case"ascii":return B(this,t,n);case"latin1":case"binary":return S(this,t,n);case"base64":return w(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,n);default:if(o)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),o=!0}}function C(e,t,n){var o=e[t];e[t]=e[n],e[n]=o}function g(e,t,n,o,r){if(0===e.length)return-1;if("string"==typeof n?(o=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=r?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(r)return-1;n=e.length-1}else if(n<0){if(!r)return-1;n=0}if("string"==typeof t&&(t=l.from(t,o)),l.isBuffer(t))return 0===t.length?-1:N(e,t,n,o,r);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):N(e,[t],n,o,r);throw new TypeError("val must be string, number or Buffer")}function N(e,t,n,o,r){var i,a=1,c=e.length,l=t.length;if(o!==undefined&&("ucs2"===(o=String(o).toLowerCase())||"ucs-2"===o||"utf16le"===o||"utf-16le"===o)){if(e.length<2||t.length<2)return-1;a=2,c/=2,l/=2,n/=2}function s(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(r){var d=-1;for(i=n;ic&&(n=c-l),i=n;i>=0;i--){for(var u=!0,p=0;pr&&(o=r):o=r;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");o>i/2&&(o=i/2);for(var a=0;a>8,r=n%256,i.push(r),i.push(o);return i}(t,e.length-n),e,n,o)}function w(e,t,n){return 0===t&&n===e.length?o.fromByteArray(e):o.fromByteArray(e.slice(t,n))}function _(e,t,n){n=Math.min(e.length,n);for(var o=[],r=t;r239?4:s>223?3:s>191?2:1;if(r+u<=n)switch(u){case 1:s<128&&(d=s);break;case 2:128==(192&(i=e[r+1]))&&(l=(31&s)<<6|63&i)>127&&(d=l);break;case 3:i=e[r+1],a=e[r+2],128==(192&i)&&128==(192&a)&&(l=(15&s)<<12|(63&i)<<6|63&a)>2047&&(l<55296||l>57343)&&(d=l);break;case 4:i=e[r+1],a=e[r+2],c=e[r+3],128==(192&i)&&128==(192&a)&&128==(192&c)&&(l=(15&s)<<18|(63&i)<<12|(63&a)<<6|63&c)>65535&&l<1114112&&(d=l)}null===d?(d=65533,u=1):d>65535&&(d-=65536,o.push(d>>>10&1023|55296),d=56320|1023&d),o.push(d),r+=u}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var n="",o=0;for(;o0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},l.prototype.compare=function(e,t,n,o,r){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(t===undefined&&(t=0),n===undefined&&(n=e?e.length:0),o===undefined&&(o=0),r===undefined&&(r=this.length),t<0||n>e.length||o<0||r>this.length)throw new RangeError("out of range index");if(o>=r&&t>=n)return 0;if(o>=r)return-1;if(t>=n)return 1;if(this===e)return 0;for(var i=(r>>>=0)-(o>>>=0),a=(n>>>=0)-(t>>>=0),c=Math.min(i,a),s=this.slice(o,r),d=e.slice(t,n),u=0;ur)&&(n=r),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");o||(o="utf8");for(var i=!1;;)switch(o){case"hex":return b(this,e,t,n);case"utf8":case"utf-8":return V(this,e,t,n);case"ascii":return v(this,e,t,n);case"latin1":case"binary":return x(this,e,t,n);case"base64":return y(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+o);o=(""+o).toLowerCase(),i=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function B(e,t,n){var o="";n=Math.min(e.length,n);for(var r=t;ro)&&(n=o);for(var r="",i=t;in)throw new RangeError("Trying to access beyond buffer length")}function E(e,t,n,o,r,i){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>r||te.length)throw new RangeError("Index out of range")}function D(e,t,n,o){t<0&&(t=65535+t+1);for(var r=0,i=Math.min(e.length-n,2);r>>8*(o?r:1-r)}function T(e,t,n,o){t<0&&(t=4294967295+t+1);for(var r=0,i=Math.min(e.length-n,4);r>>8*(o?r:3-r)&255}function F(e,t,n,o,r,i){if(n+o>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function M(e,t,n,o,i){return i||F(e,0,n,4),r.write(e,t,n,o,23,4),n+4}function P(e,t,n,o,i){return i||F(e,0,n,8),r.write(e,t,n,o,52,8),n+8}l.prototype.slice=function(e,t){var n,o=this.length;if((e=~~e)<0?(e+=o)<0&&(e=0):e>o&&(e=o),(t=t===undefined?o:~~t)<0?(t+=o)<0&&(t=0):t>o&&(t=o),t0&&(r*=256);)o+=this[e+--t]*r;return o},l.prototype.readUInt8=function(e,t){return t||I(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var o=this[e],r=1,i=0;++i=(r*=128)&&(o-=Math.pow(2,8*t)),o},l.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||I(e,t,this.length);for(var o=t,r=1,i=this[e+--o];o>0&&(r*=256);)i+=this[e+--o]*r;return i>=(r*=128)&&(i-=Math.pow(2,8*t)),i},l.prototype.readInt8=function(e,t){return t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||I(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){t||I(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||I(e,4,this.length),r.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||I(e,4,this.length),r.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||I(e,8,this.length),r.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||I(e,8,this.length),r.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,n,o){e=+e,t|=0,n|=0,o||E(this,e,t,n,Math.pow(2,8*n)-1,0);var r=1,i=0;for(this[t]=255&e;++i=0&&(i*=256);)this[t+r]=e/i&255;return t+n},l.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):T(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):T(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,n,o){if(e=+e,t|=0,!o){var r=Math.pow(2,8*n-1);E(this,e,t,n,r-1,-r)}var i=0,a=1,c=0;for(this[t]=255&e;++i>0)-c&255;return t+n},l.prototype.writeIntBE=function(e,t,n,o){if(e=+e,t|=0,!o){var r=Math.pow(2,8*n-1);E(this,e,t,n,r-1,-r)}var i=n-1,a=1,c=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===c&&0!==this[t+i+1]&&(c=1),this[t+i]=(e/a>>0)-c&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):D(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):D(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):T(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||E(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):T(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,n){return M(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return M(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return P(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return P(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,o){if(n||(n=0),o||0===o||(o=this.length),t>=e.length&&(t=e.length),t||(t=0),o>0&&o=this.length)throw new RangeError("sourceStart out of bounds");if(o<0)throw new RangeError("sourceEnd out of bounds");o>this.length&&(o=this.length),e.length-t=0;--r)e[r+t]=this[r+n];else if(i<1e3||!l.TYPED_ARRAY_SUPPORT)for(r=0;r>>=0,n=n===undefined?this.length:n>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&n<57344){if(!r){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===o){(t-=3)>-1&&i.push(239,191,189);continue}r=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),r=n;continue}n=65536+(r-55296<<10|n-56320)}else r&&(t-=3)>-1&&i.push(239,191,189);if(r=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function U(e){return o.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(O,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function z(e,t,n,o){for(var r=0;r=t.length||r>=e.length);++r)t[r+n]=e[r];return r}}).call(this,n(107))},function(e,t,n){"use strict";t.byteLength=function(e){var t=s(e),n=t[0],o=t[1];return 3*(n+o)/4-o},t.toByteArray=function(e){var t,n,o=s(e),a=o[0],c=o[1],l=new i(function(e,t,n){return 3*(t+n)/4-n}(0,a,c)),d=0,u=c>0?a-4:a;for(n=0;n>16&255,l[d++]=t>>8&255,l[d++]=255&t;2===c&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,l[d++]=255&t);1===c&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,l[d++]=t>>8&255,l[d++]=255&t);return l},t.fromByteArray=function(e){for(var t,n=e.length,r=n%3,i=[],a=0,c=n-r;ac?c:a+16383));1===r?(t=e[n-1],i.push(o[t>>2]+o[t<<4&63]+"==")):2===r&&(t=(e[n-2]<<8)+e[n-1],i.push(o[t>>10]+o[t>>4&63]+o[t<<2&63]+"="));return i.join("")};for(var o=[],r=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=0,l=a.length;c0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function d(e,t,n){for(var r,i,a=[],c=t;c>18&63]+o[i>>12&63]+o[i>>6&63]+o[63&i]);return a.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},function(e,t,n){"use strict";t.read=function(e,t,n,o,r){var i,a,c=8*r-o-1,l=(1<>1,d=-7,u=n?r-1:0,p=n?-1:1,m=e[t+u];for(u+=p,i=m&(1<<-d)-1,m>>=-d,d+=c;d>0;i=256*i+e[t+u],u+=p,d-=8);for(a=i&(1<<-d)-1,i>>=-d,d+=o;d>0;a=256*a+e[t+u],u+=p,d-=8);if(0===i)i=1-s;else{if(i===l)return a?NaN:(m?-1:1)*Infinity;a+=Math.pow(2,o),i-=s}return(m?-1:1)*a*Math.pow(2,i-o)},t.write=function(e,t,n,o,r,i){var a,c,l,s=8*i-r-1,d=(1<>1,p=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,m=o?0:i-1,h=o?1:-1,f=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===Infinity?(c=isNaN(t)?1:0,a=d):(a=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-a))<1&&(a--,l*=2),(t+=a+u>=1?p/l:p*Math.pow(2,1-u))*l>=2&&(a++,l/=2),a+u>=d?(c=0,a=d):a+u>=1?(c=(t*l-1)*Math.pow(2,r),a+=u):(c=t*Math.pow(2,u-1)*Math.pow(2,r),a=0));r>=8;e[n+m]=255&c,m+=h,c/=256,r-=8);for(a=a<0;e[n+m]=255&a,m+=h,a/=256,s-=8);e[n+m-h]|=128*f}},function(e,t,n){"use strict";var o={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==o.call(e)}},function(e,t,n){"use strict";var o=n(20),r=Object.prototype.hasOwnProperty,i=Object.prototype.toString;e.exports=new o("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,o,a,c,l=[],s=e;for(t=0,n=s.length;t3)return!1;if("/"!==t[t.length-o.length-1])return!1}return!0},construct:function(e){var t=e,n=/\/([gim]*)$/.exec(e),o="";return"/"===t[0]&&(n&&(o=n[1]),t=t.slice(1,t.length-o.length-1)),new RegExp(t,o)},predicate:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},represent:function(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}})},function(e,t,n){"use strict";var o;try{o=n(519)}catch(i){"undefined"!=typeof window&&(o=window.esprima)}var r=n(20);e.exports=new r("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:function(e){if(null===e)return!1;try{var t="("+e+")",n=o.parse(t,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&("ArrowFunctionExpression"===n.body[0].expression.type||"FunctionExpression"===n.body[0].expression.type)}catch(r){return!1}},construct:function(e){var t,n="("+e+")",r=o.parse(n,{range:!0}),i=[];if("Program"!==r.type||1!==r.body.length||"ExpressionStatement"!==r.body[0].type||"ArrowFunctionExpression"!==r.body[0].expression.type&&"FunctionExpression"!==r.body[0].expression.type)throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach((function(e){i.push(e.name)})),t=r.body[0].expression.body.range,"BlockStatement"===r.body[0].expression.body.type?new Function(i,n.slice(t[0]+1,t[1]-1)):new Function(i,"return "+n.slice(t[0],t[1]))},predicate:function(e){return"[object Function]"===Object.prototype.toString.call(e)},represent:function(e){return e.toString()}})},function(e,t,n){"use strict";var o;o=function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={exports:{},id:o,loaded:!1};return e[o].call(r.exports,r,r.exports,n),r.loaded=!0,r.exports}return n.m=e,n.c=t,n.p="",n(0)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),r=n(3),i=n(8),a=n(15);function c(e,t,n){var a=null,c=function(e,t){n&&n(e,t),a&&a.visit(e,t)},l="function"==typeof n?c:null,s=!1;if(t){s="boolean"==typeof t.comment&&t.comment;var d="boolean"==typeof t.attachComment&&t.attachComment;(s||d)&&((a=new o.CommentHandler).attach=d,t.comment=!0,l=c)}var u,p=!1;t&&"string"==typeof t.sourceType&&(p="module"===t.sourceType),u=t&&"boolean"==typeof t.jsx&&t.jsx?new r.JSXParser(e,t,l):new i.Parser(e,t,l);var m=p?u.parseModule():u.parseScript();return s&&a&&(m.comments=a.comments),u.config.tokens&&(m.tokens=u.tokens),u.config.tolerant&&(m.errors=u.errorHandler.errors),m}t.parse=c,t.parseModule=function(e,t,n){var o=t||{};return o.sourceType="module",c(e,o,n)},t.parseScript=function(e,t,n){var o=t||{};return o.sourceType="script",c(e,o,n)},t.tokenize=function(e,t,n){var o,r=new a.Tokenizer(e,t);o=[];try{for(;;){var i=r.getNextToken();if(!i)break;n&&(i=n(i)),o.push(i)}}catch(c){r.errorHandler.tolerate(c)}return r.errorHandler.tolerant&&(o.errors=r.errors()),o};var l=n(2);t.Syntax=l.Syntax,t.version="4.0.1"},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=function(){function e(){this.attach=!1,this.comments=[],this.stack=[],this.leading=[],this.trailing=[]}return e.prototype.insertInnerComments=function(e,t){if(e.type===o.Syntax.BlockStatement&&0===e.body.length){for(var n=[],r=this.leading.length-1;r>=0;--r){var i=this.leading[r];t.end.offset>=i.start&&(n.unshift(i.comment),this.leading.splice(r,1),this.trailing.splice(r,1))}n.length&&(e.innerComments=n)}},e.prototype.findTrailingComments=function(e){var t=[];if(this.trailing.length>0){for(var n=this.trailing.length-1;n>=0;--n){var o=this.trailing[n];o.start>=e.end.offset&&t.unshift(o.comment)}return this.trailing.length=0,t}var r=this.stack[this.stack.length-1];if(r&&r.node.trailingComments){var i=r.node.trailingComments[0];i&&i.range[0]>=e.end.offset&&(t=r.node.trailingComments,delete r.node.trailingComments)}return t},e.prototype.findLeadingComments=function(e){for(var t,n=[];this.stack.length>0&&((i=this.stack[this.stack.length-1])&&i.start>=e.start.offset);)t=i.node,this.stack.pop();if(t){for(var o=(t.leadingComments?t.leadingComments.length:0)-1;o>=0;--o){var r=t.leadingComments[o];r.range[1]<=e.start.offset&&(n.unshift(r),t.leadingComments.splice(o,1))}return t.leadingComments&&0===t.leadingComments.length&&delete t.leadingComments,n}for(o=this.leading.length-1;o>=0;--o){var i;(i=this.leading[o]).start<=e.start.offset&&(n.unshift(i.comment),this.leading.splice(o,1))}return n},e.prototype.visitNode=function(e,t){if(!(e.type===o.Syntax.Program&&e.body.length>0)){this.insertInnerComments(e,t);var n=this.findTrailingComments(t),r=this.findLeadingComments(t);r.length>0&&(e.leadingComments=r),n.length>0&&(e.trailingComments=n),this.stack.push({node:e,start:t.start.offset})}},e.prototype.visitComment=function(e,t){var n="L"===e.type[0]?"Line":"Block",o={type:n,value:e.value};if(e.range&&(o.range=e.range),e.loc&&(o.loc=e.loc),this.comments.push(o),this.attach){var r={comment:{type:n,value:e.value,range:[t.start.offset,t.end.offset]},start:t.start.offset};e.loc&&(r.comment.loc=e.loc),e.type=n,this.leading.push(r),this.trailing.push(r)}},e.prototype.visit=function(e,t){"LineComment"===e.type||"BlockComment"===e.type?this.visitComment(e,t):this.attach&&this.visitNode(e,t)},e}();t.CommentHandler=r},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",AwaitExpression:"AwaitExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function(e,t,n){var o,r=this&&this.__extends||(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0});var i=n(4),a=n(5),c=n(6),l=n(7),s=n(8),d=n(13),u=n(14);function p(e){var t;switch(e.type){case c.JSXSyntax.JSXIdentifier:t=e.name;break;case c.JSXSyntax.JSXNamespacedName:var n=e;t=p(n.namespace)+":"+p(n.name);break;case c.JSXSyntax.JSXMemberExpression:var o=e;t=p(o.object)+"."+p(o.property)}return t}d.TokenName[100]="JSXIdentifier",d.TokenName[101]="JSXText";var m=function(e){function t(t,n,o){return e.call(this,t,n,o)||this}return r(t,e),t.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():e.prototype.parsePrimaryExpression.call(this)},t.prototype.startJSX=function(){this.scanner.index=this.startMarker.index,this.scanner.lineNumber=this.startMarker.line,this.scanner.lineStart=this.startMarker.index-this.startMarker.column},t.prototype.finishJSX=function(){this.nextToken()},t.prototype.reenterJSX=function(){this.startJSX(),this.expectJSX("}"),this.config.tokens&&this.tokens.pop()},t.prototype.createJSXNode=function(){return this.collectComments(),{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.scanXHTMLEntity=function(e){for(var t="&",n=!0,o=!1,r=!1,a=!1;!this.scanner.eof()&&n&&!o;){var c=this.scanner.source[this.scanner.index];if(c===e)break;if(o=";"===c,t+=c,++this.scanner.index,!o)switch(t.length){case 2:r="#"===c;break;case 3:r&&(n=(a="x"===c)||i.Character.isDecimalDigit(c.charCodeAt(0)),r=r&&!a);break;default:n=(n=n&&!(r&&!i.Character.isDecimalDigit(c.charCodeAt(0))))&&!(a&&!i.Character.isHexDigit(c.charCodeAt(0)))}}if(n&&o&&t.length>2){var l=t.substr(1,t.length-2);r&&l.length>1?t=String.fromCharCode(parseInt(l.substr(1),10)):a&&l.length>2?t=String.fromCharCode(parseInt("0"+l.substr(1),16)):r||a||!u.XHTMLEntities[l]||(t=u.XHTMLEntities[l])}return t},t.prototype.lexJSX=function(){var e=this.scanner.source.charCodeAt(this.scanner.index);if(60===e||62===e||47===e||58===e||61===e||123===e||125===e)return{type:7,value:c=this.scanner.source[this.scanner.index++],lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index};if(34===e||39===e){for(var t=this.scanner.index,n=this.scanner.source[this.scanner.index++],o="";!this.scanner.eof()&&(l=this.scanner.source[this.scanner.index++])!==n;)o+="&"===l?this.scanXHTMLEntity(n):l;return{type:8,value:o,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:t,end:this.scanner.index}}if(46===e){var r=this.scanner.source.charCodeAt(this.scanner.index+1),a=this.scanner.source.charCodeAt(this.scanner.index+2),c=46===r&&46===a?"...":".";return t=this.scanner.index,this.scanner.index+=c.length,{type:7,value:c,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:t,end:this.scanner.index}}if(96===e)return{type:10,value:"",lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index};if(i.Character.isIdentifierStart(e)&&92!==e){for(t=this.scanner.index,++this.scanner.index;!this.scanner.eof();){var l=this.scanner.source.charCodeAt(this.scanner.index);if(i.Character.isIdentifierPart(l)&&92!==l)++this.scanner.index;else{if(45!==l)break;++this.scanner.index}}return{type:100,value:this.scanner.source.slice(t,this.scanner.index),lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:t,end:this.scanner.index}}return this.scanner.lex()},t.prototype.nextJSXToken=function(){this.collectComments(),this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;var e=this.lexJSX();return this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart,this.config.tokens&&this.tokens.push(this.convertToken(e)),e},t.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index,this.startMarker.line=this.scanner.lineNumber,this.startMarker.column=this.scanner.index-this.scanner.lineStart;for(var e=this.scanner.index,t="";!this.scanner.eof();){var n=this.scanner.source[this.scanner.index];if("{"===n||"<"===n)break;++this.scanner.index,t+=n,i.Character.isLineTerminator(n.charCodeAt(0))&&(++this.scanner.lineNumber,"\r"===n&&"\n"===this.scanner.source[this.scanner.index]&&++this.scanner.index,this.scanner.lineStart=this.scanner.index)}this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart;var o={type:101,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:e,end:this.scanner.index};return t.length>0&&this.config.tokens&&this.tokens.push(this.convertToken(o)),o},t.prototype.peekJSXToken=function(){var e=this.scanner.saveState();this.scanner.scanComments();var t=this.lexJSX();return this.scanner.restoreState(e),t},t.prototype.expectJSX=function(e){var t=this.nextJSXToken();7===t.type&&t.value===e||this.throwUnexpectedToken(t)},t.prototype.matchJSX=function(e){var t=this.peekJSXToken();return 7===t.type&&t.value===e},t.prototype.parseJSXIdentifier=function(){var e=this.createJSXNode(),t=this.nextJSXToken();return 100!==t.type&&this.throwUnexpectedToken(t),this.finalize(e,new a.JSXIdentifier(t.value))},t.prototype.parseJSXElementName=function(){var e=this.createJSXNode(),t=this.parseJSXIdentifier();if(this.matchJSX(":")){var n=t;this.expectJSX(":");var o=this.parseJSXIdentifier();t=this.finalize(e,new a.JSXNamespacedName(n,o))}else if(this.matchJSX("."))for(;this.matchJSX(".");){var r=t;this.expectJSX(".");var i=this.parseJSXIdentifier();t=this.finalize(e,new a.JSXMemberExpression(r,i))}return t},t.prototype.parseJSXAttributeName=function(){var e,t=this.createJSXNode(),n=this.parseJSXIdentifier();if(this.matchJSX(":")){var o=n;this.expectJSX(":");var r=this.parseJSXIdentifier();e=this.finalize(t,new a.JSXNamespacedName(o,r))}else e=n;return e},t.prototype.parseJSXStringLiteralAttribute=function(){var e=this.createJSXNode(),t=this.nextJSXToken();8!==t.type&&this.throwUnexpectedToken(t);var n=this.getTokenRaw(t);return this.finalize(e,new l.Literal(t.value,n))},t.prototype.parseJSXExpressionAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.finishJSX(),this.match("}")&&this.tolerateError("JSX attributes must only be assigned a non-empty expression");var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new a.JSXExpressionContainer(t))},t.prototype.parseJSXAttributeValue=function(){return this.matchJSX("{")?this.parseJSXExpressionAttribute():this.matchJSX("<")?this.parseJSXElement():this.parseJSXStringLiteralAttribute()},t.prototype.parseJSXNameValueAttribute=function(){var e=this.createJSXNode(),t=this.parseJSXAttributeName(),n=null;return this.matchJSX("=")&&(this.expectJSX("="),n=this.parseJSXAttributeValue()),this.finalize(e,new a.JSXAttribute(t,n))},t.prototype.parseJSXSpreadAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.expectJSX("..."),this.finishJSX();var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new a.JSXSpreadAttribute(t))},t.prototype.parseJSXAttributes=function(){for(var e=[];!this.matchJSX("/")&&!this.matchJSX(">");){var t=this.matchJSX("{")?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();e.push(t)}return e},t.prototype.parseJSXOpeningElement=function(){var e=this.createJSXNode();this.expectJSX("<");var t=this.parseJSXElementName(),n=this.parseJSXAttributes(),o=this.matchJSX("/");return o&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new a.JSXOpeningElement(t,o,n))},t.prototype.parseJSXBoundaryElement=function(){var e=this.createJSXNode();if(this.expectJSX("<"),this.matchJSX("/")){this.expectJSX("/");var t=this.parseJSXElementName();return this.expectJSX(">"),this.finalize(e,new a.JSXClosingElement(t))}var n=this.parseJSXElementName(),o=this.parseJSXAttributes(),r=this.matchJSX("/");return r&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new a.JSXOpeningElement(n,r,o))},t.prototype.parseJSXEmptyExpression=function(){var e=this.createJSXChildNode();return this.collectComments(),this.lastMarker.index=this.scanner.index,this.lastMarker.line=this.scanner.lineNumber,this.lastMarker.column=this.scanner.index-this.scanner.lineStart,this.finalize(e,new a.JSXEmptyExpression)},t.prototype.parseJSXExpressionContainer=function(){var e,t=this.createJSXNode();return this.expectJSX("{"),this.matchJSX("}")?(e=this.parseJSXEmptyExpression(),this.expectJSX("}")):(this.finishJSX(),e=this.parseAssignmentExpression(),this.reenterJSX()),this.finalize(t,new a.JSXExpressionContainer(e))},t.prototype.parseJSXChildren=function(){for(var e=[];!this.scanner.eof();){var t=this.createJSXChildNode(),n=this.nextJSXText();if(n.start0))break;i=this.finalize(e.node,new a.JSXElement(e.opening,e.children,e.closing)),(e=t[t.length-1]).children.push(i),t.pop()}}return e},t.prototype.parseJSXElement=function(){var e=this.createJSXNode(),t=this.parseJSXOpeningElement(),n=[],o=null;if(!t.selfClosing){var r=this.parseComplexJSXElement({node:e,opening:t,closing:o,children:n});n=r.children,o=r.closing}return this.finalize(e,new a.JSXElement(t,n,o))},t.prototype.parseJSXRoot=function(){this.config.tokens&&this.tokens.pop(),this.startJSX();var e=this.parseJSXElement();return this.finishJSX(),e},t.prototype.isStartOfExpression=function(){return e.prototype.isStartOfExpression.call(this)||this.match("<")},t}(s.Parser);t.JSXParser=m},function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/};t.Character={fromCodePoint:function(e){return e<65536?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))},isWhiteSpace:function(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0},isLineTerminator:function(e){return 10===e||13===e||8232===e||8233===e},isIdentifierStart:function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&n.NonAsciiIdentifierStart.test(t.Character.fromCodePoint(e))},isIdentifierPart:function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&n.NonAsciiIdentifierPart.test(t.Character.fromCodePoint(e))},isDecimalDigit:function(e){return e>=48&&e<=57},isHexDigit:function(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102},isOctalDigit:function(e){return e>=48&&e<=55}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(6),r=function(e){this.type=o.JSXSyntax.JSXClosingElement,this.name=e};t.JSXClosingElement=r;var i=function(e,t,n){this.type=o.JSXSyntax.JSXElement,this.openingElement=e,this.children=t,this.closingElement=n};t.JSXElement=i;var a=function(){this.type=o.JSXSyntax.JSXEmptyExpression};t.JSXEmptyExpression=a;var c=function(e){this.type=o.JSXSyntax.JSXExpressionContainer,this.expression=e};t.JSXExpressionContainer=c;var l=function(e){this.type=o.JSXSyntax.JSXIdentifier,this.name=e};t.JSXIdentifier=l;var s=function(e,t){this.type=o.JSXSyntax.JSXMemberExpression,this.object=e,this.property=t};t.JSXMemberExpression=s;var d=function(e,t){this.type=o.JSXSyntax.JSXAttribute,this.name=e,this.value=t};t.JSXAttribute=d;var u=function(e,t){this.type=o.JSXSyntax.JSXNamespacedName,this.namespace=e,this.name=t};t.JSXNamespacedName=u;var p=function(e,t,n){this.type=o.JSXSyntax.JSXOpeningElement,this.name=e,this.selfClosing=t,this.attributes=n};t.JSXOpeningElement=p;var m=function(e){this.type=o.JSXSyntax.JSXSpreadAttribute,this.argument=e};t.JSXSpreadAttribute=m;var h=function(e,t){this.type=o.JSXSyntax.JSXText,this.value=e,this.raw=t};t.JSXText=h},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.JSXSyntax={JSXAttribute:"JSXAttribute",JSXClosingElement:"JSXClosingElement",JSXElement:"JSXElement",JSXEmptyExpression:"JSXEmptyExpression",JSXExpressionContainer:"JSXExpressionContainer",JSXIdentifier:"JSXIdentifier",JSXMemberExpression:"JSXMemberExpression",JSXNamespacedName:"JSXNamespacedName",JSXOpeningElement:"JSXOpeningElement",JSXSpreadAttribute:"JSXSpreadAttribute",JSXText:"JSXText"}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),r=function(e){this.type=o.Syntax.ArrayExpression,this.elements=e};t.ArrayExpression=r;var i=function(e){this.type=o.Syntax.ArrayPattern,this.elements=e};t.ArrayPattern=i;var a=function(e,t,n){this.type=o.Syntax.ArrowFunctionExpression,this.id=null,this.params=e,this.body=t,this.generator=!1,this.expression=n,this.async=!1};t.ArrowFunctionExpression=a;var c=function(e,t,n){this.type=o.Syntax.AssignmentExpression,this.operator=e,this.left=t,this.right=n};t.AssignmentExpression=c;var l=function(e,t){this.type=o.Syntax.AssignmentPattern,this.left=e,this.right=t};t.AssignmentPattern=l;var s=function(e,t,n){this.type=o.Syntax.ArrowFunctionExpression,this.id=null,this.params=e,this.body=t,this.generator=!1,this.expression=n,this.async=!0};t.AsyncArrowFunctionExpression=s;var d=function(e,t,n){this.type=o.Syntax.FunctionDeclaration,this.id=e,this.params=t,this.body=n,this.generator=!1,this.expression=!1,this.async=!0};t.AsyncFunctionDeclaration=d;var u=function(e,t,n){this.type=o.Syntax.FunctionExpression,this.id=e,this.params=t,this.body=n,this.generator=!1,this.expression=!1,this.async=!0};t.AsyncFunctionExpression=u;var p=function(e){this.type=o.Syntax.AwaitExpression,this.argument=e};t.AwaitExpression=p;var m=function(e,t,n){var r="||"===e||"&&"===e;this.type=r?o.Syntax.LogicalExpression:o.Syntax.BinaryExpression,this.operator=e,this.left=t,this.right=n};t.BinaryExpression=m;var h=function(e){this.type=o.Syntax.BlockStatement,this.body=e};t.BlockStatement=h;var f=function(e){this.type=o.Syntax.BreakStatement,this.label=e};t.BreakStatement=f;var C=function(e,t){this.type=o.Syntax.CallExpression,this.callee=e,this.arguments=t};t.CallExpression=C;var g=function(e,t){this.type=o.Syntax.CatchClause,this.param=e,this.body=t};t.CatchClause=g;var N=function(e){this.type=o.Syntax.ClassBody,this.body=e};t.ClassBody=N;var b=function(e,t,n){this.type=o.Syntax.ClassDeclaration,this.id=e,this.superClass=t,this.body=n};t.ClassDeclaration=b;var V=function(e,t,n){this.type=o.Syntax.ClassExpression,this.id=e,this.superClass=t,this.body=n};t.ClassExpression=V;var v=function(e,t){this.type=o.Syntax.MemberExpression,this.computed=!0,this.object=e,this.property=t};t.ComputedMemberExpression=v;var x=function(e,t,n){this.type=o.Syntax.ConditionalExpression,this.test=e,this.consequent=t,this.alternate=n};t.ConditionalExpression=x;var y=function(e){this.type=o.Syntax.ContinueStatement,this.label=e};t.ContinueStatement=y;var k=function(){this.type=o.Syntax.DebuggerStatement};t.DebuggerStatement=k;var w=function(e,t){this.type=o.Syntax.ExpressionStatement,this.expression=e,this.directive=t};t.Directive=w;var _=function(e,t){this.type=o.Syntax.DoWhileStatement,this.body=e,this.test=t};t.DoWhileStatement=_;var B=function(){this.type=o.Syntax.EmptyStatement};t.EmptyStatement=B;var S=function(e){this.type=o.Syntax.ExportAllDeclaration,this.source=e};t.ExportAllDeclaration=S;var L=function(e){this.type=o.Syntax.ExportDefaultDeclaration,this.declaration=e};t.ExportDefaultDeclaration=L;var A=function(e,t,n){this.type=o.Syntax.ExportNamedDeclaration,this.declaration=e,this.specifiers=t,this.source=n};t.ExportNamedDeclaration=A;var I=function(e,t){this.type=o.Syntax.ExportSpecifier,this.exported=t,this.local=e};t.ExportSpecifier=I;var E=function(e){this.type=o.Syntax.ExpressionStatement,this.expression=e};t.ExpressionStatement=E;var D=function(e,t,n){this.type=o.Syntax.ForInStatement,this.left=e,this.right=t,this.body=n,this.each=!1};t.ForInStatement=D;var T=function(e,t,n){this.type=o.Syntax.ForOfStatement,this.left=e,this.right=t,this.body=n};t.ForOfStatement=T;var F=function(e,t,n,r){this.type=o.Syntax.ForStatement,this.init=e,this.test=t,this.update=n,this.body=r};t.ForStatement=F;var M=function(e,t,n,r){this.type=o.Syntax.FunctionDeclaration,this.id=e,this.params=t,this.body=n,this.generator=r,this.expression=!1,this.async=!1};t.FunctionDeclaration=M;var P=function(e,t,n,r){this.type=o.Syntax.FunctionExpression,this.id=e,this.params=t,this.body=n,this.generator=r,this.expression=!1,this.async=!1};t.FunctionExpression=P;var O=function(e){this.type=o.Syntax.Identifier,this.name=e};t.Identifier=O;var R=function(e,t,n){this.type=o.Syntax.IfStatement,this.test=e,this.consequent=t,this.alternate=n};t.IfStatement=R;var j=function(e,t){this.type=o.Syntax.ImportDeclaration,this.specifiers=e,this.source=t};t.ImportDeclaration=j;var U=function(e){this.type=o.Syntax.ImportDefaultSpecifier,this.local=e};t.ImportDefaultSpecifier=U;var z=function(e){this.type=o.Syntax.ImportNamespaceSpecifier,this.local=e};t.ImportNamespaceSpecifier=z;var W=function(e,t){this.type=o.Syntax.ImportSpecifier,this.local=e,this.imported=t};t.ImportSpecifier=W;var H=function(e,t){this.type=o.Syntax.LabeledStatement,this.label=e,this.body=t};t.LabeledStatement=H;var K=function(e,t){this.type=o.Syntax.Literal,this.value=e,this.raw=t};t.Literal=K;var q=function(e,t){this.type=o.Syntax.MetaProperty,this.meta=e,this.property=t};t.MetaProperty=q;var Y=function(e,t,n,r,i){this.type=o.Syntax.MethodDefinition,this.key=e,this.computed=t,this.value=n,this.kind=r,this["static"]=i};t.MethodDefinition=Y;var G=function(e){this.type=o.Syntax.Program,this.body=e,this.sourceType="module"};t.Module=G;var X=function(e,t){this.type=o.Syntax.NewExpression,this.callee=e,this.arguments=t};t.NewExpression=X;var J=function(e){this.type=o.Syntax.ObjectExpression,this.properties=e};t.ObjectExpression=J;var $=function(e){this.type=o.Syntax.ObjectPattern,this.properties=e};t.ObjectPattern=$;var Z=function(e,t,n,r,i,a){this.type=o.Syntax.Property,this.key=t,this.computed=n,this.value=r,this.kind=e,this.method=i,this.shorthand=a};t.Property=Z;var Q=function(e,t,n,r){this.type=o.Syntax.Literal,this.value=e,this.raw=t,this.regex={pattern:n,flags:r}};t.RegexLiteral=Q;var ee=function(e){this.type=o.Syntax.RestElement,this.argument=e};t.RestElement=ee;var te=function(e){this.type=o.Syntax.ReturnStatement,this.argument=e};t.ReturnStatement=te;var ne=function(e){this.type=o.Syntax.Program,this.body=e,this.sourceType="script"};t.Script=ne;var oe=function(e){this.type=o.Syntax.SequenceExpression,this.expressions=e};t.SequenceExpression=oe;var re=function(e){this.type=o.Syntax.SpreadElement,this.argument=e};t.SpreadElement=re;var ie=function(e,t){this.type=o.Syntax.MemberExpression,this.computed=!1,this.object=e,this.property=t};t.StaticMemberExpression=ie;var ae=function(){this.type=o.Syntax.Super};t.Super=ae;var ce=function(e,t){this.type=o.Syntax.SwitchCase,this.test=e,this.consequent=t};t.SwitchCase=ce;var le=function(e,t){this.type=o.Syntax.SwitchStatement,this.discriminant=e,this.cases=t};t.SwitchStatement=le;var se=function(e,t){this.type=o.Syntax.TaggedTemplateExpression,this.tag=e,this.quasi=t};t.TaggedTemplateExpression=se;var de=function(e,t){this.type=o.Syntax.TemplateElement,this.value=e,this.tail=t};t.TemplateElement=de;var ue=function(e,t){this.type=o.Syntax.TemplateLiteral,this.quasis=e,this.expressions=t};t.TemplateLiteral=ue;var pe=function(){this.type=o.Syntax.ThisExpression};t.ThisExpression=pe;var me=function(e){this.type=o.Syntax.ThrowStatement,this.argument=e};t.ThrowStatement=me;var he=function(e,t,n){this.type=o.Syntax.TryStatement,this.block=e,this.handler=t,this.finalizer=n};t.TryStatement=he;var fe=function(e,t){this.type=o.Syntax.UnaryExpression,this.operator=e,this.argument=t,this.prefix=!0};t.UnaryExpression=fe;var Ce=function(e,t,n){this.type=o.Syntax.UpdateExpression,this.operator=e,this.argument=t,this.prefix=n};t.UpdateExpression=Ce;var ge=function(e,t){this.type=o.Syntax.VariableDeclaration,this.declarations=e,this.kind=t};t.VariableDeclaration=ge;var Ne=function(e,t){this.type=o.Syntax.VariableDeclarator,this.id=e,this.init=t};t.VariableDeclarator=Ne;var be=function(e,t){this.type=o.Syntax.WhileStatement,this.test=e,this.body=t};t.WhileStatement=be;var Ve=function(e,t){this.type=o.Syntax.WithStatement,this.object=e,this.body=t};t.WithStatement=Ve;var ve=function(e,t){this.type=o.Syntax.YieldExpression,this.argument=e,this.delegate=t};t.YieldExpression=ve},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),r=n(10),i=n(11),a=n(7),c=n(12),l=n(2),s=n(13),d=function(){function e(e,t,n){void 0===t&&(t={}),this.config={range:"boolean"==typeof t.range&&t.range,loc:"boolean"==typeof t.loc&&t.loc,source:null,tokens:"boolean"==typeof t.tokens&&t.tokens,comment:"boolean"==typeof t.comment&&t.comment,tolerant:"boolean"==typeof t.tolerant&&t.tolerant},this.config.loc&&t.source&&null!==t.source&&(this.config.source=String(t.source)),this.delegate=n,this.errorHandler=new r.ErrorHandler,this.errorHandler.tolerant=this.config.tolerant,this.scanner=new c.Scanner(e,this.errorHandler),this.scanner.trackComment=this.config.comment,this.operatorPrecedence={")":0,";":0,",":0,"=":0,"]":0,"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":11,"/":11,"%":11},this.lookahead={type:2,value:"",lineNumber:this.scanner.lineNumber,lineStart:0,start:0,end:0},this.hasLineTerminator=!1,this.context={isModule:!1,await:!1,allowIn:!0,allowStrictDirective:!0,allowYield:!0,firstCoverInitializedNameError:null,isAssignmentTarget:!1,isBindingElement:!1,inFunctionBody:!1,inIteration:!1,inSwitch:!1,labelSet:{},strict:!1},this.tokens=[],this.startMarker={index:0,line:this.scanner.lineNumber,column:0},this.lastMarker={index:0,line:this.scanner.lineNumber,column:0},this.nextToken(),this.lastMarker={index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}}return e.prototype.throwError=function(e){for(var t=[],n=1;n0&&this.delegate)for(var t=0;t>="===e||">>>="===e||"&="===e||"^="===e||"|="===e},e.prototype.isolateCoverGrammar=function(e){var t=this.context.isBindingElement,n=this.context.isAssignmentTarget,o=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var r=e.call(this);return null!==this.context.firstCoverInitializedNameError&&this.throwUnexpectedToken(this.context.firstCoverInitializedNameError),this.context.isBindingElement=t,this.context.isAssignmentTarget=n,this.context.firstCoverInitializedNameError=o,r},e.prototype.inheritCoverGrammar=function(e){var t=this.context.isBindingElement,n=this.context.isAssignmentTarget,o=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var r=e.call(this);return this.context.isBindingElement=this.context.isBindingElement&&t,this.context.isAssignmentTarget=this.context.isAssignmentTarget&&n,this.context.firstCoverInitializedNameError=o||this.context.firstCoverInitializedNameError,r},e.prototype.consumeSemicolon=function(){this.match(";")?this.nextToken():this.hasLineTerminator||(2===this.lookahead.type||this.match("}")||this.throwUnexpectedToken(this.lookahead),this.lastMarker.index=this.startMarker.index,this.lastMarker.line=this.startMarker.line,this.lastMarker.column=this.startMarker.column)},e.prototype.parsePrimaryExpression=function(){var e,t,n,o=this.createNode();switch(this.lookahead.type){case 3:(this.context.isModule||this.context.await)&&"await"===this.lookahead.value&&this.tolerateUnexpectedToken(this.lookahead),e=this.matchAsyncFunction()?this.parseFunctionExpression():this.finalize(o,new a.Identifier(this.nextToken().value));break;case 6:case 8:this.context.strict&&this.lookahead.octal&&this.tolerateUnexpectedToken(this.lookahead,i.Messages.StrictOctalLiteral),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),n=this.getTokenRaw(t),e=this.finalize(o,new a.Literal(t.value,n));break;case 1:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),n=this.getTokenRaw(t),e=this.finalize(o,new a.Literal("true"===t.value,n));break;case 5:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,t=this.nextToken(),n=this.getTokenRaw(t),e=this.finalize(o,new a.Literal(null,n));break;case 10:e=this.parseTemplateLiteral();break;case 7:switch(this.lookahead.value){case"(":this.context.isBindingElement=!1,e=this.inheritCoverGrammar(this.parseGroupExpression);break;case"[":e=this.inheritCoverGrammar(this.parseArrayInitializer);break;case"{":e=this.inheritCoverGrammar(this.parseObjectInitializer);break;case"/":case"/=":this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.scanner.index=this.startMarker.index,t=this.nextRegexToken(),n=this.getTokenRaw(t),e=this.finalize(o,new a.RegexLiteral(t.regex,n,t.pattern,t.flags));break;default:e=this.throwUnexpectedToken(this.nextToken())}break;case 4:!this.context.strict&&this.context.allowYield&&this.matchKeyword("yield")?e=this.parseIdentifierName():!this.context.strict&&this.matchKeyword("let")?e=this.finalize(o,new a.Identifier(this.nextToken().value)):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.matchKeyword("function")?e=this.parseFunctionExpression():this.matchKeyword("this")?(this.nextToken(),e=this.finalize(o,new a.ThisExpression)):e=this.matchKeyword("class")?this.parseClassExpression():this.throwUnexpectedToken(this.nextToken()));break;default:e=this.throwUnexpectedToken(this.nextToken())}return e},e.prototype.parseSpreadElement=function(){var e=this.createNode();this.expect("...");var t=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(e,new a.SpreadElement(t))},e.prototype.parseArrayInitializer=function(){var e=this.createNode(),t=[];for(this.expect("[");!this.match("]");)if(this.match(","))this.nextToken(),t.push(null);else if(this.match("...")){var n=this.parseSpreadElement();this.match("]")||(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.expect(",")),t.push(n)}else t.push(this.inheritCoverGrammar(this.parseAssignmentExpression)),this.match("]")||this.expect(",");return this.expect("]"),this.finalize(e,new a.ArrayExpression(t))},e.prototype.parsePropertyMethod=function(e){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var t=this.context.strict,n=this.context.allowStrictDirective;this.context.allowStrictDirective=e.simple;var o=this.isolateCoverGrammar(this.parseFunctionSourceElements);return this.context.strict&&e.firstRestricted&&this.tolerateUnexpectedToken(e.firstRestricted,e.message),this.context.strict&&e.stricted&&this.tolerateUnexpectedToken(e.stricted,e.message),this.context.strict=t,this.context.allowStrictDirective=n,o},e.prototype.parsePropertyMethodFunction=function(){var e=this.createNode(),t=this.context.allowYield;this.context.allowYield=!0;var n=this.parseFormalParameters(),o=this.parsePropertyMethod(n);return this.context.allowYield=t,this.finalize(e,new a.FunctionExpression(null,n.params,o,!1))},e.prototype.parsePropertyMethodAsyncFunction=function(){var e=this.createNode(),t=this.context.allowYield,n=this.context.await;this.context.allowYield=!1,this.context.await=!0;var o=this.parseFormalParameters(),r=this.parsePropertyMethod(o);return this.context.allowYield=t,this.context.await=n,this.finalize(e,new a.AsyncFunctionExpression(null,o.params,r))},e.prototype.parseObjectPropertyKey=function(){var e,t=this.createNode(),n=this.nextToken();switch(n.type){case 8:case 6:this.context.strict&&n.octal&&this.tolerateUnexpectedToken(n,i.Messages.StrictOctalLiteral);var o=this.getTokenRaw(n);e=this.finalize(t,new a.Literal(n.value,o));break;case 3:case 1:case 5:case 4:e=this.finalize(t,new a.Identifier(n.value));break;case 7:"["===n.value?(e=this.isolateCoverGrammar(this.parseAssignmentExpression),this.expect("]")):e=this.throwUnexpectedToken(n);break;default:e=this.throwUnexpectedToken(n)}return e},e.prototype.isPropertyKey=function(e,t){return e.type===l.Syntax.Identifier&&e.name===t||e.type===l.Syntax.Literal&&e.value===t},e.prototype.parseObjectProperty=function(e){var t,n=this.createNode(),o=this.lookahead,r=null,c=null,l=!1,s=!1,d=!1,u=!1;if(3===o.type){var p=o.value;this.nextToken(),l=this.match("["),r=(u=!(this.hasLineTerminator||"async"!==p||this.match(":")||this.match("(")||this.match("*")||this.match(",")))?this.parseObjectPropertyKey():this.finalize(n,new a.Identifier(p))}else this.match("*")?this.nextToken():(l=this.match("["),r=this.parseObjectPropertyKey());var m=this.qualifiedPropertyName(this.lookahead);if(3===o.type&&!u&&"get"===o.value&&m)t="get",l=this.match("["),r=this.parseObjectPropertyKey(),this.context.allowYield=!1,c=this.parseGetterMethod();else if(3===o.type&&!u&&"set"===o.value&&m)t="set",l=this.match("["),r=this.parseObjectPropertyKey(),c=this.parseSetterMethod();else if(7===o.type&&"*"===o.value&&m)t="init",l=this.match("["),r=this.parseObjectPropertyKey(),c=this.parseGeneratorMethod(),s=!0;else if(r||this.throwUnexpectedToken(this.lookahead),t="init",this.match(":")&&!u)!l&&this.isPropertyKey(r,"__proto__")&&(e.value&&this.tolerateError(i.Messages.DuplicateProtoProperty),e.value=!0),this.nextToken(),c=this.inheritCoverGrammar(this.parseAssignmentExpression);else if(this.match("("))c=u?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction(),s=!0;else if(3===o.type)if(p=this.finalize(n,new a.Identifier(o.value)),this.match("=")){this.context.firstCoverInitializedNameError=this.lookahead,this.nextToken(),d=!0;var h=this.isolateCoverGrammar(this.parseAssignmentExpression);c=this.finalize(n,new a.AssignmentPattern(p,h))}else d=!0,c=p;else this.throwUnexpectedToken(this.nextToken());return this.finalize(n,new a.Property(t,r,l,c,s,d))},e.prototype.parseObjectInitializer=function(){var e=this.createNode();this.expect("{");for(var t=[],n={value:!1};!this.match("}");)t.push(this.parseObjectProperty(n)),this.match("}")||this.expectCommaSeparator();return this.expect("}"),this.finalize(e,new a.ObjectExpression(t))},e.prototype.parseTemplateHead=function(){o.assert(this.lookahead.head,"Template literal must start with a template head");var e=this.createNode(),t=this.nextToken(),n=t.value,r=t.cooked;return this.finalize(e,new a.TemplateElement({raw:n,cooked:r},t.tail))},e.prototype.parseTemplateElement=function(){10!==this.lookahead.type&&this.throwUnexpectedToken();var e=this.createNode(),t=this.nextToken(),n=t.value,o=t.cooked;return this.finalize(e,new a.TemplateElement({raw:n,cooked:o},t.tail))},e.prototype.parseTemplateLiteral=function(){var e=this.createNode(),t=[],n=[],o=this.parseTemplateHead();for(n.push(o);!o.tail;)t.push(this.parseExpression()),o=this.parseTemplateElement(),n.push(o);return this.finalize(e,new a.TemplateLiteral(n,t))},e.prototype.reinterpretExpressionAsPattern=function(e){switch(e.type){case l.Syntax.Identifier:case l.Syntax.MemberExpression:case l.Syntax.RestElement:case l.Syntax.AssignmentPattern:break;case l.Syntax.SpreadElement:e.type=l.Syntax.RestElement,this.reinterpretExpressionAsPattern(e.argument);break;case l.Syntax.ArrayExpression:e.type=l.Syntax.ArrayPattern;for(var t=0;t")||this.expect("=>"),e={type:"ArrowParameterPlaceHolder",params:[],async:!1};else{var t=this.lookahead,n=[];if(this.match("..."))e=this.parseRestElement(n),this.expect(")"),this.match("=>")||this.expect("=>"),e={type:"ArrowParameterPlaceHolder",params:[e],async:!1};else{var o=!1;if(this.context.isBindingElement=!0,e=this.inheritCoverGrammar(this.parseAssignmentExpression),this.match(",")){var r=[];for(this.context.isAssignmentTarget=!1,r.push(e);2!==this.lookahead.type&&this.match(",");){if(this.nextToken(),this.match(")")){this.nextToken();for(var i=0;i")||this.expect("=>"),this.context.isBindingElement=!1,i=0;i")&&(e.type===l.Syntax.Identifier&&"yield"===e.name&&(o=!0,e={type:"ArrowParameterPlaceHolder",params:[e],async:!1}),!o)){if(this.context.isBindingElement||this.throwUnexpectedToken(this.lookahead),e.type===l.Syntax.SequenceExpression)for(i=0;i")){for(var l=0;l0){this.nextToken(),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;for(var r=[e,this.lookahead],i=t,c=this.isolateCoverGrammar(this.parseExponentiationExpression),l=[i,n.value,c],s=[o];!((o=this.binaryPrecedence(this.lookahead))<=0);){for(;l.length>2&&o<=s[s.length-1];){c=l.pop();var d=l.pop();s.pop(),i=l.pop(),r.pop();var u=this.startNode(r[r.length-1]);l.push(this.finalize(u,new a.BinaryExpression(d,i,c)))}l.push(this.nextToken().value),s.push(o),r.push(this.lookahead),l.push(this.isolateCoverGrammar(this.parseExponentiationExpression))}var p=l.length-1;t=l[p];for(var m=r.pop();p>1;){var h=r.pop(),f=m&&m.lineStart;u=this.startNode(h,f),d=l[p-1],t=this.finalize(u,new a.BinaryExpression(d,l[p-2],t)),p-=2,m=h}}return t},e.prototype.parseConditionalExpression=function(){var e=this.lookahead,t=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match("?")){this.nextToken();var n=this.context.allowIn;this.context.allowIn=!0;var o=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=n,this.expect(":");var r=this.isolateCoverGrammar(this.parseAssignmentExpression);t=this.finalize(this.startNode(e),new a.ConditionalExpression(t,o,r)),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}return t},e.prototype.checkPatternParam=function(e,t){switch(t.type){case l.Syntax.Identifier:this.validateParam(e,t,t.name);break;case l.Syntax.RestElement:this.checkPatternParam(e,t.argument);break;case l.Syntax.AssignmentPattern:this.checkPatternParam(e,t.left);break;case l.Syntax.ArrayPattern:for(var n=0;n")){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var r=e.async,c=this.reinterpretAsCoverFormalsList(e);if(c){this.hasLineTerminator&&this.tolerateUnexpectedToken(this.lookahead),this.context.firstCoverInitializedNameError=null;var s=this.context.strict,d=this.context.allowStrictDirective;this.context.allowStrictDirective=c.simple;var u=this.context.allowYield,p=this.context.await;this.context.allowYield=!0,this.context.await=r;var m=this.startNode(t);this.expect("=>");var h=void 0;if(this.match("{")){var f=this.context.allowIn;this.context.allowIn=!0,h=this.parseFunctionSourceElements(),this.context.allowIn=f}else h=this.isolateCoverGrammar(this.parseAssignmentExpression);var C=h.type!==l.Syntax.BlockStatement;this.context.strict&&c.firstRestricted&&this.throwUnexpectedToken(c.firstRestricted,c.message),this.context.strict&&c.stricted&&this.tolerateUnexpectedToken(c.stricted,c.message),e=r?this.finalize(m,new a.AsyncArrowFunctionExpression(c.params,h,C)):this.finalize(m,new a.ArrowFunctionExpression(c.params,h,C)),this.context.strict=s,this.context.allowStrictDirective=d,this.context.allowYield=u,this.context.await=p}}else if(this.matchAssign()){if(this.context.isAssignmentTarget||this.tolerateError(i.Messages.InvalidLHSInAssignment),this.context.strict&&e.type===l.Syntax.Identifier){var g=e;this.scanner.isRestrictedWord(g.name)&&this.tolerateUnexpectedToken(n,i.Messages.StrictLHSAssignment),this.scanner.isStrictModeReservedWord(g.name)&&this.tolerateUnexpectedToken(n,i.Messages.StrictReservedWord)}this.match("=")?this.reinterpretExpressionAsPattern(e):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1);var N=(n=this.nextToken()).value,b=this.isolateCoverGrammar(this.parseAssignmentExpression);e=this.finalize(this.startNode(t),new a.AssignmentExpression(N,e,b)),this.context.firstCoverInitializedNameError=null}}return e},e.prototype.parseExpression=function(){var e=this.lookahead,t=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var n=[];for(n.push(t);2!==this.lookahead.type&&this.match(",");)this.nextToken(),n.push(this.isolateCoverGrammar(this.parseAssignmentExpression));t=this.finalize(this.startNode(e),new a.SequenceExpression(n))}return t},e.prototype.parseStatementListItem=function(){var e;if(this.context.isAssignmentTarget=!0,this.context.isBindingElement=!0,4===this.lookahead.type)switch(this.lookahead.value){case"export":this.context.isModule||this.tolerateUnexpectedToken(this.lookahead,i.Messages.IllegalExportDeclaration),e=this.parseExportDeclaration();break;case"import":this.context.isModule||this.tolerateUnexpectedToken(this.lookahead,i.Messages.IllegalImportDeclaration),e=this.parseImportDeclaration();break;case"const":e=this.parseLexicalDeclaration({inFor:!1});break;case"function":e=this.parseFunctionDeclaration();break;case"class":e=this.parseClassDeclaration();break;case"let":e=this.isLexicalDeclaration()?this.parseLexicalDeclaration({inFor:!1}):this.parseStatement();break;default:e=this.parseStatement()}else e=this.parseStatement();return e},e.prototype.parseBlock=function(){var e=this.createNode();this.expect("{");for(var t=[];!this.match("}");)t.push(this.parseStatementListItem());return this.expect("}"),this.finalize(e,new a.BlockStatement(t))},e.prototype.parseLexicalBinding=function(e,t){var n=this.createNode(),o=this.parsePattern([],e);this.context.strict&&o.type===l.Syntax.Identifier&&this.scanner.isRestrictedWord(o.name)&&this.tolerateError(i.Messages.StrictVarName);var r=null;return"const"===e?this.matchKeyword("in")||this.matchContextualKeyword("of")||(this.match("=")?(this.nextToken(),r=this.isolateCoverGrammar(this.parseAssignmentExpression)):this.throwError(i.Messages.DeclarationMissingInitializer,"const")):(!t.inFor&&o.type!==l.Syntax.Identifier||this.match("="))&&(this.expect("="),r=this.isolateCoverGrammar(this.parseAssignmentExpression)),this.finalize(n,new a.VariableDeclarator(o,r))},e.prototype.parseBindingList=function(e,t){for(var n=[this.parseLexicalBinding(e,t)];this.match(",");)this.nextToken(),n.push(this.parseLexicalBinding(e,t));return n},e.prototype.isLexicalDeclaration=function(){var e=this.scanner.saveState();this.scanner.scanComments();var t=this.scanner.lex();return this.scanner.restoreState(e),3===t.type||7===t.type&&"["===t.value||7===t.type&&"{"===t.value||4===t.type&&"let"===t.value||4===t.type&&"yield"===t.value},e.prototype.parseLexicalDeclaration=function(e){var t=this.createNode(),n=this.nextToken().value;o.assert("let"===n||"const"===n,"Lexical declaration must be either let or const");var r=this.parseBindingList(n,e);return this.consumeSemicolon(),this.finalize(t,new a.VariableDeclaration(r,n))},e.prototype.parseBindingRestElement=function(e,t){var n=this.createNode();this.expect("...");var o=this.parsePattern(e,t);return this.finalize(n,new a.RestElement(o))},e.prototype.parseArrayPattern=function(e,t){var n=this.createNode();this.expect("[");for(var o=[];!this.match("]");)if(this.match(","))this.nextToken(),o.push(null);else{if(this.match("...")){o.push(this.parseBindingRestElement(e,t));break}o.push(this.parsePatternWithDefault(e,t)),this.match("]")||this.expect(",")}return this.expect("]"),this.finalize(n,new a.ArrayPattern(o))},e.prototype.parsePropertyPattern=function(e,t){var n,o,r=this.createNode(),i=!1,c=!1;if(3===this.lookahead.type){var l=this.lookahead;n=this.parseVariableIdentifier();var s=this.finalize(r,new a.Identifier(l.value));if(this.match("=")){e.push(l),c=!0,this.nextToken();var d=this.parseAssignmentExpression();o=this.finalize(this.startNode(l),new a.AssignmentPattern(s,d))}else this.match(":")?(this.expect(":"),o=this.parsePatternWithDefault(e,t)):(e.push(l),c=!0,o=s)}else i=this.match("["),n=this.parseObjectPropertyKey(),this.expect(":"),o=this.parsePatternWithDefault(e,t);return this.finalize(r,new a.Property("init",n,i,o,!1,c))},e.prototype.parseObjectPattern=function(e,t){var n=this.createNode(),o=[];for(this.expect("{");!this.match("}");)o.push(this.parsePropertyPattern(e,t)),this.match("}")||this.expect(",");return this.expect("}"),this.finalize(n,new a.ObjectPattern(o))},e.prototype.parsePattern=function(e,t){var n;return this.match("[")?n=this.parseArrayPattern(e,t):this.match("{")?n=this.parseObjectPattern(e,t):(!this.matchKeyword("let")||"const"!==t&&"let"!==t||this.tolerateUnexpectedToken(this.lookahead,i.Messages.LetInLexicalBinding),e.push(this.lookahead),n=this.parseVariableIdentifier(t)),n},e.prototype.parsePatternWithDefault=function(e,t){var n=this.lookahead,o=this.parsePattern(e,t);if(this.match("=")){this.nextToken();var r=this.context.allowYield;this.context.allowYield=!0;var i=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowYield=r,o=this.finalize(this.startNode(n),new a.AssignmentPattern(o,i))}return o},e.prototype.parseVariableIdentifier=function(e){var t=this.createNode(),n=this.nextToken();return 4===n.type&&"yield"===n.value?this.context.strict?this.tolerateUnexpectedToken(n,i.Messages.StrictReservedWord):this.context.allowYield||this.throwUnexpectedToken(n):3!==n.type?this.context.strict&&4===n.type&&this.scanner.isStrictModeReservedWord(n.value)?this.tolerateUnexpectedToken(n,i.Messages.StrictReservedWord):(this.context.strict||"let"!==n.value||"var"!==e)&&this.throwUnexpectedToken(n):(this.context.isModule||this.context.await)&&3===n.type&&"await"===n.value&&this.tolerateUnexpectedToken(n),this.finalize(t,new a.Identifier(n.value))},e.prototype.parseVariableDeclaration=function(e){var t=this.createNode(),n=this.parsePattern([],"var");this.context.strict&&n.type===l.Syntax.Identifier&&this.scanner.isRestrictedWord(n.name)&&this.tolerateError(i.Messages.StrictVarName);var o=null;return this.match("=")?(this.nextToken(),o=this.isolateCoverGrammar(this.parseAssignmentExpression)):n.type===l.Syntax.Identifier||e.inFor||this.expect("="),this.finalize(t,new a.VariableDeclarator(n,o))},e.prototype.parseVariableDeclarationList=function(e){var t={inFor:e.inFor},n=[];for(n.push(this.parseVariableDeclaration(t));this.match(",");)this.nextToken(),n.push(this.parseVariableDeclaration(t));return n},e.prototype.parseVariableStatement=function(){var e=this.createNode();this.expectKeyword("var");var t=this.parseVariableDeclarationList({inFor:!1});return this.consumeSemicolon(),this.finalize(e,new a.VariableDeclaration(t,"var"))},e.prototype.parseEmptyStatement=function(){var e=this.createNode();return this.expect(";"),this.finalize(e,new a.EmptyStatement)},e.prototype.parseExpressionStatement=function(){var e=this.createNode(),t=this.parseExpression();return this.consumeSemicolon(),this.finalize(e,new a.ExpressionStatement(t))},e.prototype.parseIfClause=function(){return this.context.strict&&this.matchKeyword("function")&&this.tolerateError(i.Messages.StrictFunction),this.parseStatement()},e.prototype.parseIfStatement=function(){var e,t=this.createNode(),n=null;this.expectKeyword("if"),this.expect("(");var o=this.parseExpression();return!this.match(")")&&this.config.tolerant?(this.tolerateUnexpectedToken(this.nextToken()),e=this.finalize(this.createNode(),new a.EmptyStatement)):(this.expect(")"),e=this.parseIfClause(),this.matchKeyword("else")&&(this.nextToken(),n=this.parseIfClause())),this.finalize(t,new a.IfStatement(o,e,n))},e.prototype.parseDoWhileStatement=function(){var e=this.createNode();this.expectKeyword("do");var t=this.context.inIteration;this.context.inIteration=!0;var n=this.parseStatement();this.context.inIteration=t,this.expectKeyword("while"),this.expect("(");var o=this.parseExpression();return!this.match(")")&&this.config.tolerant?this.tolerateUnexpectedToken(this.nextToken()):(this.expect(")"),this.match(";")&&this.nextToken()),this.finalize(e,new a.DoWhileStatement(n,o))},e.prototype.parseWhileStatement=function(){var e,t=this.createNode();this.expectKeyword("while"),this.expect("(");var n=this.parseExpression();if(!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken()),e=this.finalize(this.createNode(),new a.EmptyStatement);else{this.expect(")");var o=this.context.inIteration;this.context.inIteration=!0,e=this.parseStatement(),this.context.inIteration=o}return this.finalize(t,new a.WhileStatement(n,e))},e.prototype.parseForStatement=function(){var e,t,n,o=null,r=null,c=null,s=!0,d=this.createNode();if(this.expectKeyword("for"),this.expect("("),this.match(";"))this.nextToken();else if(this.matchKeyword("var")){o=this.createNode(),this.nextToken();var u=this.context.allowIn;this.context.allowIn=!1;var p=this.parseVariableDeclarationList({inFor:!0});if(this.context.allowIn=u,1===p.length&&this.matchKeyword("in")){var m=p[0];m.init&&(m.id.type===l.Syntax.ArrayPattern||m.id.type===l.Syntax.ObjectPattern||this.context.strict)&&this.tolerateError(i.Messages.ForInOfLoopInitializer,"for-in"),o=this.finalize(o,new a.VariableDeclaration(p,"var")),this.nextToken(),e=o,t=this.parseExpression(),o=null}else 1===p.length&&null===p[0].init&&this.matchContextualKeyword("of")?(o=this.finalize(o,new a.VariableDeclaration(p,"var")),this.nextToken(),e=o,t=this.parseAssignmentExpression(),o=null,s=!1):(o=this.finalize(o,new a.VariableDeclaration(p,"var")),this.expect(";"))}else if(this.matchKeyword("const")||this.matchKeyword("let")){o=this.createNode();var h=this.nextToken().value;this.context.strict||"in"!==this.lookahead.value?(u=this.context.allowIn,this.context.allowIn=!1,p=this.parseBindingList(h,{inFor:!0}),this.context.allowIn=u,1===p.length&&null===p[0].init&&this.matchKeyword("in")?(o=this.finalize(o,new a.VariableDeclaration(p,h)),this.nextToken(),e=o,t=this.parseExpression(),o=null):1===p.length&&null===p[0].init&&this.matchContextualKeyword("of")?(o=this.finalize(o,new a.VariableDeclaration(p,h)),this.nextToken(),e=o,t=this.parseAssignmentExpression(),o=null,s=!1):(this.consumeSemicolon(),o=this.finalize(o,new a.VariableDeclaration(p,h)))):(o=this.finalize(o,new a.Identifier(h)),this.nextToken(),e=o,t=this.parseExpression(),o=null)}else{var f=this.lookahead;if(u=this.context.allowIn,this.context.allowIn=!1,o=this.inheritCoverGrammar(this.parseAssignmentExpression),this.context.allowIn=u,this.matchKeyword("in"))this.context.isAssignmentTarget&&o.type!==l.Syntax.AssignmentExpression||this.tolerateError(i.Messages.InvalidLHSInForIn),this.nextToken(),this.reinterpretExpressionAsPattern(o),e=o,t=this.parseExpression(),o=null;else if(this.matchContextualKeyword("of"))this.context.isAssignmentTarget&&o.type!==l.Syntax.AssignmentExpression||this.tolerateError(i.Messages.InvalidLHSInForLoop),this.nextToken(),this.reinterpretExpressionAsPattern(o),e=o,t=this.parseAssignmentExpression(),o=null,s=!1;else{if(this.match(",")){for(var C=[o];this.match(",");)this.nextToken(),C.push(this.isolateCoverGrammar(this.parseAssignmentExpression));o=this.finalize(this.startNode(f),new a.SequenceExpression(C))}this.expect(";")}}if(void 0===e&&(this.match(";")||(r=this.parseExpression()),this.expect(";"),this.match(")")||(c=this.parseExpression())),!this.match(")")&&this.config.tolerant)this.tolerateUnexpectedToken(this.nextToken()),n=this.finalize(this.createNode(),new a.EmptyStatement);else{this.expect(")");var g=this.context.inIteration;this.context.inIteration=!0,n=this.isolateCoverGrammar(this.parseStatement),this.context.inIteration=g}return void 0===e?this.finalize(d,new a.ForStatement(o,r,c,n)):s?this.finalize(d,new a.ForInStatement(e,t,n)):this.finalize(d,new a.ForOfStatement(e,t,n))},e.prototype.parseContinueStatement=function(){var e=this.createNode();this.expectKeyword("continue");var t=null;if(3===this.lookahead.type&&!this.hasLineTerminator){var n=this.parseVariableIdentifier();t=n;var o="$"+n.name;Object.prototype.hasOwnProperty.call(this.context.labelSet,o)||this.throwError(i.Messages.UnknownLabel,n.name)}return this.consumeSemicolon(),null!==t||this.context.inIteration||this.throwError(i.Messages.IllegalContinue),this.finalize(e,new a.ContinueStatement(t))},e.prototype.parseBreakStatement=function(){var e=this.createNode();this.expectKeyword("break");var t=null;if(3===this.lookahead.type&&!this.hasLineTerminator){var n=this.parseVariableIdentifier(),o="$"+n.name;Object.prototype.hasOwnProperty.call(this.context.labelSet,o)||this.throwError(i.Messages.UnknownLabel,n.name),t=n}return this.consumeSemicolon(),null!==t||this.context.inIteration||this.context.inSwitch||this.throwError(i.Messages.IllegalBreak),this.finalize(e,new a.BreakStatement(t))},e.prototype.parseReturnStatement=function(){this.context.inFunctionBody||this.tolerateError(i.Messages.IllegalReturn);var e=this.createNode();this.expectKeyword("return");var t=(this.match(";")||this.match("}")||this.hasLineTerminator||2===this.lookahead.type)&&8!==this.lookahead.type&&10!==this.lookahead.type?null:this.parseExpression();return this.consumeSemicolon(),this.finalize(e,new a.ReturnStatement(t))},e.prototype.parseWithStatement=function(){this.context.strict&&this.tolerateError(i.Messages.StrictModeWith);var e,t=this.createNode();this.expectKeyword("with"),this.expect("(");var n=this.parseExpression();return!this.match(")")&&this.config.tolerant?(this.tolerateUnexpectedToken(this.nextToken()),e=this.finalize(this.createNode(),new a.EmptyStatement)):(this.expect(")"),e=this.parseStatement()),this.finalize(t,new a.WithStatement(n,e))},e.prototype.parseSwitchCase=function(){var e,t=this.createNode();this.matchKeyword("default")?(this.nextToken(),e=null):(this.expectKeyword("case"),e=this.parseExpression()),this.expect(":");for(var n=[];!(this.match("}")||this.matchKeyword("default")||this.matchKeyword("case"));)n.push(this.parseStatementListItem());return this.finalize(t,new a.SwitchCase(e,n))},e.prototype.parseSwitchStatement=function(){var e=this.createNode();this.expectKeyword("switch"),this.expect("(");var t=this.parseExpression();this.expect(")");var n=this.context.inSwitch;this.context.inSwitch=!0;var o=[],r=!1;for(this.expect("{");!this.match("}");){var c=this.parseSwitchCase();null===c.test&&(r&&this.throwError(i.Messages.MultipleDefaultsInSwitch),r=!0),o.push(c)}return this.expect("}"),this.context.inSwitch=n,this.finalize(e,new a.SwitchStatement(t,o))},e.prototype.parseLabelledStatement=function(){var e,t=this.createNode(),n=this.parseExpression();if(n.type===l.Syntax.Identifier&&this.match(":")){this.nextToken();var o=n,r="$"+o.name;Object.prototype.hasOwnProperty.call(this.context.labelSet,r)&&this.throwError(i.Messages.Redeclaration,"Label",o.name),this.context.labelSet[r]=!0;var c=void 0;if(this.matchKeyword("class"))this.tolerateUnexpectedToken(this.lookahead),c=this.parseClassDeclaration();else if(this.matchKeyword("function")){var s=this.lookahead,d=this.parseFunctionDeclaration();this.context.strict?this.tolerateUnexpectedToken(s,i.Messages.StrictFunction):d.generator&&this.tolerateUnexpectedToken(s,i.Messages.GeneratorInLegacyContext),c=d}else c=this.parseStatement();delete this.context.labelSet[r],e=new a.LabeledStatement(o,c)}else this.consumeSemicolon(),e=new a.ExpressionStatement(n);return this.finalize(t,e)},e.prototype.parseThrowStatement=function(){var e=this.createNode();this.expectKeyword("throw"),this.hasLineTerminator&&this.throwError(i.Messages.NewlineAfterThrow);var t=this.parseExpression();return this.consumeSemicolon(),this.finalize(e,new a.ThrowStatement(t))},e.prototype.parseCatchClause=function(){var e=this.createNode();this.expectKeyword("catch"),this.expect("("),this.match(")")&&this.throwUnexpectedToken(this.lookahead);for(var t=[],n=this.parsePattern(t),o={},r=0;r0&&this.tolerateError(i.Messages.BadGetterArity);var o=this.parsePropertyMethod(n);return this.context.allowYield=t,this.finalize(e,new a.FunctionExpression(null,n.params,o,!1))},e.prototype.parseSetterMethod=function(){var e=this.createNode(),t=this.context.allowYield;this.context.allowYield=!0;var n=this.parseFormalParameters();1!==n.params.length?this.tolerateError(i.Messages.BadSetterArity):n.params[0]instanceof a.RestElement&&this.tolerateError(i.Messages.BadSetterRestParameter);var o=this.parsePropertyMethod(n);return this.context.allowYield=t,this.finalize(e,new a.FunctionExpression(null,n.params,o,!1))},e.prototype.parseGeneratorMethod=function(){var e=this.createNode(),t=this.context.allowYield;this.context.allowYield=!0;var n=this.parseFormalParameters();this.context.allowYield=!1;var o=this.parsePropertyMethod(n);return this.context.allowYield=t,this.finalize(e,new a.FunctionExpression(null,n.params,o,!0))},e.prototype.isStartOfExpression=function(){var e=!0,t=this.lookahead.value;switch(this.lookahead.type){case 7:e="["===t||"("===t||"{"===t||"+"===t||"-"===t||"!"===t||"~"===t||"++"===t||"--"===t||"/"===t||"/="===t;break;case 4:e="class"===t||"delete"===t||"function"===t||"let"===t||"new"===t||"super"===t||"this"===t||"typeof"===t||"void"===t||"yield"===t}return e},e.prototype.parseYieldExpression=function(){var e=this.createNode();this.expectKeyword("yield");var t=null,n=!1;if(!this.hasLineTerminator){var o=this.context.allowYield;this.context.allowYield=!1,(n=this.match("*"))?(this.nextToken(),t=this.parseAssignmentExpression()):this.isStartOfExpression()&&(t=this.parseAssignmentExpression()),this.context.allowYield=o}return this.finalize(e,new a.YieldExpression(t,n))},e.prototype.parseClassElement=function(e){var t=this.lookahead,n=this.createNode(),o="",r=null,c=null,l=!1,s=!1,d=!1,u=!1;if(this.match("*"))this.nextToken();else if(l=this.match("["),"static"===(r=this.parseObjectPropertyKey()).name&&(this.qualifiedPropertyName(this.lookahead)||this.match("*"))&&(t=this.lookahead,d=!0,l=this.match("["),this.match("*")?this.nextToken():r=this.parseObjectPropertyKey()),3===t.type&&!this.hasLineTerminator&&"async"===t.value){var p=this.lookahead.value;":"!==p&&"("!==p&&"*"!==p&&(u=!0,t=this.lookahead,r=this.parseObjectPropertyKey(),3===t.type&&"constructor"===t.value&&this.tolerateUnexpectedToken(t,i.Messages.ConstructorIsAsync))}var m=this.qualifiedPropertyName(this.lookahead);return 3===t.type?"get"===t.value&&m?(o="get",l=this.match("["),r=this.parseObjectPropertyKey(),this.context.allowYield=!1,c=this.parseGetterMethod()):"set"===t.value&&m&&(o="set",l=this.match("["),r=this.parseObjectPropertyKey(),c=this.parseSetterMethod()):7===t.type&&"*"===t.value&&m&&(o="init",l=this.match("["),r=this.parseObjectPropertyKey(),c=this.parseGeneratorMethod(),s=!0),!o&&r&&this.match("(")&&(o="init",c=u?this.parsePropertyMethodAsyncFunction():this.parsePropertyMethodFunction(),s=!0),o||this.throwUnexpectedToken(this.lookahead),"init"===o&&(o="method"),l||(d&&this.isPropertyKey(r,"prototype")&&this.throwUnexpectedToken(t,i.Messages.StaticPrototype),!d&&this.isPropertyKey(r,"constructor")&&(("method"!==o||!s||c&&c.generator)&&this.throwUnexpectedToken(t,i.Messages.ConstructorSpecialMethod),e.value?this.throwUnexpectedToken(t,i.Messages.DuplicateConstructor):e.value=!0,o="constructor")),this.finalize(n,new a.MethodDefinition(r,l,c,o,d))},e.prototype.parseClassElementList=function(){var e=[],t={value:!1};for(this.expect("{");!this.match("}");)this.match(";")?this.nextToken():e.push(this.parseClassElement(t));return this.expect("}"),e},e.prototype.parseClassBody=function(){var e=this.createNode(),t=this.parseClassElementList();return this.finalize(e,new a.ClassBody(t))},e.prototype.parseClassDeclaration=function(e){var t=this.createNode(),n=this.context.strict;this.context.strict=!0,this.expectKeyword("class");var o=e&&3!==this.lookahead.type?null:this.parseVariableIdentifier(),r=null;this.matchKeyword("extends")&&(this.nextToken(),r=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall));var i=this.parseClassBody();return this.context.strict=n,this.finalize(t,new a.ClassDeclaration(o,r,i))},e.prototype.parseClassExpression=function(){var e=this.createNode(),t=this.context.strict;this.context.strict=!0,this.expectKeyword("class");var n=3===this.lookahead.type?this.parseVariableIdentifier():null,o=null;this.matchKeyword("extends")&&(this.nextToken(),o=this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall));var r=this.parseClassBody();return this.context.strict=t,this.finalize(e,new a.ClassExpression(n,o,r))},e.prototype.parseModule=function(){this.context.strict=!0,this.context.isModule=!0,this.scanner.isModule=!0;for(var e=this.createNode(),t=this.parseDirectivePrologues();2!==this.lookahead.type;)t.push(this.parseStatementListItem());return this.finalize(e,new a.Module(t))},e.prototype.parseScript=function(){for(var e=this.createNode(),t=this.parseDirectivePrologues();2!==this.lookahead.type;)t.push(this.parseStatementListItem());return this.finalize(e,new a.Script(t))},e.prototype.parseModuleSpecifier=function(){var e=this.createNode();8!==this.lookahead.type&&this.throwError(i.Messages.InvalidModuleSpecifier);var t=this.nextToken(),n=this.getTokenRaw(t);return this.finalize(e,new a.Literal(t.value,n))},e.prototype.parseImportSpecifier=function(){var e,t,n=this.createNode();return 3===this.lookahead.type?(t=e=this.parseVariableIdentifier(),this.matchContextualKeyword("as")&&(this.nextToken(),t=this.parseVariableIdentifier())):(t=e=this.parseIdentifierName(),this.matchContextualKeyword("as")?(this.nextToken(),t=this.parseVariableIdentifier()):this.throwUnexpectedToken(this.nextToken())),this.finalize(n,new a.ImportSpecifier(t,e))},e.prototype.parseNamedImports=function(){this.expect("{");for(var e=[];!this.match("}");)e.push(this.parseImportSpecifier()),this.match("}")||this.expect(",");return this.expect("}"),e},e.prototype.parseImportDefaultSpecifier=function(){var e=this.createNode(),t=this.parseIdentifierName();return this.finalize(e,new a.ImportDefaultSpecifier(t))},e.prototype.parseImportNamespaceSpecifier=function(){var e=this.createNode();this.expect("*"),this.matchContextualKeyword("as")||this.throwError(i.Messages.NoAsAfterImportNamespace),this.nextToken();var t=this.parseIdentifierName();return this.finalize(e,new a.ImportNamespaceSpecifier(t))},e.prototype.parseImportDeclaration=function(){this.context.inFunctionBody&&this.throwError(i.Messages.IllegalImportDeclaration);var e,t=this.createNode();this.expectKeyword("import");var n=[];if(8===this.lookahead.type)e=this.parseModuleSpecifier();else{if(this.match("{")?n=n.concat(this.parseNamedImports()):this.match("*")?n.push(this.parseImportNamespaceSpecifier()):this.isIdentifierName(this.lookahead)&&!this.matchKeyword("default")?(n.push(this.parseImportDefaultSpecifier()),this.match(",")&&(this.nextToken(),this.match("*")?n.push(this.parseImportNamespaceSpecifier()):this.match("{")?n=n.concat(this.parseNamedImports()):this.throwUnexpectedToken(this.lookahead))):this.throwUnexpectedToken(this.nextToken()),!this.matchContextualKeyword("from")){var o=this.lookahead.value?i.Messages.UnexpectedToken:i.Messages.MissingFromClause;this.throwError(o,this.lookahead.value)}this.nextToken(),e=this.parseModuleSpecifier()}return this.consumeSemicolon(),this.finalize(t,new a.ImportDeclaration(n,e))},e.prototype.parseExportSpecifier=function(){var e=this.createNode(),t=this.parseIdentifierName(),n=t;return this.matchContextualKeyword("as")&&(this.nextToken(),n=this.parseIdentifierName()),this.finalize(e,new a.ExportSpecifier(t,n))},e.prototype.parseExportDeclaration=function(){this.context.inFunctionBody&&this.throwError(i.Messages.IllegalExportDeclaration);var e,t=this.createNode();if(this.expectKeyword("export"),this.matchKeyword("default"))if(this.nextToken(),this.matchKeyword("function")){var n=this.parseFunctionDeclaration(!0);e=this.finalize(t,new a.ExportDefaultDeclaration(n))}else this.matchKeyword("class")?(n=this.parseClassDeclaration(!0),e=this.finalize(t,new a.ExportDefaultDeclaration(n))):this.matchContextualKeyword("async")?(n=this.matchAsyncFunction()?this.parseFunctionDeclaration(!0):this.parseAssignmentExpression(),e=this.finalize(t,new a.ExportDefaultDeclaration(n))):(this.matchContextualKeyword("from")&&this.throwError(i.Messages.UnexpectedToken,this.lookahead.value),n=this.match("{")?this.parseObjectInitializer():this.match("[")?this.parseArrayInitializer():this.parseAssignmentExpression(),this.consumeSemicolon(),e=this.finalize(t,new a.ExportDefaultDeclaration(n)));else if(this.match("*")){if(this.nextToken(),!this.matchContextualKeyword("from")){var o=this.lookahead.value?i.Messages.UnexpectedToken:i.Messages.MissingFromClause;this.throwError(o,this.lookahead.value)}this.nextToken();var r=this.parseModuleSpecifier();this.consumeSemicolon(),e=this.finalize(t,new a.ExportAllDeclaration(r))}else if(4===this.lookahead.type){switch(n=void 0,this.lookahead.value){case"let":case"const":n=this.parseLexicalDeclaration({inFor:!1});break;case"var":case"class":case"function":n=this.parseStatementListItem();break;default:this.throwUnexpectedToken(this.lookahead)}e=this.finalize(t,new a.ExportNamedDeclaration(n,[],null))}else if(this.matchAsyncFunction())n=this.parseFunctionDeclaration(),e=this.finalize(t,new a.ExportNamedDeclaration(n,[],null));else{var c=[],l=null,s=!1;for(this.expect("{");!this.match("}");)s=s||this.matchKeyword("default"),c.push(this.parseExportSpecifier()),this.match("}")||this.expect(",");this.expect("}"),this.matchContextualKeyword("from")?(this.nextToken(),l=this.parseModuleSpecifier(),this.consumeSemicolon()):s?(o=this.lookahead.value?i.Messages.UnexpectedToken:i.Messages.MissingFromClause,this.throwError(o,this.lookahead.value)):this.consumeSemicolon(),e=this.finalize(t,new a.ExportNamedDeclaration(null,c,l))}return e},e}();t.Parser=d},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.assert=function(e,t){if(!e)throw new Error("ASSERT: "+t)}},function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(){this.errors=[],this.tolerant=!1}return e.prototype.recordError=function(e){this.errors.push(e)},e.prototype.tolerate=function(e){if(!this.tolerant)throw e;this.recordError(e)},e.prototype.constructError=function(e,t){var n=new Error(e);try{throw n}catch(o){Object.create&&Object.defineProperty&&(n=Object.create(o),Object.defineProperty(n,"column",{value:t}))}return n},e.prototype.createError=function(e,t,n,o){var r="Line "+t+": "+o,i=this.constructError(r,n);return i.index=e,i.lineNumber=t,i.description=o,i},e.prototype.throwError=function(e,t,n,o){throw this.createError(e,t,n,o)},e.prototype.tolerateError=function(e,t,n,o){var r=this.createError(e,t,n,o);if(!this.tolerant)throw r;this.recordError(r)},e}();t.ErrorHandler=n},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Messages={BadGetterArity:"Getter must not have any formal parameters",BadSetterArity:"Setter must have exactly one formal parameter",BadSetterRestParameter:"Setter function argument must not be a rest parameter",ConstructorIsAsync:"Class constructor may not be an async method",ConstructorSpecialMethod:"Class constructor may not be an accessor",DeclarationMissingInitializer:"Missing initializer in %0 declaration",DefaultRestParameter:"Unexpected token =",DuplicateBinding:"Duplicate binding %0",DuplicateConstructor:"A class may only have one constructor",DuplicateProtoProperty:"Duplicate __proto__ fields are not allowed in object literals",ForInOfLoopInitializer:"%0 loop variable declaration may not have an initializer",GeneratorInLegacyContext:"Generator declarations are not allowed in legacy contexts",IllegalBreak:"Illegal break statement",IllegalContinue:"Illegal continue statement",IllegalExportDeclaration:"Unexpected token",IllegalImportDeclaration:"Unexpected token",IllegalLanguageModeDirective:"Illegal 'use strict' directive in function with non-simple parameter list",IllegalReturn:"Illegal return statement",InvalidEscapedReservedWord:"Keyword must not contain escaped characters",InvalidHexEscapeSequence:"Invalid hexadecimal escape sequence",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",InvalidLHSInForLoop:"Invalid left-hand side in for-loop",InvalidModuleSpecifier:"Unexpected token",InvalidRegExp:"Invalid regular expression",LetInLexicalBinding:"let is disallowed as a lexically bound name",MissingFromClause:"Unexpected token",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NewlineAfterThrow:"Illegal newline after throw",NoAsAfterImportNamespace:"Unexpected token",NoCatchOrFinally:"Missing catch or finally after try",ParameterAfterRestParameter:"Rest parameter must be last formal parameter",Redeclaration:"%0 '%1' has already been declared",StaticPrototype:"Classes may not have static property named prototype",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictFunction:"In strict mode code, functions can only be declared at top level or inside a block",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictModeWith:"Strict mode code may not include a with statement",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictReservedWord:"Use of future reserved word in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",TemplateOctalLiteral:"Octal literals are not allowed in template strings.",UnexpectedEOS:"Unexpected end of input",UnexpectedIdentifier:"Unexpected identifier",UnexpectedNumber:"Unexpected number",UnexpectedReserved:"Unexpected reserved word",UnexpectedString:"Unexpected string",UnexpectedTemplate:"Unexpected quasi %0",UnexpectedToken:"Unexpected token %0",UnexpectedTokenIllegal:"Unexpected token ILLEGAL",UnknownLabel:"Undefined label '%0'",UnterminatedRegExp:"Invalid regular expression: missing /"}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(9),r=n(4),i=n(11);function a(e){return"0123456789abcdef".indexOf(e.toLowerCase())}function c(e){return"01234567".indexOf(e)}var l=function(){function e(e,t){this.source=e,this.errorHandler=t,this.trackComment=!1,this.isModule=!1,this.length=e.length,this.index=0,this.lineNumber=e.length>0?1:0,this.lineStart=0,this.curlyStack=[]}return e.prototype.saveState=function(){return{index:this.index,lineNumber:this.lineNumber,lineStart:this.lineStart}},e.prototype.restoreState=function(e){this.index=e.index,this.lineNumber=e.lineNumber,this.lineStart=e.lineStart},e.prototype.eof=function(){return this.index>=this.length},e.prototype.throwUnexpectedToken=function(e){return void 0===e&&(e=i.Messages.UnexpectedTokenIllegal),this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,e)},e.prototype.tolerateUnexpectedToken=function(e){void 0===e&&(e=i.Messages.UnexpectedTokenIllegal),this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,e)},e.prototype.skipSingleLineComment=function(e){var t,n,o=[];for(this.trackComment&&(o=[],t=this.index-e,n={start:{line:this.lineNumber,column:this.index-this.lineStart-e},end:{}});!this.eof();){var i=this.source.charCodeAt(this.index);if(++this.index,r.Character.isLineTerminator(i)){if(this.trackComment){n.end={line:this.lineNumber,column:this.index-this.lineStart-1};var a={multiLine:!1,slice:[t+e,this.index-1],range:[t,this.index-1],loc:n};o.push(a)}return 13===i&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,o}}return this.trackComment&&(n.end={line:this.lineNumber,column:this.index-this.lineStart},a={multiLine:!1,slice:[t+e,this.index],range:[t,this.index],loc:n},o.push(a)),o},e.prototype.skipMultiLineComment=function(){var e,t,n=[];for(this.trackComment&&(n=[],e=this.index-2,t={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}});!this.eof();){var o=this.source.charCodeAt(this.index);if(r.Character.isLineTerminator(o))13===o&&10===this.source.charCodeAt(this.index+1)&&++this.index,++this.lineNumber,++this.index,this.lineStart=this.index;else if(42===o){if(47===this.source.charCodeAt(this.index+1)){if(this.index+=2,this.trackComment){t.end={line:this.lineNumber,column:this.index-this.lineStart};var i={multiLine:!0,slice:[e+2,this.index-2],range:[e,this.index],loc:t};n.push(i)}return n}++this.index}else++this.index}return this.trackComment&&(t.end={line:this.lineNumber,column:this.index-this.lineStart},i={multiLine:!0,slice:[e+2,this.index],range:[e,this.index],loc:t},n.push(i)),this.tolerateUnexpectedToken(),n},e.prototype.scanComments=function(){var e;this.trackComment&&(e=[]);for(var t=0===this.index;!this.eof();){var n=this.source.charCodeAt(this.index);if(r.Character.isWhiteSpace(n))++this.index;else if(r.Character.isLineTerminator(n))++this.index,13===n&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,t=!0;else if(47===n)if(47===(n=this.source.charCodeAt(this.index+1))){this.index+=2;var o=this.skipSingleLineComment(2);this.trackComment&&(e=e.concat(o)),t=!0}else{if(42!==n)break;this.index+=2,o=this.skipMultiLineComment(),this.trackComment&&(e=e.concat(o))}else if(t&&45===n){if(45!==this.source.charCodeAt(this.index+1)||62!==this.source.charCodeAt(this.index+2))break;this.index+=3,o=this.skipSingleLineComment(3),this.trackComment&&(e=e.concat(o))}else{if(60!==n||this.isModule)break;if("!--"!==this.source.slice(this.index+1,this.index+4))break;this.index+=4,o=this.skipSingleLineComment(4),this.trackComment&&(e=e.concat(o))}}return e},e.prototype.isFutureReservedWord=function(e){switch(e){case"enum":case"export":case"import":case"super":return!0;default:return!1}},e.prototype.isStrictModeReservedWord=function(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}},e.prototype.isRestrictedWord=function(e){return"eval"===e||"arguments"===e},e.prototype.isKeyword=function(e){switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e||"let"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}},e.prototype.codePointAt=function(e){var t=this.source.charCodeAt(e);if(t>=55296&&t<=56319){var n=this.source.charCodeAt(e+1);n>=56320&&n<=57343&&(t=1024*(t-55296)+n-56320+65536)}return t},e.prototype.scanHexEscape=function(e){for(var t="u"===e?4:2,n=0,o=0;o1114111||"}"!==e)&&this.throwUnexpectedToken(),r.Character.fromCodePoint(t)},e.prototype.getIdentifier=function(){for(var e=this.index++;!this.eof();){var t=this.source.charCodeAt(this.index);if(92===t)return this.index=e,this.getComplexIdentifier();if(t>=55296&&t<57343)return this.index=e,this.getComplexIdentifier();if(!r.Character.isIdentifierPart(t))break;++this.index}return this.source.slice(e,this.index)},e.prototype.getComplexIdentifier=function(){var e,t=this.codePointAt(this.index),n=r.Character.fromCodePoint(t);for(this.index+=n.length,92===t&&(117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,e=this.scanUnicodeCodePointEscape()):null!==(e=this.scanHexEscape("u"))&&"\\"!==e&&r.Character.isIdentifierStart(e.charCodeAt(0))||this.throwUnexpectedToken(),n=e);!this.eof()&&(t=this.codePointAt(this.index),r.Character.isIdentifierPart(t));)n+=e=r.Character.fromCodePoint(t),this.index+=e.length,92===t&&(n=n.substr(0,n.length-1),117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,e=this.scanUnicodeCodePointEscape()):null!==(e=this.scanHexEscape("u"))&&"\\"!==e&&r.Character.isIdentifierPart(e.charCodeAt(0))||this.throwUnexpectedToken(),n+=e);return n},e.prototype.octalToDecimal=function(e){var t="0"!==e,n=c(e);return!this.eof()&&r.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(t=!0,n=8*n+c(this.source[this.index++]),"0123".indexOf(e)>=0&&!this.eof()&&r.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(n=8*n+c(this.source[this.index++]))),{code:n,octal:t}},e.prototype.scanIdentifier=function(){var e,t=this.index,n=92===this.source.charCodeAt(t)?this.getComplexIdentifier():this.getIdentifier();if(3!=(e=1===n.length?3:this.isKeyword(n)?4:"null"===n?5:"true"===n||"false"===n?1:3)&&t+n.length!==this.index){var o=this.index;this.index=t,this.tolerateUnexpectedToken(i.Messages.InvalidEscapedReservedWord),this.index=o}return{type:e,value:n,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.scanPunctuator=function(){var e=this.index,t=this.source[this.index];switch(t){case"(":case"{":"{"===t&&this.curlyStack.push("{"),++this.index;break;case".":++this.index,"."===this.source[this.index]&&"."===this.source[this.index+1]&&(this.index+=2,t="...");break;case"}":++this.index,this.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++this.index;break;default:">>>="===(t=this.source.substr(this.index,4))?this.index+=4:"==="===(t=t.substr(0,3))||"!=="===t||">>>"===t||"<<="===t||">>="===t||"**="===t?this.index+=3:"&&"===(t=t.substr(0,2))||"||"===t||"=="===t||"!="===t||"+="===t||"-="===t||"*="===t||"/="===t||"++"===t||"--"===t||"<<"===t||">>"===t||"&="===t||"|="===t||"^="===t||"%="===t||"<="===t||">="===t||"=>"===t||"**"===t?this.index+=2:(t=this.source[this.index],"<>=!+-*%&|^/".indexOf(t)>=0&&++this.index)}return this.index===e&&this.throwUnexpectedToken(),{type:7,value:t,lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanHexLiteral=function(e){for(var t="";!this.eof()&&r.Character.isHexDigit(this.source.charCodeAt(this.index));)t+=this.source[this.index++];return 0===t.length&&this.throwUnexpectedToken(),r.Character.isIdentifierStart(this.source.charCodeAt(this.index))&&this.throwUnexpectedToken(),{type:6,value:parseInt("0x"+t,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanBinaryLiteral=function(e){for(var t,n="";!this.eof()&&("0"===(t=this.source[this.index])||"1"===t);)n+=this.source[this.index++];return 0===n.length&&this.throwUnexpectedToken(),this.eof()||(t=this.source.charCodeAt(this.index),(r.Character.isIdentifierStart(t)||r.Character.isDecimalDigit(t))&&this.throwUnexpectedToken()),{type:6,value:parseInt(n,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanOctalLiteral=function(e,t){var n="",o=!1;for(r.Character.isOctalDigit(e.charCodeAt(0))?(o=!0,n="0"+this.source[this.index++]):++this.index;!this.eof()&&r.Character.isOctalDigit(this.source.charCodeAt(this.index));)n+=this.source[this.index++];return o||0!==n.length||this.throwUnexpectedToken(),(r.Character.isIdentifierStart(this.source.charCodeAt(this.index))||r.Character.isDecimalDigit(this.source.charCodeAt(this.index)))&&this.throwUnexpectedToken(),{type:6,value:parseInt(n,8),octal:o,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.isImplicitOctalLiteral=function(){for(var e=this.index+1;e=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,(function(e,t,n){var r=parseInt(t||n,16);return r>1114111&&o.throwUnexpectedToken(i.Messages.InvalidRegExp),r<=65535?String.fromCharCode(r):"\uffff"})).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"\uffff"));try{RegExp(n)}catch(r){this.throwUnexpectedToken(i.Messages.InvalidRegExp)}try{return new RegExp(e,t)}catch(a){return null}},e.prototype.scanRegExpBody=function(){var e=this.source[this.index];o.assert("/"===e,"Regular expression literal must start with a slash");for(var t=this.source[this.index++],n=!1,a=!1;!this.eof();)if(t+=e=this.source[this.index++],"\\"===e)e=this.source[this.index++],r.Character.isLineTerminator(e.charCodeAt(0))&&this.throwUnexpectedToken(i.Messages.UnterminatedRegExp),t+=e;else if(r.Character.isLineTerminator(e.charCodeAt(0)))this.throwUnexpectedToken(i.Messages.UnterminatedRegExp);else if(n)"]"===e&&(n=!1);else{if("/"===e){a=!0;break}"["===e&&(n=!0)}return a||this.throwUnexpectedToken(i.Messages.UnterminatedRegExp),t.substr(1,t.length-2)},e.prototype.scanRegExpFlags=function(){for(var e="";!this.eof();){var t=this.source[this.index];if(!r.Character.isIdentifierPart(t.charCodeAt(0)))break;if(++this.index,"\\"!==t||this.eof())e+=t;else if("u"===(t=this.source[this.index])){++this.index;var n=this.index,o=this.scanHexEscape("u");if(null!==o)for(e+=o;n=55296&&e<57343&&r.Character.isIdentifierStart(this.codePointAt(this.index))?this.scanIdentifier():this.scanPunctuator()},e}();t.Scanner=l},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TokenName={},t.TokenName[1]="Boolean",t.TokenName[2]="",t.TokenName[3]="Identifier",t.TokenName[4]="Keyword",t.TokenName[5]="Null",t.TokenName[6]="Numeric",t.TokenName[7]="Punctuator",t.TokenName[8]="String",t.TokenName[9]="RegularExpression",t.TokenName[10]="Template"},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.XHTMLEntities={quot:'"',amp:"&",apos:"'",gt:">",nbsp:"\xa0",iexcl:"\xa1",cent:"\xa2",pound:"\xa3",curren:"\xa4",yen:"\xa5",brvbar:"\xa6",sect:"\xa7",uml:"\xa8",copy:"\xa9",ordf:"\xaa",laquo:"\xab",not:"\xac",shy:"\xad",reg:"\xae",macr:"\xaf",deg:"\xb0",plusmn:"\xb1",sup2:"\xb2",sup3:"\xb3",acute:"\xb4",micro:"\xb5",para:"\xb6",middot:"\xb7",cedil:"\xb8",sup1:"\xb9",ordm:"\xba",raquo:"\xbb",frac14:"\xbc",frac12:"\xbd",frac34:"\xbe",iquest:"\xbf",Agrave:"\xc0",Aacute:"\xc1",Acirc:"\xc2",Atilde:"\xc3",Auml:"\xc4",Aring:"\xc5",AElig:"\xc6",Ccedil:"\xc7",Egrave:"\xc8",Eacute:"\xc9",Ecirc:"\xca",Euml:"\xcb",Igrave:"\xcc",Iacute:"\xcd",Icirc:"\xce",Iuml:"\xcf",ETH:"\xd0",Ntilde:"\xd1",Ograve:"\xd2",Oacute:"\xd3",Ocirc:"\xd4",Otilde:"\xd5",Ouml:"\xd6",times:"\xd7",Oslash:"\xd8",Ugrave:"\xd9",Uacute:"\xda",Ucirc:"\xdb",Uuml:"\xdc",Yacute:"\xdd",THORN:"\xde",szlig:"\xdf",agrave:"\xe0",aacute:"\xe1",acirc:"\xe2",atilde:"\xe3",auml:"\xe4",aring:"\xe5",aelig:"\xe6",ccedil:"\xe7",egrave:"\xe8",eacute:"\xe9",ecirc:"\xea",euml:"\xeb",igrave:"\xec",iacute:"\xed",icirc:"\xee",iuml:"\xef",eth:"\xf0",ntilde:"\xf1",ograve:"\xf2",oacute:"\xf3",ocirc:"\xf4",otilde:"\xf5",ouml:"\xf6",divide:"\xf7",oslash:"\xf8",ugrave:"\xf9",uacute:"\xfa",ucirc:"\xfb",uuml:"\xfc",yacute:"\xfd",thorn:"\xfe",yuml:"\xff",OElig:"\u0152",oelig:"\u0153",Scaron:"\u0160",scaron:"\u0161",Yuml:"\u0178",fnof:"\u0192",circ:"\u02c6",tilde:"\u02dc",Alpha:"\u0391",Beta:"\u0392",Gamma:"\u0393",Delta:"\u0394",Epsilon:"\u0395",Zeta:"\u0396",Eta:"\u0397",Theta:"\u0398",Iota:"\u0399",Kappa:"\u039a",Lambda:"\u039b",Mu:"\u039c",Nu:"\u039d",Xi:"\u039e",Omicron:"\u039f",Pi:"\u03a0",Rho:"\u03a1",Sigma:"\u03a3",Tau:"\u03a4",Upsilon:"\u03a5",Phi:"\u03a6",Chi:"\u03a7",Psi:"\u03a8",Omega:"\u03a9",alpha:"\u03b1",beta:"\u03b2",gamma:"\u03b3",delta:"\u03b4",epsilon:"\u03b5",zeta:"\u03b6",eta:"\u03b7",theta:"\u03b8",iota:"\u03b9",kappa:"\u03ba",lambda:"\u03bb",mu:"\u03bc",nu:"\u03bd",xi:"\u03be",omicron:"\u03bf",pi:"\u03c0",rho:"\u03c1",sigmaf:"\u03c2",sigma:"\u03c3",tau:"\u03c4",upsilon:"\u03c5",phi:"\u03c6",chi:"\u03c7",psi:"\u03c8",omega:"\u03c9",thetasym:"\u03d1",upsih:"\u03d2",piv:"\u03d6",ensp:"\u2002",emsp:"\u2003",thinsp:"\u2009",zwnj:"\u200c",zwj:"\u200d",lrm:"\u200e",rlm:"\u200f",ndash:"\u2013",mdash:"\u2014",lsquo:"\u2018",rsquo:"\u2019",sbquo:"\u201a",ldquo:"\u201c",rdquo:"\u201d",bdquo:"\u201e",dagger:"\u2020",Dagger:"\u2021",bull:"\u2022",hellip:"\u2026",permil:"\u2030",prime:"\u2032",Prime:"\u2033",lsaquo:"\u2039",rsaquo:"\u203a",oline:"\u203e",frasl:"\u2044",euro:"\u20ac",image:"\u2111",weierp:"\u2118",real:"\u211c",trade:"\u2122",alefsym:"\u2135",larr:"\u2190",uarr:"\u2191",rarr:"\u2192",darr:"\u2193",harr:"\u2194",crarr:"\u21b5",lArr:"\u21d0",uArr:"\u21d1",rArr:"\u21d2",dArr:"\u21d3",hArr:"\u21d4",forall:"\u2200",part:"\u2202",exist:"\u2203",empty:"\u2205",nabla:"\u2207",isin:"\u2208",notin:"\u2209",ni:"\u220b",prod:"\u220f",sum:"\u2211",minus:"\u2212",lowast:"\u2217",radic:"\u221a",prop:"\u221d",infin:"\u221e",ang:"\u2220",and:"\u2227",or:"\u2228",cap:"\u2229",cup:"\u222a",int:"\u222b",there4:"\u2234",sim:"\u223c",cong:"\u2245",asymp:"\u2248",ne:"\u2260",equiv:"\u2261",le:"\u2264",ge:"\u2265",sub:"\u2282",sup:"\u2283",nsub:"\u2284",sube:"\u2286",supe:"\u2287",oplus:"\u2295",otimes:"\u2297",perp:"\u22a5",sdot:"\u22c5",lceil:"\u2308",rceil:"\u2309",lfloor:"\u230a",rfloor:"\u230b",loz:"\u25ca",spades:"\u2660",clubs:"\u2663",hearts:"\u2665",diams:"\u2666",lang:"\u27e8",rang:"\u27e9"}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(10),r=n(12),i=n(13),a=function(){function e(){this.values=[],this.curly=this.paren=-1}return e.prototype.beforeFunctionExpression=function(e){return["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","**","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="].indexOf(e)>=0},e.prototype.isRegexStart=function(){var e=this.values[this.values.length-1],t=null!==e;switch(e){case"this":case"]":t=!1;break;case")":var n=this.values[this.paren-1];t="if"===n||"while"===n||"for"===n||"with"===n;break;case"}":if(t=!1,"function"===this.values[this.curly-3])t=!!(o=this.values[this.curly-4])&&!this.beforeFunctionExpression(o);else if("function"===this.values[this.curly-4]){var o;t=!(o=this.values[this.curly-5])||!this.beforeFunctionExpression(o)}}return t},e.prototype.push=function(e){7===e.type||4===e.type?("{"===e.value?this.curly=this.values.length:"("===e.value&&(this.paren=this.values.length),this.values.push(e.value)):this.values.push(null)},e}(),c=function(){function e(e,t){this.errorHandler=new o.ErrorHandler,this.errorHandler.tolerant=!!t&&"boolean"==typeof t.tolerant&&t.tolerant,this.scanner=new r.Scanner(e,this.errorHandler),this.scanner.trackComment=!!t&&"boolean"==typeof t.comment&&t.comment,this.trackRange=!!t&&"boolean"==typeof t.range&&t.range,this.trackLoc=!!t&&"boolean"==typeof t.loc&&t.loc,this.buffer=[],this.reader=new a}return e.prototype.errors=function(){return this.errorHandler.errors},e.prototype.getNextToken=function(){if(0===this.buffer.length){var e=this.scanner.scanComments();if(this.scanner.trackComment)for(var t=0;to&&" "!==e[u+1],u=i);else if(!C(a))return 5;p=p&&g(a)}s=s||d&&i-u-1>o&&" "!==e[u+1]}return l||s?n>9&&N(e)?5:s?4:3:p&&!r(e)?1:2}function V(e,t,n,o){e.dump=function(){if(0===t.length)return"''";if(!e.noCompatMode&&-1!==d.indexOf(t))return"'"+t+"'";var i=e.indent*Math.max(1,n),a=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-i),c=o||e.flowLevel>-1&&n>=e.flowLevel;switch(b(t,c,e.indent,a,(function(t){return function(e,t){var n,o;for(n=0,o=e.implicitTypes.length;n"+v(t,e.indent)+x(m(function(e,t){var n,o,r=/(\n+)([^\n]*)/g,i=(c=e.indexOf("\n"),c=-1!==c?c:e.length,r.lastIndex=c,y(e.slice(0,c),t)),a="\n"===e[0]||" "===e[0];var c;for(;o=r.exec(e);){var l=o[1],s=o[2];n=" "===s[0],i+=l+(a||n||""===s?"":"\n")+y(s,t),a=n}return i}(t,a),i));case 5:return'"'+function(e){for(var t,n,o,r="",i=0;i=55296&&t<=56319&&(n=e.charCodeAt(i+1))>=56320&&n<=57343?(r+=u(1024*(t-55296)+n-56320+65536),i++):(o=s[t],r+=!o&&C(t)?e[i]:o||u(t));return r}(t)+'"';default:throw new r("impossible error: invalid scalar style")}}()}function v(e,t){var n=N(e)?String(t):"",o="\n"===e[e.length-1];return n+(o&&("\n"===e[e.length-2]||"\n"===e)?"+":o?"":"-")+"\n"}function x(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function y(e,t){if(""===e||" "===e[0])return e;for(var n,o,r=/ [^ ]/g,i=0,a=0,c=0,l="";n=r.exec(e);)(c=n.index)-i>t&&(o=a>i?a:c,l+="\n"+e.slice(i,o),i=o+1),a=c;return l+="\n",e.length-i>t&&a>i?l+=e.slice(i,a)+"\n"+e.slice(a+1):l+=e.slice(i),l.slice(1)}function k(e,t,n){var o,i,a,s,d,u;for(a=0,s=(i=n?e.explicitTypes:e.implicitTypes).length;a tag resolver accepts not "'+u+'" style');o=d.represent[u](t,u)}e.dump=o}return!0}return!1}function w(e,t,n,o,i,a){e.tag=null,e.dump=n,k(e,n,!1)||k(e,n,!0);var l=c.call(e.dump);o&&(o=e.flowLevel<0||e.flowLevel>t);var s,d,u="[object Object]"===l||"[object Array]"===l;if(u&&(d=-1!==(s=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||d||2!==e.indent&&t>0)&&(i=!1),d&&e.usedDuplicates[s])e.dump="*ref_"+s;else{if(u&&d&&!e.usedDuplicates[s]&&(e.usedDuplicates[s]=!0),"[object Object]"===l)o&&0!==Object.keys(e.dump).length?(!function(e,t,n,o){var i,a,c,l,s,d,u="",p=e.tag,m=Object.keys(n);if(!0===e.sortKeys)m.sort();else if("function"==typeof e.sortKeys)m.sort(e.sortKeys);else if(e.sortKeys)throw new r("sortKeys must be a boolean or a function");for(i=0,a=m.length;i1024)&&(e.dump&&10===e.dump.charCodeAt(0)?d+="?":d+="? "),d+=e.dump,s&&(d+=h(e,t)),w(e,t+1,l,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?d+=":":d+=": ",u+=d+=e.dump));e.tag=p,e.dump=u||"{}"}(e,t,e.dump,i),d&&(e.dump="&ref_"+s+e.dump)):(!function(e,t,n){var o,r,i,a,c,l="",s=e.tag,d=Object.keys(n);for(o=0,r=d.length;o1024&&(c+="? "),c+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),w(e,t,a,!1,!1)&&(l+=c+=e.dump));e.tag=s,e.dump="{"+l+"}"}(e,t,e.dump),d&&(e.dump="&ref_"+s+" "+e.dump));else if("[object Array]"===l){var p=e.noArrayIndent&&t>0?t-1:t;o&&0!==e.dump.length?(!function(e,t,n,o){var r,i,a="",c=e.tag;for(r=0,i=n.length;r "+e.dump)}return!0}function _(e,t){var n,o,r=[],i=[];for(function a(e,t,n){var o,r,i;if(null!==e&&"object"==typeof e)if(-1!==(r=t.indexOf(e)))-1===n.indexOf(r)&&n.push(r);else if(t.push(e),Array.isArray(e))for(r=0,i=e.length;r0}),(0,o.createComponentVNode)(2,p,{mode:g,bufferReagents:f}),(0,o.createComponentVNode)(2,m,{isCondiment:i,bufferNonEmpty:f.length>0}),(0,o.createComponentVNode)(2,C)]})]})};var u=function(e,t){var n=(0,r.useBackend)(t).act,a=e.beaker,d=e.beakerReagents,u=e.bufferNonEmpty;return(0,o.createComponentVNode)(2,i.Section,{title:"Beaker",flexGrow:"0",flexBasis:"300px",buttons:u?(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"eject",disabled:!a,content:"Eject and Clear Buffer",onClick:function(){return n("eject")}}):(0,o.createComponentVNode)(2,i.Button,{icon:"eject",disabled:!a,content:"Eject and Clear Buffer",onClick:function(){return n("eject")}}),children:a?(0,o.createComponentVNode)(2,c.BeakerContents,{beakerLoaded:!0,beakerContents:d,buttons:function(e,r){return(0,o.createComponentVNode)(2,i.Box,{mb:r0?(0,o.createComponentVNode)(2,c.BeakerContents,{beakerLoaded:!0,beakerContents:u,buttons:function(e,r){return(0,o.createComponentVNode)(2,i.Box,{mb:r0?l.desc:"N/A"}),l.blood_type&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood type",children:l.blood_type}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood DNA",className:"LabeledList__breakContents",children:l.blood_dna})],4),!c.condi&&(0,o.createComponentVNode)(2,i.Button,{icon:c.printing?"spinner":"print",disabled:c.printing,iconSpin:!!c.printing,ml:"0.5rem",content:"Print",onClick:function(){return a("print",{idx:l.idx,beaker:e.args.beaker})}})]})})})})),(0,l.modalRegisterBodyOverride)("change_patch_style",(function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.Flex,{spacingPrecise:"1",wrap:"wrap",my:"0.5rem",maxHeight:"1%",children:n.modal.choices.map((function(r,a){return(0,o.createComponentVNode)(2,i.Flex.Item,{flex:"1 1 auto",children:(0,o.createComponentVNode)(2,i.Button,{selected:a+1===parseInt(n.modal.value,10),onClick:function(){return(0,l.modalAnswer)(t,e.id,a+1)},children:(0,o.createVNode)(1,"div",null,null,1,{style:"display: inline-block;width: 32px;height: 32px;background: url(bandaid"+(a+1)+".png);background-size: 160%;background-position: left -9px bottom -14px;"})})},a)}))})}))},function(e,t,n){"use strict";t.__esModule=!0,t.CloningConsole=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(50),l=n(44),s=n(3),d=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data,s=e.args,d=s.activerecord,u=s.realname,p=s.health,m=s.unidentity,h=s.strucenzymes,f=p.split(" - ");return(0,o.createComponentVNode)(2,a.Section,{level:2,m:"-1rem",pb:"1rem",title:"Records of "+u,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Damage",children:f.length>1?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:c.COLORS.damageType.oxy,display:"inline",children:f[0]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,a.Box,{color:c.COLORS.damageType.toxin,display:"inline",children:f[2]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,a.Box,{color:c.COLORS.damageType.brute,display:"inline",children:f[3]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,a.Box,{color:c.COLORS.damageType.burn,display:"inline",children:f[1]})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Unknown"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"UI",className:"LabeledList__breakContents",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"SE",className:"LabeledList__breakContents",children:h}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Disk",children:[(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!l.disk,icon:"arrow-circle-down",content:"Import",onClick:function(){return r("disk",{option:"load"})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export UI",onClick:function(){return r("disk",{option:"save",savetype:"ui"})}}),(0,o.createComponentVNode)(2,a.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,a.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export SE",onClick:function(){return r("disk",{option:"save",savetype:"se"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,a.Button,{disabled:!l.podready,icon:"user-plus",content:"Clone",onClick:function(){return r("clone",{ref:d})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"trash",content:"Delete",onClick:function(){return r("del_rec")}})]})]})})};t.CloningConsole=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data.menu;return(0,l.modalRegisterBodyOverride)("view_rec",d),(0,o.createComponentVNode)(2,s.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l.ComplexModal,{maxWidth:"75%",maxHeight:"75%"}),(0,o.createComponentVNode)(2,s.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,C),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,a.Section,{noTopPadding:!0,flexGrow:"1",children:(0,o.createComponentVNode)(2,p)})]})]})};var u=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data.menu;return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===c,icon:"home",onClick:function(){return r("menu",{num:1})},children:"Main"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===c,icon:"folder",onClick:function(){return r("menu",{num:2})},children:"Records"})]})},p=function(e,t){var n,r=(0,i.useBackend)(t).data.menu;return 1===r?n=(0,o.createComponentVNode)(2,m):2===r&&(n=(0,o.createComponentVNode)(2,h)),n},m=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data,s=l.loading,d=l.scantemp,u=l.occupant,p=l.locked,m=l.can_brainscan,h=l.scan_mode,f=l.numberofpods,C=l.pods,g=l.selected_pod,N=p&&!!u;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Scanner",level:"2",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{display:"inline",color:"label",children:"Scanner Lock:\xa0"}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u,selected:N,icon:N?"toggle-on":"toggle-off",content:N?"Engaged":"Disengaged",onClick:function(){return c("lock")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:N||!u,icon:"user-slash",content:"Eject Occupant",onClick:function(){return c("eject")}})],4),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:s?(0,o.createComponentVNode)(2,a.Box,{color:"average",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"spinner",spin:!0}),"\xa0 Scanning..."]}):(0,o.createComponentVNode)(2,a.Box,{color:d.color,children:d.text})}),!!m&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scan Mode",children:(0,o.createComponentVNode)(2,a.Button,{icon:h?"brain":"male",content:h?"Brain":"Body",onClick:function(){return c("toggle_mode")}})})]}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u||s,icon:"user",content:"Scan Occupant",mt:"0.5rem",mb:"0",onClick:function(){return c("scan")}})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Pods",level:"2",children:f?C.map((function(e,t){var n;return n="cloning"===e.status?(0,o.createComponentVNode)(2,a.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,a.Box,{textAlign:"center",children:(0,r.round)(e.progress,0)+"%"})}):"mess"===e.status?(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"bad",mt:"0.5rem",children:"ERROR"}):(0,o.createComponentVNode)(2,a.Button,{selected:g===e.pod,icon:g===e.pod&&"check",content:"Select",mt:"0.5rem",onClick:function(){return c("selectpod",{ref:e.pod})}}),(0,o.createComponentVNode)(2,a.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,a.Box,{color:"label",children:["Pod #",t+1]}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:e.biomass>=150?"good":"bad",display:"inline",children:[(0,o.createComponentVNode)(2,a.Icon,{name:e.biomass>=150?"circle":"circle-o"}),"\xa0",e.biomass]}),n]},t)})):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"No pods detected. Unable to clone."})})],4)},h=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data.records;return c.length?(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{icon:"user",mb:"0.5rem",content:e.realname,onClick:function(){return r("view_rec",{ref:e.record})}},t)}))}):(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 records found."]})})},f=function(e,t){var n,r=(0,i.useBackend)(t),c=r.act,l=r.data.temp;if(l&&l.text&&!(l.text.length<=0)){var s=((n={})[l.style]=!0,n);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.NoticeBox,Object.assign({},s,{children:[(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",children:l.text}),(0,o.createComponentVNode)(2,a.Button,{icon:"times-circle",float:"right",onClick:function(){return c("cleartemp")}}),(0,o.createComponentVNode)(2,a.Box,{clear:"both"})]})))}},C=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.scanner,s=c.numberofpods,d=c.autoallowed,u=c.autoprocess,p=c.disk;return(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createFragment)([!!d&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{display:"inline",color:"label",children:"Auto-processing:\xa0"}),(0,o.createComponentVNode)(2,a.Button,{selected:u,icon:u?"toggle-on":"toggle-off",content:u?"Enabled":"Disabled",onClick:function(){return r("autoprocess",{on:u?0:1})}})],4),(0,o.createComponentVNode)(2,a.Button,{disabled:!p,icon:"eject",content:"Eject Disk",onClick:function(){return r("disk",{option:"eject"})}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Scanner",children:l?(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Connected"}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Not connected!"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pods",children:s?(0,o.createComponentVNode)(2,a.Box,{color:"good",children:[s," connected"]}):(0,o.createComponentVNode)(2,a.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),i=n(2),a=n(3);t.CommunicationsComputer=function(e,t){var n,c=(0,r.useBackend)(t),l=c.act,s=c.data;n=s.authenticated?s.is_ai?"AI":1===s.authenticated?"Command":2===s.authenticated?"Captain":"ERROR: Report This Bug!":"Not Logged In";var d="View ("+s.messages.length+")",u=(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Authentication",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:s.is_ai&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Access Level",children:"AI"})||(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,i.Button,{icon:s.authenticated?"sign-out-alt":"id-card",selected:s.authenticated,content:s.authenticated?"Log Out ("+n+")":"Log In",onClick:function(){return l("auth")}})})})}),!!s.esc_section&&(0,o.createComponentVNode)(2,i.Section,{title:"Escape Shuttle",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[!!s.esc_status&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:s.esc_status}),!!s.esc_callable&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,i.Button,{icon:"rocket",content:"Call Shuttle",disabled:!s.authenticated,onClick:function(){return l("callshuttle")}})}),!!s.esc_recallable&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Recall Shuttle",disabled:!s.authenticated||s.is_ai,onClick:function(){return l("cancelshuttle")}})}),!!s.lastCallLoc&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Last Call/Recall From",children:s.lastCallLoc})]})})],0),p="Make Priority Announcement";s.msg_cooldown>0&&(p+=" ("+s.msg_cooldown+"s)");var m=s.emagged?"Message [UNKNOWN]":"Message CentComm",h="Request Authentication Codes";s.cc_cooldown>0&&(m+=" ("+s.cc_cooldown+"s)",h+=" ("+s.cc_cooldown+"s)");var f,C=s.str_security_level,g=s.levels.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.icon,content:e.name,disabled:!s.authmax||e.id===s.security_level,onClick:function(){return l("newalertlevel",{level:e.id})}},e.name)})),N=s.stat_display.presets.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.label,selected:e.name===s.stat_display.type,disabled:!s.authenticated,onClick:function(){return l("setstat",{statdisp:e.name})}},e.name)})),b=s.stat_display.alerts.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.label,selected:e.alert===s.stat_display.icon,disabled:!s.authenticated,onClick:function(){return l("setstat",{statdisp:"alert",alert:e.alert})}},e.alert)}));if(s.current_message_title)f=(0,o.createComponentVNode)(2,i.Section,{title:s.current_message_title,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Return To Message List",disabled:!s.authenticated,onClick:function(){return l("messagelist")}}),children:(0,o.createComponentVNode)(2,i.Box,{children:s.current_message})});else{var V=s.messages.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.title,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"eye",content:"View",disabled:!s.authenticated||s.current_message_title===e.title,onClick:function(){return l("messagelist",{msgid:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Delete",disabled:!s.authenticated,onClick:function(){return l("delmessage",{msgid:e.id})}})]},e.id)}));f=(0,o.createComponentVNode)(2,i.Section,{title:"Messages Received",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return l("main")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:V})})}switch(s.menu_state){case 1:return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[u,(0,o.createComponentVNode)(2,i.Section,{title:"Captain-Only Actions",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Alert",color:s.security_level_color,children:C}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Change Alert",children:g}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Announcement",children:(0,o.createComponentVNode)(2,i.Button,{icon:"bullhorn",content:p,disabled:!s.authmax||s.msg_cooldown>0,onClick:function(){return l("announce")}})}),!!s.emagged&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transmit",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"broadcast-tower",color:"red",content:m,disabled:!s.authmax||s.cc_cooldown>0,onClick:function(){return l("MessageSyndicate")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"sync-alt",content:"Reset Relays",disabled:!s.authmax,onClick:function(){return l("RestoreBackup")}})]})||(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transmit",children:(0,o.createComponentVNode)(2,i.Button,{icon:"broadcast-tower",content:m,disabled:!s.authmax||s.cc_cooldown>0,onClick:function(){return l("MessageCentcomm")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nuclear Device",children:(0,o.createComponentVNode)(2,i.Button,{icon:"bomb",content:h,disabled:!s.authmax||s.cc_cooldown>0,onClick:function(){return l("nukerequest")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Command Staff Actions",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Displays",children:(0,o.createComponentVNode)(2,i.Button,{icon:"tv",content:"Change Status Displays",disabled:!s.authenticated,onClick:function(){return l("status")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Incoming Messages",children:(0,o.createComponentVNode)(2,i.Button,{icon:"folder-open",content:d,disabled:!s.authenticated,onClick:function(){return l("messagelist")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Misc",children:(0,o.createComponentVNode)(2,i.Button,{icon:"sync-alt",content:"Restart Nano-Mob Hunter GO! Server",disabled:!s.authenticated,onClick:function(){return l("RestartNanoMob")}})})]})})]})});case 2:return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[u,(0,o.createComponentVNode)(2,i.Section,{title:"Modify Status Screens",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return l("main")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Presets",children:N}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alerts",children:b}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message Line 1",children:(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:s.stat_display.line_1,disabled:!s.authenticated,onClick:function(){return l("setmsg1")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message Line 2",children:(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:s.stat_display.line_2,disabled:!s.authenticated,onClick:function(){return l("setmsg2")}})})]})})]})});case 3:return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[u,f]})});default:return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[u,"ERRROR. Unknown menu_state: ",s.menu_state,"Please report this to NT Technical Support."]})})}}},function(e,t,n){"use strict";t.__esModule=!0,t.Contractor=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(105),l=n(3);var s={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,r=(0,i.useBackend)(t),c=r.act,s=r.data;n=s.unauthorized?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,C,{height:"100%",allMessages:["ERROR: UNAUTHORIZED USER"],finishedTimeout:100,onFinished:function(){}})}):s.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,p)}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"hidden",children:1===s.page?(0,o.createComponentVNode)(2,m,{height:"100%"}):(0,o.createComponentVNode)(2,f,{height:"100%"})})],4):(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,C,{height:"100%",allMessages:d,finishedTimeout:3e3,onFinished:function(){return c("complete_load_animation")}})});var h=(0,i.useLocalState)(t,"viewingPhoto",""),N=h[0];h[1];return(0,o.createComponentVNode)(2,l.Window,{theme:"syndicate",children:[N&&(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,l.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,i.useBackend)(t),r=n.act,c=n.data,l=c.tc_available,s=c.tc_paid_out,d=c.completed_contracts,u=c.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:[u," 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 r("claim")}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"TC Earned",children:[s," 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:d})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Contractor Status",verticalAlign:"middle",children:"ACTIVE"})]})})]})})))},p=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=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===c,onClick:function(){return r("page",{page:1})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"suitcase"}),"Contracts"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===c,onClick:function(){return r("page",{page:2})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"shopping-cart"}),"Hub"]})]})))},m=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data,d=l.contracts,u=l.contract_active,p=l.can_extract,m=!!u&&d.filter((function(e){return 1===e.status}))[0],f=m&&m.time_left>0,C=(0,i.useLocalState)(t,"viewingPhoto",""),g=(C[0],C[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:!p||f,icon:"parachute-box",content:["Call Extraction",f&&(0,o.createComponentVNode)(2,c.Countdown,{timeLeft:m.time_left,format:function(e,t){return" ("+t.substr(3)+")"}})],onClick:function(){return r("extract")}})},e,{children:d.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 g("target_photo_"+e.uid+".png")}})})]}),className:"Contractor__Contract",buttons:(0,o.createComponentVNode)(2,a.Box,{width:"100%",children:[!!s[e.status]&&(0,o.createComponentVNode)(2,a.Box,{color:s[e.status][1],display:"inline-block",mt:1!==e.status&&"0.125rem",mr:"0.25rem",lineHeight:"20px",children:s[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 r("abort")}})]}),children:(0,o.createComponentVNode)(2,a.Flex,{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,{flexBasis:"100%",children:[(0,o.createComponentVNode)(2,a.Flex,{mb:"0.5rem",color:"label",children:["Extraction Zone:\xa0",h(e)]}),null==(t=e.difficulties)?void 0:t.map((function(t,n){return(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!!u,content:t.name+" ("+t.reward+" TC)",onClick:function(){return r("activate",{uid:e.uid,difficulty:n+1})}},n)})),!!e.objective&&(0,o.createComponentVNode)(2,a.Box,{color:"white",bold:!0,children:[e.objective.extraction_name,(0,o.createVNode)(1,"br"),"(",(e.objective.rewards.tc||0)+" TC",",\xa0",(e.objective.rewards.credits||0)+" Credits",")"]})]})]})},e.uid)}))})))},h=function(e){if(e.objective&&!(e.status>1)){var t=e.objective.locs.user_area_id,n=e.objective.locs.user_coords,i=e.objective.locs.target_area_id,c=e.objective.locs.target_coords,l=t===i;return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Icon,{name:l?"dot-circle-o":"arrow-alt-circle-right-o",color:l?"green":"yellow",rotation:l?null:-(0,r.rad2deg)(Math.atan2(c[1]-n[1],c[0]-n[0])),lineHeight:l?null:"0.85",size:"1.5"})})}},f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.rep,s=c.buyables;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({title:"Available Purchases",overflow:"auto"},e,{children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:e.refundable&&(0,o.createComponentVNode)(2,a.Button.Confirm,{content:"Refund ("+e.cost+" Rep)",onClick:function(){return r("refund",{uid:e.uid})}}),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)}))})))},C=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.state={currentIndex:0,currentDisplay:[]},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.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))},i.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)},i.componentWillUnmount=function(){clearTimeout(this.timer)},i.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),g=function(e,t){var n=(0,i.useLocalState)(t,"viewingPhoto",""),r=n[0],c=n[1];return(0,o.createComponentVNode)(2,a.Modal,{className:"Contractor__photoZoom",children:[(0,o.createComponentVNode)(2,a.Box,{as:"img",src:r}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Close",color:"grey",mt:"1rem",onClick:function(){return c("")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ConveyorSwitch=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ConveyorSwitch=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.slowFactor,d=l.oneWay,u=l.position;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Lever position",children:u>0?"forward":u<0?"reverse":"neutral"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Allow reverse",children:(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:!d,onClick:function(){return c("toggleOneWay")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Slowdown factor",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,i.Button,{icon:"angle-double-left",onClick:function(){return c("slowFactor",{value:s-5})}})," "]}),(0,o.createComponentVNode)(2,i.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,i.Button,{icon:"angle-left",onClick:function(){return c("slowFactor",{value:s-1})}})," "]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Slider,{width:"100px",mx:"1px",value:s,fillValue:s,minValue:1,maxValue:50,step:1,format:function(e){return e+"x"},onChange:function(e,t){return c("slowFactor",{value:t})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,i.Button,{icon:"angle-right",onClick:function(){return c("slowFactor",{value:s+1})}})," "]}),(0,o.createComponentVNode)(2,i.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,i.Button,{icon:"angle-double-right",onClick:function(){return c("slowFactor",{value:s+5})}})," "]})]})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CrewMonitor=void 0;var o=n(0),r=n(24),i=n(18),a=n(1),c=n(2),l=n(80),s=n(50),d=n(3),u=function(e,t){return e.dead?"Deceased":parseInt(e.health,10)<=t?"Critical":1===parseInt(e.stat,10)?"Unconscious":"Living"},p=function(e,t){return e.dead?"red":parseInt(e.health,10)<=t?"orange":1===parseInt(e.stat,10)?"blue":"green"};t.CrewMonitor=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data),i=(0,a.useLocalState)(t,"tabIndex",r.IndexToggler),l=i[0],s=i[1];return(0,o.createComponentVNode)(2,d.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,d.Window.Content,{children:(0,o.createComponentVNode)(2,c.Box,{fillPositionedParent:!0,children:[(0,o.createComponentVNode)(2,c.Tabs,{children:[r.isBS?(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:0===l,onClick:function(){return s(0)},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"table"})," Command Data View"]},"ComDataView"):null,r.isBP?(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:1===l,onClick:function(){return s(1)},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"table"})," Security Data View"]},"SecDataView"):null,(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===l,onClick:function(){return s(2)},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:3===l,onClick:function(){return s(3)},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,f);case 1:return(0,o.createComponentVNode)(2,C);case 2:return(0,o.createComponentVNode)(2,h);case 3:return(0,o.createComponentVNode)(2,g);default:return"WE SHOULDN'T BE HERE!"}}(l)]})})})};var m=function(e){var t=e.crewData,n=e.context,d=(0,a.useBackend)(n),m=d.act,h=d.data,f=(0,r.sortBy)((function(e){return e.name}))(t||[]),C=(0,a.useLocalState)(n,"search",""),g=C[0],N=C[1],b=(0,i.createSearch)(g,(function(e){return e.name+"|"+e.assignment+"|"+e.area}));return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by name, assignment or location..",width:"100%",onInput:function(e,t){return N(t)}}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",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,{children:"Status"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Location"})]}),f.filter(b).map((function(e){return(0,o.createComponentVNode)(2,c.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,c.Box,{inline:!0,color:p(e,h.critThreshold),children:u(e,h.critThreshold)}),e.sensor_type>=2?(0,o.createComponentVNode)(2,c.Box,{inline:!0,children:["(",(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:s.COLORS.damageType.oxy,children:e.oxy}),"|",(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:s.COLORS.damageType.toxin,children:e.tox}),"|",(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:s.COLORS.damageType.burn,children:e.fire}),"|",(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:s.COLORS.damageType.brute,children:e.brute}),")"]}):null]}),(0,o.createComponentVNode)(2,l.TableCell,{children:3===e.sensor_type?h.isAI?(0,o.createComponentVNode)(2,c.Button,{fluid:!0,icon:"location-arrow",content:e.area+" ("+e.x+", "+e.y+")",onClick:function(){return m("track",{track:e.ref})}}):e.area+" ("+e.x+", "+e.y+")":"Not Available"})]},e.ref)}))]})]})},h=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data.crewmembers||[]);return(0,o.createComponentVNode)(2,m,{crewData:r,context:t})},f=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data.crewmembers.filter((function(e){return e.is_command}))||[]);return(0,o.createComponentVNode)(2,m,{crewData:r,context:t})},C=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data.crewmembers.filter((function(e){return e.is_security}))||[]);return(0,o.createComponentVNode)(2,m,{crewData:r,context:t})},g=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=(0,a.useLocalState)(t,"zoom",1),s=l[0],d=l[1],u=function(e){return e.is_command&&i.isBS||e.is_security&&i.isBP?"square":"circle"},m=function(e){return e.is_command&&i.isBS||e.is_security&&i.isBP?10:6},h=function(e,t){return e.is_command&&i.isBS||e.is_security&&i.isBP?e.dead?"red":parseInt(e.health,10)<=t?"orange":1===parseInt(e.stat,10)?"blue":"violet":p(e,t)};return(0,o.createComponentVNode)(2,c.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,c.NanoMap,{onZoom:function(e){return d(e)},children:i.crewmembers.filter((function(e){return 3===e.sensor_type})).map((function(e){return(0,o.createComponentVNode)(2,c.NanoMap.Marker,{x:e.x,y:e.y,zoom:s,icon:u(e),size:m(e),tooltip:e.name+" ("+e.assignment+")",color:h(e,i.critThreshold),onClick:function(){i.isAI&&r("track",{track:e.ref})}},e.ref)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Cryo=void 0;var o=n(0),r=n(534),i=n(1),a=n(2),c=n(3),l=[{label:"\u0410\u0441\u0444\u0438\u043a\u0441\u0438\u044f",type:"oxyLoss"},{label:"\u0418\u043d\u0442\u043e\u043a\u0441\u0438\u043a\u0430\u0446\u0438\u044f",type:"toxLoss"},{label:"\u0420\u0430\u043d\u044b",type:"bruteLoss"},{label:"\u041e\u0436\u043e\u0433\u0438",type:"fireLoss"}],s=[["good","\u0412 \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0438"],["average","\u0411\u0435\u0437 \u0441\u043e\u0437\u043d\u0430\u043d\u0438\u044f"],["bad","\u0422\u0420\u0423\u041f"]];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,i.useBackend)(t),r=n.act,c=n.data,d=c.isOperating,p=c.hasOccupant,m=c.occupant,h=void 0===m?[]:m,f=c.cellTemperature,C=c.cellTemperatureStatus,g=c.isBeakerLoaded,N=c.auto_eject_healthy,b=c.auto_eject_dead;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"\u041f\u0430\u0446\u0438\u0435\u043d\u0442",flexGrow:"1",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"user-slash",onClick:function(){return r("ejectOccupant")},disabled:!p,children:"\u0418\u0437\u0432\u043b\u0435\u0447\u044c"}),children:p?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u041f\u0430\u0446\u0438\u0435\u043d\u0442",children:h.name||"\u0418\u043c\u044f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:h.health,max:h.maxHealth,value:h.health/h.maxHealth,color:h.health>0?"good":"average",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(h.health)})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0421\u0442\u0430\u0442\u0443\u0441",color:s[h.stat][0],children:s[h.stat][1]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(h.bodyTemperature)})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),l.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:h[e.type]/100,ranges:{bad:[.01,Infinity]},children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(h[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"),"\u041f\u0430\u0446\u0438\u0435\u043d\u0442 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d."]})})}),(0,o.createComponentVNode)(2,a.Section,{title:"\u041a\u0440\u0438\u043e\u043a\u0430\u043f\u0441\u0443\u043b\u0430",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",onClick:function(){return r("ejectBeaker")},disabled:!g,children:"\u0418\u0437\u0432\u043b\u0435\u0447\u044c \u0451\u043c\u043a\u043e\u0441\u0442\u044c"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u041f\u0438\u0442\u0430\u043d\u0438\u0435",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",onClick:function(){return r(d?"switchOff":"switchOn")},selected:d,children:d?"\u0412\u043a\u043b":"\u0412\u044b\u043a\u043b"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",color:C,children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:f})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0401\u043c\u043a\u043e\u0441\u0442\u044c",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0410\u0432\u0442\u043e\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u0445 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u043e\u0432",children:(0,o.createComponentVNode)(2,a.Button,{icon:N?"toggle-on":"toggle-off",selected:N,onClick:function(){return r(N?"auto_eject_healthy_off":"auto_eject_healthy_on")},children:N?"\u0412\u043a\u043b":"\u0412\u044b\u043a\u043b"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0410\u0432\u0442\u043e\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u043e\u0432",children:(0,o.createComponentVNode)(2,a.Button,{icon:b?"toggle-on":"toggle-off",selected:b,onClick:function(){return r(b?"auto_eject_dead_off":"auto_eject_dead_on")},children:b?"\u0412\u043a\u043b":"\u0412\u044b\u043a\u043b"})})]})})],4)},u=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data),l=c.isBeakerLoaded,s=c.beakerLabel,d=c.beakerVolume;return l?(0,o.createFragment)([s?"\xab"+s+"\xbb":(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"\u0401\u043c\u043a\u043e\u0441\u0442\u044c \u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0430"}),(0,o.createComponentVNode)(2,a.Box,{color:!d&&"bad",children:d?(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:d,format:function(e){var t=Math.round(e);return(0,r.declensionRu)(t,"\u041e\u0441\u0442\u0430\u043b\u0430\u0441\u044c","\u041e\u0441\u0442\u0430\u043b\u0438\u0441\u044c","\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c")+" "+t+" "+(0,r.declensionRu)(t,"\u0435\u0434\u0438\u043d\u0438\u0446\u0430","\u0435\u0434\u0438\u043d\u0438\u0446\u044b","\u0435\u0434\u0438\u043d\u0438\u0446")}}):"\u0401\u043c\u043a\u043e\u0441\u0442\u044c \u043f\u0443\u0441\u0442\u0430"})],0):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"\u0401\u043c\u043a\u043e\u0441\u0442\u044c \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430"})}},function(e,t,n){"use strict";t.__esModule=!0,t.declensionRu=void 0;t.declensionRu=function(e,t,n,o){var r=e%100;if(r>=10&&r<=20)return o;var i=r%10;return 1===i?t:i>=2&&i<=4?n:o}},function(e,t,n){"use strict";t.__esModule=!0,t.CryopodConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(18);t.CryopodConsole=function(e,t){var n=(0,r.useBackend)(t).data,c=n.account_name,d=n.allow_items;return(0,o.createComponentVNode)(2,a.Window,{title:"Cryopod Console",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Hello, "+(c||"[REDACTED]")+"!",children:"This automated cryogenic freezing unit will safely store your corporeal form until your next assignment."}),(0,o.createComponentVNode)(2,l),!!d&&(0,o.createComponentVNode)(2,s)]})})};var l=function(e,t){var n=(0,r.useBackend)(t).data.frozen_crew;return(0,o.createComponentVNode)(2,i.Collapsible,{title:"Stored Crew",children:n.length?(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:n.map((function(e,t){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:e.rank},t)}))})}):(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No stored crew!"})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data.frozen_items,s=function(e){var t=e.toString();return t.startsWith("the ")&&(t=t.slice(4,t.length)),(0,c.toTitleCase)(t)};return(0,o.createComponentVNode)(2,i.Collapsible,{title:"Stored Items",buttons:(0,o.createComponentVNode)(2,i.Button,{disabled:!l.length,content:"Drop All Items",color:"red",onClick:function(){return a("all_items")}}),children:l.length?(0,o.createComponentVNode)(2,i.Section,{fill:!0,scrollable:!0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:s(e.name),buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",content:"Drop",mr:1,onClick:function(){return a("one_item",{item:e.uid})}})},e)}))})}):(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No stored items!"})})}},function(e,t,n){"use strict";t.__esModule=!0,t.DNAModifier=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(44),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],s=[["ui","Modify U.I.","dna"],["se","Modify S.E.","dna"],["buffer","Transfer Buffers","syringe"],["rejuvenators","Rejuvenators","flask"]],d=[5,10,20,30,50];t.DNAModifier=function(e,t){var n,i=(0,r.useBackend)(t),l=(i.act,i.data),s=l.irradiating,d=l.dnaBlockSize,m=l.occupant;return t.dnaBlockSize=d,t.isDNAInvalid=!m.isViableSubject||!m.uniqueIdentity||!m.structuralEnzymes,s&&(n=(0,o.createComponentVNode)(2,V,{duration:s})),(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,c.ComplexModal),n,(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,p)]})]})};var u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,s=c.locked,d=c.hasOccupant,u=c.occupant;return(0,o.createComponentVNode)(2,i.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{color:"label",display:"inline",mr:"0.5rem",children:"Door Lock:"}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d,selected:s,icon:s?"toggle-on":"toggle-off",content:s?"Engaged":"Disengaged",onClick:function(){return a("toggleLock")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d||s,icon:"user-slash",content:"Eject",onClick:function(){return a("ejectOccupant")}})],4),children:d?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:u.name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:u.minHealth,max:u.maxHealth,value:u.health/u.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",color:l[u.stat][0],children:l[u.stat][1]}),(0,o.createComponentVNode)(2,i.LabeledList.Divider)]})}),t.isDNAInvalid?(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,i.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,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Radiation",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:"100",value:u.radiationLevel/100,color:"average"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Unique Enzymes",children:c.occupant.uniqueEnzymes?c.occupant.uniqueEnzymes:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"exclamation-circle"}),"\xa0 Unknown"]})})]})],0):(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"Cell unoccupied."})})},p=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,l=a.data,d=l.selectedMenuKey,u=l.hasOccupant;l.occupant;return u?t.isDNAInvalid?(0,o.createComponentVNode)(2,i.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No operation possible on this subject."]})})}):("ui"===d?n=(0,o.createFragment)([(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,f)],4):"se"===d?n=(0,o.createFragment)([(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,f)],4):"buffer"===d?n=(0,o.createComponentVNode)(2,C):"rejuvenators"===d&&(n=(0,o.createComponentVNode)(2,b)),(0,o.createComponentVNode)(2,i.Section,{flexGrow:"1",children:[(0,o.createComponentVNode)(2,i.Tabs,{children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:d===e[0],onClick:function(){return c("selectMenuKey",{key:e[0]})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:e[2]}),e[1]]},t)}))}),n]})):(0,o.createComponentVNode)(2,i.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant in DNA modifier."]})})})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.selectedUIBlock,s=c.selectedUISubBlock,d=c.selectedUITarget,u=c.occupant;return(0,o.createComponentVNode)(2,i.Section,{title:"Modify Unique Identifier",level:"2",children:[(0,o.createComponentVNode)(2,v,{dnaString:u.uniqueIdentity,selectedBlock:l,selectedSubblock:s,blockSize:t.dnaBlockSize,action:"selectUIBlock"}),(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,i.Knob,{minValue:"1",maxValue:"15",stepPixelSize:"20",value:d,format:function(e){return e.toString(16).toUpperCase()},ml:"0",onChange:function(e,t){return a("changeUITarget",{value:t})}})})}),(0,o.createComponentVNode)(2,i.Button,{icon:"radiation",content:"Irradiate Block",mt:"0.5rem",onClick:function(){return a("pulseUIRadiation")}})]})},h=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.selectedSEBlock,s=c.selectedSESubBlock,d=c.occupant;return(0,o.createComponentVNode)(2,i.Section,{title:"Modify Structural Enzymes",level:"2",children:[(0,o.createComponentVNode)(2,v,{dnaString:d.structuralEnzymes,selectedBlock:l,selectedSubblock:s,blockSize:t.dnaBlockSize,action:"selectSEBlock"}),(0,o.createComponentVNode)(2,i.Button,{icon:"radiation",content:"Irradiate Block",onClick:function(){return a("pulseSERadiation")}})]})},f=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.radiationIntensity,s=c.radiationDuration;return(0,o.createComponentVNode)(2,i.Section,{title:"Radiation Emitter",level:"2",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Intensity",children:(0,o.createComponentVNode)(2,i.Knob,{minValue:"1",maxValue:"10",stepPixelSize:"20",value:l,popUpPosition:"right",ml:"0",onChange:function(e,t){return a("radiationIntensity",{value:t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Duration",children:(0,o.createComponentVNode)(2,i.Knob,{minValue:"1",maxValue:"20",stepPixelSize:"10",unit:"s",value:s,popUpPosition:"right",ml:"0",onChange:function(e,t){return a("radiationDuration",{value:t})}})})]}),(0,o.createComponentVNode)(2,i.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 a("pulseRadiation")}})]})},C=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.buffers.map((function(e,t){return(0,o.createComponentVNode)(2,g,{id:t+1,name:"Buffer "+(t+1),buffer:e},t)})));return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Buffers",level:"2",children:a}),(0,o.createComponentVNode)(2,N)],4)},g=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=e.id,s=e.name,d=e.buffer,u=c.isInjectorReady,p=s+(d.data?" - "+d.label:"");return(0,o.createComponentVNode)(2,i.Box,{backgroundColor:"rgba(0, 0, 0, 0.33)",mb:"0.5rem",children:(0,o.createComponentVNode)(2,i.Section,{title:p,level:"3",mx:"0",lineHeight:"18px",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button.Confirm,{disabled:!d.data,icon:"trash",content:"Clear",onClick:function(){return a("bufferOption",{option:"clear",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d.data,icon:"pen",content:"Rename",onClick:function(){return a("bufferOption",{option:"changeLabel",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d.data||!c.hasDisk,icon:"save",content:"Export",tooltip:"Exports this buffer to the currently loaded data disk.",tooltipPosition:"bottom-left",onClick:function(){return a("bufferOption",{option:"saveDisk",id:l})}})],4),children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Write",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-down",content:"Subject U.I",mb:"0",onClick:function(){return a("bufferOption",{option:"saveUI",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-down",content:"Subject U.I and U.E.",mb:"0",onClick:function(){return a("bufferOption",{option:"saveUIAndUE",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-down",content:"Subject S.E.",mb:"0",onClick:function(){return a("bufferOption",{option:"saveSE",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!c.hasDisk||!c.disk.data,icon:"arrow-circle-down",content:"From Disk",mb:"0",onClick:function(){return a("bufferOption",{option:"loadDisk",id:l})}})]}),!!d.data&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Subject",children:d.owner||(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"Unknown"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Data Type",children:["ui"===d.type?"Unique Identifiers":"Structural Enzymes",!!d.ue&&" and Unique Enzymes"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Transfer to",children:[(0,o.createComponentVNode)(2,i.Button,{disabled:!u,icon:u?"syringe":"spinner",iconSpin:!u,content:"Injector",mb:"0",onClick:function(){return a("bufferOption",{option:"createInjector",id:l})}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!u,icon:u?"syringe":"spinner",iconSpin:!u,content:"Block Injector",mb:"0",onClick:function(){return a("bufferOption",{option:"createInjector",id:l,block:1})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"user",content:"Subject",mb:"0",onClick:function(){return a("bufferOption",{option:"transfer",id:l})}})]})],4)]}),!d.data&&(0,o.createComponentVNode)(2,i.Box,{color:"label",mt:"0.5rem",children:"This buffer is empty."})]})})},N=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.hasDisk,s=c.disk;return(0,o.createComponentVNode)(2,i.Section,{title:"Data Disk",level:"2",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button.Confirm,{disabled:!l||!s.data,icon:"trash",content:"Wipe",onClick:function(){return a("wipeDisk")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!l,icon:"eject",content:"Eject",onClick:function(){return a("ejectDisk")}})],4),children:l?s.data?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Label",children:s.label?s.label:"No label"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Subject",children:s.owner?s.owner:(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"Unknown"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Data Type",children:["ui"===s.type?"Unique Identifiers":"Structural Enzymes",!!s.ue&&" and Unique Enzymes"]})]}):(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"Disk is blank."}):(0,o.createComponentVNode)(2,i.Box,{color:"label",textAlign:"center",my:"1rem",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"save-o",size:"4"}),(0,o.createVNode)(1,"br"),"No disk inserted."]})})},b=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.isBeakerLoaded,s=c.beakerVolume,u=c.beakerLabel;return(0,o.createComponentVNode)(2,i.Section,{title:"Rejuvenators and Beaker",level:"2",buttons:(0,o.createComponentVNode)(2,i.Button,{disabled:!l,icon:"eject",content:"Eject",onClick:function(){return a("ejectBeaker")}}),children:l?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Inject",children:[d.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{disabled:e>s,icon:"syringe",content:e,onClick:function(){return a("injectRejuvenators",{amount:e})}},t)})),(0,o.createComponentVNode)(2,i.Button,{disabled:s<=0,icon:"syringe",content:"All",onClick:function(){return a("injectRejuvenators",{amount:s})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Beaker",children:[(0,o.createComponentVNode)(2,i.Box,{mb:"0.5rem",children:u||"No label"}),s?(0,o.createComponentVNode)(2,i.Box,{color:"good",children:[s," unit",1===s?"":"s"," remaining"]}):(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Empty"})]})]}):(0,o.createComponentVNode)(2,i.Box,{color:"label",textAlign:"center",my:"25%",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"exclamation-triangle",size:"4"}),(0,o.createVNode)(1,"br"),"No beaker loaded."]})})},V=function(e,t){return(0,o.createComponentVNode)(2,i.Dimmer,{textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"spinner",size:"5",spin:!0}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Box,{color:"average",children:(0,o.createVNode)(1,"h1",null,[(0,o.createComponentVNode)(2,i.Icon,{name:"radiation"}),(0,o.createTextVNode)("\xa0Irradiating occupant\xa0"),(0,o.createComponentVNode)(2,i.Icon,{name:"radiation"})],4)}),(0,o.createComponentVNode)(2,i.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),a=n.act,c=(n.data,e.dnaString),l=e.selectedBlock,s=e.selectedSubblock,d=e.blockSize,u=e.action,p=c.split(""),m=[],h=function(e){for(var t=e/d+1,n=[],r=function(r){var c=r+1;n.push((0,o.createComponentVNode)(2,i.Button,{selected:l===t&&s===c,content:p[e+r],mb:"0",onClick:function(){return a(u,{block:t,subblock:c})}}))},c=0;c0?"Yes":"No",selected:l.com>0,onClick:function(){return c("toggle_com")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Security",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.sec===e,content:e,onClick:function(){return c("set_sec",{set_sec:e})}},"sec"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Medical",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.med===e,content:e,onClick:function(){return c("set_med",{set_med:e})}},"med"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Engineering",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.eng===e,content:e,onClick:function(){return c("set_eng",{set_eng:e})}},"eng"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Paranormal",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.par===e,content:e,onClick:function(){return c("set_par",{set_par:e})}},"par"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Janitor",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.jan===e,content:e,onClick:function(){return c("set_jan",{set_jan:e})}},"jan"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cyborg",children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Button,{selected:l.cyb===e,content:e,onClick:function(){return c("set_cyb",{set_cyb:e})}},"cyb"+e)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Slots",children:(0,o.createComponentVNode)(2,i.Box,{color:l.total>l.spawnpoints?"red":"green",children:[l.total," total, versus ",l.spawnpoints," spawnpoints"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Dispatch",children:(0,o.createComponentVNode)(2,i.Button,{icon:"ambulance",content:"Send ERT",onClick:function(){return c("dispatch_ert")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Electropack=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3);t.Electropack=function(e,t){var n=(0,i.useBackend)(t),l=n.act,s=n.data,d=s.power,u=s.code,p=s.frequency,m=s.minFrequency,h=s.maxFrequency;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:d?"power-off":"times",content:d?"On":"Off",selected:d,onClick:function(){return l("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Frequency",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Reset",onClick:function(){return l("reset",{reset:"freq"})}}),children:(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:6,minValue:m/10,maxValue:h/10,value:p/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,a.LabeledList.Item,{label:"Code",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Reset",onClick:function(){return l("reset",{reset:"code"})}}),children:(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:u,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),i=n(2),a=n(3);t.EvolutionMenu=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"changeling",children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,l)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.evo_points,s=c.can_respec;return(0,o.createComponentVNode)(2,i.Section,{title:"Evolution Points",height:5.5,children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mt:.5,color:"label",children:"Points remaining:"}),(0,o.createComponentVNode)(2,i.Flex.Item,{mt:.5,ml:2,bold:!0,color:"#1b945c",children:l}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{ml:2.5,disabled:!s,content:"Readapt",icon:"sync",onClick:function(){return a("readapt")}}),(0,o.createComponentVNode)(2,i.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),a=n.act,c=n.data,l=c.evo_points,s=c.ability_list,d=c.purchased_abilities,u=c.view_mode;return(0,o.createComponentVNode)(2,i.Section,{title:"Abilities",flexGrow:"1",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:u?"square-o":"check-square-o",selected:!u,content:"Compact",onClick:function(){return a("set_view_mode",{mode:0})}}),(0,o.createComponentVNode)(2,i.Button,{icon:u?"check-square-o":"square-o",selected:u,content:"Expanded",onClick:function(){return a("set_view_mode",{mode:1})}})],4),children:s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{p:.5,mx:-1,className:"candystripe",children:[(0,o.createComponentVNode)(2,i.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{ml:.5,color:"#dedede",children:e.name}),d.includes(e.power_path)&&(0,o.createComponentVNode)(2,i.Flex.Item,{ml:2,bold:!0,color:"#1b945c",children:"(Purchased)"}),(0,o.createComponentVNode)(2,i.Flex.Item,{mr:3,textAlign:"right",grow:1,children:[(0,o.createComponentVNode)(2,i.Box,{as:"span",color:"label",children:["Cost: "," "]}),(0,o.createComponentVNode)(2,i.Box,{as:"span",bold:!0,color:"#1b945c",children:e.cost})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{textAlign:"right",children:(0,o.createComponentVNode)(2,i.Button,{mr:.5,disabled:e.cost>l||d.includes(e.power_path),content:"Evolve",onClick:function(){return a("purchase",{power_path:e.power_path})}})})]}),!!u&&(0,o.createComponentVNode)(2,i.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(7),i=n(18),a=n(1),c=n(2),l=n(105),s=n(3);var d={bananium:"clown",tranquillite:"mime"};t.ExosuitFabricator=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data),i=r.building;return(0,o.createComponentVNode)(2,s.Window,{theme:r.ui_theme,children:(0,o.createComponentVNode)(2,s.Window.Content,{className:"Exofab",children:(0,o.createComponentVNode)(2,c.Flex,{width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",mr:"0.5rem",width:"70%",children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",basis:"100%",children:(0,o.createComponentVNode)(2,p)}),i&&(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",mt:"0.5rem",children:(0,o.createComponentVNode)(2,m)})]})}),(0,o.createComponentVNode)(2,c.Flex.Item,{width:"30%",children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",basis:"50%",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",basis:"50%",mt:"0.5rem",children:(0,o.createComponentVNode)(2,h)})]})})]})})})};var u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.materials,s=i.capacity,d=Object.values(l).reduce((function(e,t){return e+t}),0);return(0,o.createComponentVNode)(2,c.Section,{title:"Materials",className:"Exofab__materials",buttons:(0,o.createComponentVNode)(2,c.Box,{color:"label",mt:"0.25rem",children:[(d/s*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,f,{id:e,bold:"$metal"===e||"$glass"===e,onClick:function(){return r("withdraw",{id:e})}},e)}))})},p=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data,s=l.curCategory,d=l.categories,u=l.designs,p=l.syncing,m=(0,a.useLocalState)(t,"searchText",""),h=m[0],f=m[1],g=(0,i.createSearch)(h,(function(e){return e.name})),N=u.filter(g);return(0,o.createComponentVNode)(2,c.Section,{className:"Exofab__designs",title:(0,o.createComponentVNode)(2,c.Dropdown,{selected:s,options:d,onSelected:function(e){return r("category",{cat:e})},width:"150px"}),height:"100%",buttons:(0,o.createComponentVNode)(2,c.Box,{mt:"-18px",children:[(0,o.createComponentVNode)(2,c.Button,{icon:"plus",content:"Queue all",onClick:function(){return r("queueall")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:p,iconSpin:p,icon:"sync-alt",content:p?"Synchronizing...":"Synchronize with R&D servers",onClick:function(){return r("sync")}})]}),children:[(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by name...",mb:"0.5rem",width:"100%",onInput:function(e,t){return f(t)}}),N.map((function(e){return(0,o.createComponentVNode)(2,C,{design:e},e.id)})),0===N.length&&(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No designs found."})]})},m=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data),i=r.building,s=r.buildStart,d=r.buildEnd,u=r.worldTime;return(0,o.createComponentVNode)(2,c.Section,{className:"Exofab__building",stretchContents:!0,children:(0,o.createComponentVNode)(2,c.ProgressBar.Countdown,{start:s,current:u,end:d,bold:!0,children:[(0,o.createComponentVNode)(2,c.Box,{float:"left",children:(0,o.createComponentVNode)(2,c.Icon,{name:"cog",spin:!0})}),"Building ",i,"\xa0(",(0,o.createComponentVNode)(2,l.Countdown,{current:u,timeLeft:d-u,format:function(e,t){return t.substr(3)}}),")"]})})},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.queue,s=i.processingQueue,d=Object.entries(i.queueDeficit).filter((function(e){return e[1]<0})),u=l.reduce((function(e,t){return e+t.time}),0);return(0,o.createComponentVNode)(2,c.Section,{className:"Exofab__queue",title:"Queue",buttons:(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{selected:s,icon:s?"toggle-on":"toggle-off",content:"Process",onClick:function(){return r("process")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:0===l.length,icon:"eraser",content:"Clear",onClick:function(){return r("unqueueall")}})]}),children:(0,o.createComponentVNode)(2,c.Flex,{height:"100%",direction:"column",children:0===l.length?(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"The queue is empty."}):(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Flex.Item,{className:"Exofab__queue--queue",grow:"1",overflow:"auto",children:l.map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{color:e.notEnough&&"bad",children:[t+1,". ",e.name,t>0&&(0,o.createComponentVNode)(2,c.Button,{icon:"arrow-up",onClick:function(){return r("queueswap",{from:t+1,to:t})}}),t0&&(0,o.createComponentVNode)(2,c.Flex.Item,{className:"Exofab__queue--time",basis:"content",shrink:"0",children:[(0,o.createComponentVNode)(2,c.Divider),"Processing time:",(0,o.createComponentVNode)(2,c.Icon,{name:"clock",mx:"0.5rem"}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",bold:!0,children:new Date(u/10*1e3).toISOString().substr(14,5)})]}),Object.keys(d).length>0&&(0,o.createComponentVNode)(2,c.Flex.Item,{className:"Exofab__queue--deficit",basis:"content",shrink:"0",children:[(0,o.createComponentVNode)(2,c.Divider),"Lacking materials to complete:",d.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,f,{id:e[0],amount:-e[1],lineDisplay:!0})},e[0])}))]})],0)})})},f=function(e,t){var n=(0,a.useBackend)(t),i=(n.act,n.data),l=e.id,s=e.amount,u=e.lineDisplay,p=e.onClick,m=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["id","amount","lineDisplay","onClick"]),h=l.replace("$",""),f=i.materials[l]||0,C=s||f;if(!(C<=0&&"metal"!==h&&"glass"!==h)){var g=s&&s>f;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Flex,Object.assign({className:(0,r.classes)(["Exofab__material",u&&"Exofab__material--line"])},m,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",children:(0,o.createComponentVNode)(2,c.Button,{onClick:p,children:(0,o.createComponentVNode)(2,c.Box,{as:"img",src:"sheet-"+(d[h]||h)+".png"})})}),(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",children:u?(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__material--amount",color:g&&"bad",children:C.toLocaleString("en-US")}):(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__material--name",children:h}),(0,o.createComponentVNode)(2,c.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,a.useBackend)(t),r=n.act,i=n.data,l=e.design;return(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__design",children:[(0,o.createComponentVNode)(2,c.Button,{disabled:l.notEnough||i.building,icon:"cog",content:l.name,onClick:function(){return r("build",{id:l.id})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"plus-circle",onClick:function(){return r("queue",{id:l.id})}}),(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__design--cost",children:Object.entries(l.cost).map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:(0,o.createComponentVNode)(2,f,{id:e[0],amount:e[1],lineDisplay:!0})},e[0])}))}),(0,o.createComponentVNode)(2,c.Box,{className:"Exofab__design--time",children:[(0,o.createComponentVNode)(2,c.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),i=n(2),a=n(3);t.ExternalAirlockController=function(e,t){var n,c,l=(0,r.useBackend)(t),s=l.act,d=l.data,u=d.chamber_pressure,p=(d.exterior_status,d.interior_status),m=d.processing;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Information",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Chamber Pressure",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:(n=u,c="good",n<80?c="bad":n<95||n>110?c="average":n>120&&(c="bad"),c),value:u,minValue:0,maxValue:1013,children:[u," kPa"]})})})}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Cycle to Exterior",icon:"arrow-circle-left",disabled:m,onClick:function(){return s("cycle_ext")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Cycle to Interior",icon:"arrow-circle-right",disabled:m,onClick:function(){return s("cycle_int")}})]}),(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Force Exterior Door",icon:"exclamation-triangle",color:"open"===p?"red":m?"yellow":null,onClick:function(){return s("force_ext")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Force Interior Door",icon:"exclamation-triangle",color:"open"===p?"red":m?"yellow":null,onClick:function(){return s("force_int")}})]}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Abort",icon:"ban",color:"red",disabled:!m,onClick:function(){return s("abort")}})})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.FaxMachine=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.FaxMachine=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID Card",children:(0,o.createComponentVNode)(2,i.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 c("scan")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Authorize",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.authenticated?"sign-out-alt":"id-card",selected:l.authenticated,disabled:!l.scan_name&&!l.authenticated,content:l.authenticated?"Log Out":"Log In",onClick:function(){return c("auth")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Fax Menu",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Network",children:l.network}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Document",children:[(0,o.createComponentVNode)(2,i.Button,{icon:l.paper?"eject":"paperclip",disabled:!l.authenticated&&!l.paper,content:l.paper?l.paper:"-----",onClick:function(){return c("paper")}}),!!l.paper&&(0,o.createComponentVNode)(2,i.Button,{icon:"pencil-alt",content:"Rename",onClick:function(){return c("rename")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Sending To",children:(0,o.createComponentVNode)(2,i.Button,{icon:"print",content:l.destination?l.destination:"-----",disabled:!l.authenticated,onClick:function(){return c("dept")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Action",children:(0,o.createComponentVNode)(2,i.Button,{icon:"envelope",content:l.sendError?l.sendError:"Send",disabled:!l.paper||!l.destination||!l.authenticated||l.sendError,onClick:function(){return c("send")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.FloorPainter=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data,e.image),a=e.isSelected,c=e.onSelect;return(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+i,style:{"border-style":a?"solid":"none","border-width":"2px","border-color":"orange",padding:a?"2px":"4px"},onClick:c})};t.FloorPainter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.availableStyles,u=s.selectedStyle,p=s.selectedDir,m=s.directionsPreview,h=s.allStylesPreview;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Decal setup",children:[(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-left",onClick:function(){return l("cycle_style",{offset:-1})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Dropdown,{options:d,selected:u,width:"150px",height:"20px",ml:"2px",mr:"2px",nochevron:"true",onSelected:function(e){return l("select_style",{style:e})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-right",onClick:function(){return l("cycle_style",{offset:1})}})})]}),(0,o.createComponentVNode)(2,i.Box,{mt:"5px",mb:"5px",children:(0,o.createComponentVNode)(2,i.Flex,{overflowY:"auto",maxHeight:"220px",wrap:"wrap",children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,c,{image:h[e],isSelected:u===e,onSelect:function(){return l("select_style",{style:e})}})},"{style}")}))})}),(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Direction",children:(0,o.createComponentVNode)(2,i.Table,{style:{display:"inline"},children:["north","","south"].map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[e+"west",e,e+"east"].map((function(e){return(0,o.createComponentVNode)(2,i.Table.Cell,{style:{"vertical-align":"middle","text-align":"center"},children:""===e?(0,o.createComponentVNode)(2,i.Icon,{name:"arrows-alt",size:3}):(0,o.createComponentVNode)(2,c,{image:m[e],isSelected:e===p,onSelect:function(){return l("select_direction",{direction:e})}})},e)}))},e)}))})})})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GPS=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3),l=function(e){return e?"("+e.join(", ")+")":"ERROR"};t.GPS=function(e,t){var n=(0,i.useBackend)(t).data,r=n.emped,l=n.active,m=n.area,h=n.position,f=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:r?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,s,{emp:!0})}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,d)}),l?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,u,{area:m,position:h})}),f&&(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,u,{title:"Saved Position",position:f})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,p,{height:"100%"})})],0):(0,o.createComponentVNode)(2,s)],0)})})})};var s=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,i.useBackend)(t),r=n.act,c=n.data,l=c.active,s=c.tag,d=c.same_z,u=(0,i.useLocalState)(t,"newTag",s),p=u[0],m=u[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 r("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:s,onEnter:function(){return r("tag",{newtag:p})},onInput:function(e,t){return m(t)}}),(0,o.createComponentVNode)(2,a.Button,{disabled:s===p,width:"20px",mb:"0",ml:"0.25rem",onClick:function(){return r("tag",{newtag:p})},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:!d,icon:d?"compress":"expand",content:d?"Local Sector":"Global",onClick:function(){return r("same_z")}})})]})})},u=function(e,t){var n=e.title,r=e.area,i=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),l(i)]})})},p=function(e,t){var n=(0,i.useBackend)(t).data,c=n.position,s=n.signals,d=n.upgraded;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:s.map((function(e){return Object.assign({},e,{},function(e,t,n){if(e&&t){if(e[2]!==t[2]||1!==n)return null;var o=Math.atan2(t[1]-e[1],t[0]-e[0]),i=Math.sqrt(Math.pow(t[1]-e[1],2)+Math.pow(t[0]-e[0],2));return{angle:(0,r.rad2deg)(o),distance:i}}}(c,e.position,d))})).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:l(e.position)})]},t)}))})})))}},function(e,t,n){"use strict";t.__esModule=!0,t.GasAnalyzer=t.GasAnalyzerHistory=t.GasAnalyzerContent=void 0;var o=n(0),r=n(1),i=n(551),a=n(2),c=n(3),l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.gasmixes,d=l.autoUpdating;return(0,o.createComponentVNode)(2,a.Section,{title:s[0].name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d?"unlock":"lock",onClick:function(){return c("autoscantoggle")},tooltip:d?"Auto-Update Enabled":"Auto-Update Disabled",fluid:!0,textAlign:"center",selected:d}),children:(0,o.createComponentVNode)(2,i.GasmixParser)},s[0])};t.GasAnalyzerContent=l;var s=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data,l=c.historyGasmixes,s=c.historyViewMode,d=c.historyIndex;return(0,o.createComponentVNode)(2,a.Section,{fill:!0,title:"Scan History",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"trash",tooltip:"Clear History",onClick:function(){return i("clearhistory")},textAlign:"center",disabled:0===l.length}),children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mode",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"50%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"kPa",onClick:function(){return i("modekpa")},textAlign:"center",selected:"kpa"===s})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"mol",onClick:function(){return i("modemol")},textAlign:"center",selected:"mol"===s})})]})}),(0,o.createComponentVNode)(2,a.LabeledList,{children:l.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:t+1+". "+("mol"===s?e[0].total_moles.toFixed(2):e[0].pressure.toFixed(2)),onClick:function(){return i("input",{target:t+1})},textAlign:"left",selected:t+1===d,fluid:!0})},e[0])}))})]})};t.GasAnalyzerHistory=s;t.GasAnalyzer=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,a.Section,{grow:!0,children:(0,o.createComponentVNode)(2,l)}),2,{style:{float:"left",width:"67%"}}),(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,a.Section,{width:"160px",children:(0,o.createComponentVNode)(2,s)}),2,{style:{float:"right",width:"33%"}})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GasmixParser=void 0;var o=n(0),r=n(1),i=n(2);t.GasmixParser=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.gasmixes);return a[0].total_moles?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Moles",children:(a[0].total_moles?a[0].total_moles:"-")+" mol"}),a[0].oxygen?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen",children:a[0].oxygen.toFixed(2)+" mol ("+100*(a[0].oxygen/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].nitrogen?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nitrogen",children:a[0].nitrogen.toFixed(2)+" mol ("+100*(a[0].nitrogen/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].carbon_dioxide?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Carbon Dioxide",children:a[0].carbon_dioxide.toFixed(2)+" mol ("+100*(a[0].carbon_dioxide/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].toxins?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Plasma",children:a[0].toxins.toFixed(2)+" mol ("+100*(a[0].toxins/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].sleeping_agent?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nitrous Oxide",children:a[0].sleeping_agent.toFixed(2)+" mol ("+100*(a[0].sleeping_agent/a[0].total_moles).toFixed(2)+" %)"}):"",a[0].agent_b?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Agent B",children:a[0].agent_b.toFixed(2)+" mol ("+100*(a[0].agent_b/a[0].total_moles).toFixed(2)+" %)"}):"",(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(a[0].total_moles?(a[0].temperature-273.15).toFixed(2):"-")+" \xb0C ("+(a[0].total_moles?a[0].temperature.toFixed(2):"-")+" K)"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Volume",children:(a[0].total_moles?a[0].volume:"-")+" L"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure",children:(a[0].total_moles?a[0].pressure.toFixed(2):"-")+" kPa"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Heat Capacity",children:a[0].heat_capacity+" / K"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Thermal Energy",children:a[0].thermal_energy})]}):(0,o.createComponentVNode)(2,i.Box,{nowrap:!0,italic:!0,mb:"10px",children:"No Gas Detected!"})}},function(e,t,n){"use strict";t.__esModule=!0,t.GasFreezer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.GasFreezer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.on,d=l.pressure,u=l.temperature,p=l.temperatureCelsius,m=l.min,h=l.max,f=l.target,C=l.targetCelsius,g=(u-m)/(h-m);return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u0442\u0430\u0442\u0443\u0441",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:s?"power-off":"times",content:s?"\u0412\u043a\u043b":"\u0412\u044b\u043a\u043b",selected:s,onClick:function(){return c("power")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0414\u0430\u0432\u043b\u0435\u043d\u0438\u0435",children:[d," \u043a\u041f\u0430"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",justify:"space-between",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"65%",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:g,ranges:{blue:[-Infinity,.5],red:[.5,Infinity]},children:"\xa0"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"35%",children:[g<.5&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:"blue",ml:1,children:[u," \xb0K (",p," \xb0C)"]}),g>=.5&&(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:"red",ml:1,children:[u," \xb0K (",p," \xb0C)"]})]})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"65%",justify:"end",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:(f-m)/(h-m),children:"\xa0"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"35%",children:(0,o.createComponentVNode)(2,i.Box,{inline:!0,ml:1,children:[f," \xb0K (",C," \xb0C)"]})})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0417\u0430\u0434\u0430\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",title:"\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",onClick:function(){return c("temp",{temp:m})}}),(0,o.createComponentVNode)(2,i.NumberInput,{value:Math.round(f),unit:"\xb0K",minValue:Math.round(m),maxValue:Math.round(h),step:5,stepPixelSize:3,onDrag:function(e,t){return c("temp",{temp:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",title:"\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430",onClick:function(){return c("temp",{temp:h})}})]})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GenericCrewManifest=void 0;var o=n(0),r=n(2),i=n(3),a=n(144);t.GenericCrewManifest=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,theme:"nologo",children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,r.Section,{noTopPadding:!0,children:(0,o.createComponentVNode)(2,a.CrewManifest)})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GhostHudPanel=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.GhostHudPanel=function(e,t){var n=(0,r.useBackend)(t).data,l=n.security,s=n.medical,d=n.diagnostic,u=n.ahud;return(0,o.createComponentVNode)(2,a.Window,{theme:"nologo",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,c,{label:"Medical",type:"medical",is_active:s}),(0,o.createComponentVNode)(2,c,{label:"Security",type:"security",is_active:l}),(0,o.createComponentVNode)(2,c,{label:"Diagnostic",type:"diagnostic",is_active:d}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,c,{label:"Antag HUD",is_active:u,act_on:"ahud_on",act_off:"ahud_off"})]})})})};var c=function(e,t){var n=(0,r.useBackend)(t).act,a=e.label,c=e.type,l=void 0===c?null:c,s=e.is_active,d=e.act_on,u=void 0===d?"hud_on":d,p=e.act_off,m=void 0===p?"hud_off":p;return(0,o.createComponentVNode)(2,i.Flex,{pt:.3,color:"label",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{pl:.5,align:"center",width:"80%",children:a}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{mr:.6,content:s?"On":"Off",icon:s?"toggle-on":"toggle-off",selected:s,onClick:function(){return n(s?m:u,{hud_type:l})}})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.HandheldChemDispenser=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=[1,5,10,20,30,50];t.HandheldChemDispenser=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s)]})})};var l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,l=n.data,s=l.amount,d=l.energy,u=l.maxEnergy,p=l.mode;return(0,o.createComponentVNode)(2,i.Section,{title:"Settings",flex:"content",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Energy",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:d,minValue:0,maxValue:u,ranges:{good:[.5*u,Infinity],average:[.25*u,.5*u],bad:[-Infinity,.25*u]},children:[d," / ",u," Units"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Amount",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",spacing:"1",children:c.map((function(e,t){return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",width:"14%",display:"inline-block",children:(0,o.createComponentVNode)(2,i.Button,{icon:"cog",selected:s===e,content:e,m:"0",width:"100%",onClick:function(){return a("amount",{amount:e})}})},t)}))})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mode",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",justify:"space-between",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"cog",selected:"dispense"===p,content:"Dispense",m:"0",width:"32%",onClick:function(){return a("mode",{mode:"dispense"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"cog",selected:"remove"===p,content:"Remove",m:"0",width:"32%",onClick:function(){return a("mode",{mode:"remove"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"cog",selected:"isolate"===p,content:"Isolate",m:"0",width:"32%",onClick:function(){return a("mode",{mode:"isolate"})}})]})})]})})},s=function(e,t){for(var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.chemicals,s=void 0===l?[]:l,d=c.current_reagent,u=[],p=0;p<(s.length+1)%3;p++)u.push(!0);return(0,o.createComponentVNode)(2,i.Section,{title:c.glass?"Drink Selector":"Chemical Selector",flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",wrap:"wrap",height:"100%",spacingPrecise:"2",align:"flex-start",alignContent:"flex-start",children:[s.map((function(e,t){return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"25%",height:"20px",width:"30%",display:"inline-block",children:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-down",overflow:"hidden",textOverflow:"ellipsis",selected:d===e.id,width:"100%",height:"100%",align:"flex-start",content:e.title,onClick:function(){return a("dispense",{reagent:e.id})}})},t)})),u.map((function(e,t){return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"25%",height:"20px"},t)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ImplantPad=void 0;var o=n(0),r=n(1),i=n(2),a=n(52),c=n(3);t.ImplantPad=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.implant,u=s.contains_case,p=s.tag,m=(0,r.useLocalState)(t,"newTag",p),h=m[0],f=m[1];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Bio-chip Information",children:d&&u?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{bold:!0,mb:2,children:[(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+d.image,ml:0,mr:2,style:{"vertical-align":"middle",width:"32px"}}),d.name]}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"Life",children:d.life}),(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"Notes",children:d.notes}),(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"Function",children:d["function"]})]})],4):u?(0,o.createComponentVNode)(2,i.Box,{children:"This bio-chip case has no implant!"}):(0,o.createComponentVNode)(2,i.Box,{children:"Please insert a bio-chip casing!"})}),(0,o.createComponentVNode)(2,i.Section,{title:"Options",children:[p&&u?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,i.Input,{ml:1,width:"8rem",value:p,onEnter:function(){return l("tag",{newtag:h})},onInput:function(e,t){return f(t)}}),(0,o.createComponentVNode)(2,i.Button,{disabled:p===h,width:"20px",mb:"0",ml:"0.25rem",onClick:function(){return l("tag",{newtag:h})},children:(0,o.createComponentVNode)(2,i.Icon,{name:"pen"})})]}):null,u?(0,o.createComponentVNode)(2,i.Button,{mt:1,content:"Eject Case",icon:"eject",disabled:!u,onClick:function(){return l("eject_case")}}):null]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Instrument=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3);t.Instrument=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,c.Window,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,u)]})]})};var l=function(e,t){var n=(0,i.useBackend)(t),r=n.act;if(n.data.help)return(0,o.createComponentVNode)(2,a.Modal,{maxWidth:"75%",height:.75*window.innerHeight+"px",mx:"auto",py:"0",px:"0.5rem",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",title:"Help",level:"2",overflow:"auto",children:(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"highlight",children:"(,)"}),(0,o.createTextVNode)(", each with notes seperated by hyphens\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.Box,{as:"span",color:"good",children:"names of the note"}),(0,o.createTextVNode)(", and optionally, the\xa0"),(0,o.createComponentVNode)(2,a.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(", and/or the "),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"average",children:"natural"}),(0,o.createTextVNode)(" and in\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Box,{as:"span",color:"good",children:"C"}),(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(" or\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Box,{as:"span",color:"highlight",children:"tempo / x"}),(0,o.createTextVNode)(",\xa0"),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"highlight",children:"(,)"}),(0,o.createTextVNode)(", each with notes seperated by hyphens\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.Box,{as:"span",color:"good",children:"names of the note"}),(0,o.createTextVNode)(", and optionally, the\xa0"),(0,o.createComponentVNode)(2,a.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(", and/or the "),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"average",children:"natural"}),(0,o.createTextVNode)(" and in\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Box,{as:"span",color:"good",children:"C"}),(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,a.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,a.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(" or\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Box,{as:"span",color:"highlight",children:"tempo / x"}),(0,o.createTextVNode)(",\xa0"),(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.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,a.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,a.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,a.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,a.Button,{color:"grey",content:"Close",onClick:function(){return r("help")}})]})})})},s=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data,s=l.lines,u=l.playing,p=l.repeat,m=l.maxRepeats,h=l.tempo,f=l.minTempo,C=l.maxTempo,g=l.tickLag,N=l.volume,b=l.minVolume,V=l.maxVolume,v=l.ready;return(0,o.createComponentVNode)(2,a.Section,{title:"Instrument",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"info",content:"Help",onClick:function(){return c("help")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"file",content:"New",onClick:function(){return c("newsong")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"upload",content:"Import",onClick:function(){return c("import")}})],4),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Playback",children:[(0,o.createComponentVNode)(2,a.Button,{selected:u,disabled:0===s.length||p<0,icon:"play",content:"Play",onClick:function(){return c("play")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u,icon:"stop",content:"Stop",onClick:function(){return c("stop")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Repeat",children:(0,o.createComponentVNode)(2,a.Slider,{animated:!0,minValue:"0",maxValue:m,value:p,stepPixelSize:"59",onChange:function(e,t){return c("repeat",{"new":t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tempo",children:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{disabled:h>=C,content:"-",as:"span",mr:"0.5rem",onClick:function(){return c("tempo",{"new":h+g})}}),(0,r.round)(600/h)," BPM",(0,o.createComponentVNode)(2,a.Button,{disabled:h<=f,content:"+",as:"span",ml:"0.5rem",onClick:function(){return c("tempo",{"new":h-g})}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Volume",children:(0,o.createComponentVNode)(2,a.Slider,{animated:!0,minValue:b,maxValue:V,value:N,stepPixelSize:"6",onDrag:function(e,t){return c("setvolume",{"new":t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:v?(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Ready"}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Instrument Definition Error!"})})]}),(0,o.createComponentVNode)(2,d)]})},d=function(e,t){var n,c,l=(0,i.useBackend)(t),s=l.act,d=l.data,u=d.allowedInstrumentNames,p=d.instrumentLoaded,m=d.instrument,h=d.canNoteShift,f=d.noteShift,C=d.noteShiftMin,g=d.noteShiftMax,N=d.sustainMode,b=d.sustainLinearDuration,V=d.sustainExponentialDropoff,v=d.legacy,x=d.sustainDropoffVolume,y=d.sustainHeldNote;return 1===N?(n="Linear",c=(0,o.createComponentVNode)(2,a.Slider,{minValue:"0.1",maxValue:"5",value:b,step:"0.5",stepPixelSize:"85",format:function(e){return(0,r.round)(100*e)/100+" seconds"},onChange:function(e,t){return s("setlinearfalloff",{"new":t/10})}})):2===N&&(n="Exponential",c=(0,o.createComponentVNode)(2,a.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 s("setexpfalloff",{"new":t})}})),u.sort(),(0,o.createComponentVNode)(2,a.Box,{my:-1,children:(0,o.createComponentVNode)(2,a.Collapsible,{mt:"1rem",mb:"0",title:"Advanced",children:(0,o.createComponentVNode)(2,a.Section,{mt:-1,children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Type",children:v?"Legacy":"Synthesized"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current",children:p?(0,o.createComponentVNode)(2,a.Dropdown,{options:u,selected:m,width:"40%",onSelected:function(e){return s("switchinstrument",{name:e})}}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"None!"})}),!(v||!h)&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Note Shift/Note Transpose",children:(0,o.createComponentVNode)(2,a.Slider,{minValue:C,maxValue:g,value:f,stepPixelSize:"2",format:function(e){return e+" keys / "+(0,r.round)(e/12*100)/100+" octaves"},onChange:function(e,t){return s("setnoteshift",{"new":t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sustain Mode",children:[(0,o.createComponentVNode)(2,a.Dropdown,{options:["Linear","Exponential"],selected:n,onSelected:function(e){return s("setsustainmode",{"new":e})}}),c]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Volume Dropoff Threshold",children:(0,o.createComponentVNode)(2,a.Slider,{animated:!0,minValue:"0.01",maxValue:"100",value:x,stepPixelSize:"6",onChange:function(e,t){return s("setdropoffvolume",{"new":t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sustain indefinitely last held note",children:(0,o.createComponentVNode)(2,a.Button,{selected:y,icon:y?"toggle-on":"toggle-off",content:y?"Yes":"No",onClick:function(){return s("togglesustainhold")}})})],4)]}),(0,o.createComponentVNode)(2,a.Button,{icon:"redo",content:"Reset to Default",mt:"0.5rem",onClick:function(){return s("reset")}})]})})})},u=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.playing,s=c.lines,d=c.editing;return(0,o.createComponentVNode)(2,a.Section,{title:"Editor",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:!d||l,icon:"plus",content:"Add Line",onClick:function(){return r("newline",{line:s.length+1})}}),(0,o.createComponentVNode)(2,a.Button,{selected:!d,icon:d?"chevron-up":"chevron-down",onClick:function(){return r("edit")}})],4),children:!!d&&(s.length>0?(0,o.createComponentVNode)(2,a.LabeledList,{children:s.map((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t+1,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:l,icon:"pen",onClick:function(){return r("modifyline",{line:t+1})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:l,icon:"trash",onClick:function(){return r("deleteline",{line:t+1})}})],4),children:e},t)}))}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Song is empty."}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.ItemPixelShift=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ItemPixelShift=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.pixel_x,d=l.pixel_y,u=l.max_shift_x,p=l.max_shift_y,m=l.random_drop_on;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"X-coordinates",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-left",title:"Shifts item leftwards.",disabled:s===-u,onClick:function(){return c("shift_left")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,lineHeight:1.7,width:"75px",unit:"pixels",stepPixelSize:6,value:s,minValue:-u,maxValue:u,onChange:function(e,t){return c("custom_x",{pixel_x:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-right",title:"Shifts item rightwards.",disabled:s===u,onClick:function(){return c("shift_right")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Y-coordinates",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-up",title:"Shifts item upwards.",disabled:d===p,onClick:function(){return c("shift_up")}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,lineHeight:1.7,width:"75px",unit:"pixels",stepPixelSize:6,value:d,minValue:-p,maxValue:p,onChange:function(e,t){return c("custom_y",{pixel_y:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",title:"Shifts item downwards.",disabled:d===-p,onClick:function(){return c("shift_down")}})]})]})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,color:"brown",icon:"arrow-up",content:"Move to Top",title:"Tries to place an item on top of the others.",onClick:function(){return c("move_to_top")}})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,color:m?"good":"bad",icon:"power-off",content:m?"Shift Enabled":"Shift Disabled",title:"Enables/Disables item pixel randomization on any drops.",onClick:function(){return c("toggle")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.KeycardAuth=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.KeycardAuth=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=(0,o.createComponentVNode)(2,i.Section,{title:"Keycard Authentication Device",children:(0,o.createComponentVNode)(2,i.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 d=(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Waiting for YOU to swipe your ID..."});return l.hasSwiped||l.ertreason||"Emergency Response Team"!==l.event?l.hasConfirm?d=(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Request Confirmed!"}):l.isRemote?d=(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"Swipe your card to CONFIRM the remote request."}):l.hasSwiped&&(d=(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"Waiting for second person to confirm..."})):d=(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Fill out the reason for your ERT request."}),(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[s,"Emergency Response Team"===l.event&&(0,o.createComponentVNode)(2,i.Section,{title:"Reason for ERT Call",children:(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{color:l.ertreason?"":"red",icon:l.ertreason?"check":"pencil-alt",content:l.ertreason?l.ertreason:"-----",disabled:l.busy,onClick:function(){return c("ert")}})})}),(0,o.createComponentVNode)(2,i.Section,{title:l.event,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-circle-left",content:"Back",disabled:l.busy||l.hasConfirm,onClick:function(){return c("reset")}}),children:d})]})})}return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[s,(0,o.createComponentVNode)(2,i.Section,{title:"Choose Action",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Red Alert",children:(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation-triangle",disabled:!l.redAvailable,onClick:function(){return c("triggerevent",{triggerevent:"Red Alert"})},content:"Red Alert"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ERT",children:(0,o.createComponentVNode)(2,i.Button,{icon:"broadcast-tower",onClick:function(){return c("triggerevent",{triggerevent:"Emergency Response Team"})},content:"Call ERT"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Emergency Maint Access",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"door-open",onClick:function(){return c("triggerevent",{triggerevent:"Grant Emergency Maintenance Access"})},content:"Grant"}),(0,o.createComponentVNode)(2,i.Button,{icon:"door-closed",onClick:function(){return c("triggerevent",{triggerevent:"Revoke Emergency Maintenance Access"})},content:"Revoke"})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Emergency Station-Wide Access",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"door-open",onClick:function(){return c("triggerevent",{triggerevent:"Activate Station-Wide Emergency Access"})},content:"Grant"}),(0,o.createComponentVNode)(2,i.Button,{icon:"door-closed",onClick:function(){return c("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(18),i=n(1),a=n(2),c=n(3);t.LaborClaimConsole=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s)]})})};var l=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.can_go_home,s=c.emagged,d=c.id_inserted,u=c.id_name,p=c.id_points,m=c.id_goal,h=c.unclaimed_points,f=s?0:1,C=s?"ERR0R":l?"Completed!":"Insufficient";return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:!!d&&(0,o.createComponentVNode)(2,a.ProgressBar,{value:p/m,ranges:{good:[f,Infinity],bad:[-Infinity,f]},children:p+" / "+m+" "+C})||!!s&&"ERR0R COMPLETED?!@"||"No ID inserted"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle controls",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"Move shuttle",disabled:!l,onClick:function(){return r("move_shuttle")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unclaimed points",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:"Claim points ("+h+")",disabled:!d||!h,onClick:function(){return r("claim_points")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inserted ID",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:d?u:"-------------",onClick:function(){return r("handle_id")}})})]})})},s=function(e,t){var n=(0,i.useBackend)(t).data.ores;return(0,o.createComponentVNode)(2,a.Section,{title:"Material values",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:"Material"}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"right",children:"Value"})]}),n.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,r.toTitleCase)(e.ore)}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,a.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),i=n(2),a=n(3);t.LawManager=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data,u=d.isAdmin,p=d.isSlaved,m=d.isMalf,h=d.isAIMalf,f=d.view;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!(!u||!p)&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:["This unit is slaved to ",p,"."]}),!(!m&&!h)&&(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Law Management",selected:0===f,onClick:function(){return s("set_view",{set_view:0})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Lawsets",selected:1===f,onClick:function(){return s("set_view",{set_view:1})}})]}),!(0!==f)&&(0,o.createComponentVNode)(2,c),!(1!==f)&&(0,o.createComponentVNode)(2,l)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.has_zeroth_laws,d=c.zeroth_laws,u=c.has_ion_laws,p=c.ion_laws,m=c.ion_law_nr,h=c.has_inherent_laws,f=c.inherent_laws,C=c.has_supplied_laws,g=c.supplied_laws,N=c.channels,b=c.channel,V=c.isMalf,v=c.isAdmin,x=c.zeroth_law,y=c.ion_law,k=c.inherent_law,w=c.supplied_law,_=c.supplied_law_position;return(0,o.createFragment)([!!l&&(0,o.createComponentVNode)(2,s,{title:"ERR_NULL_VALUE",laws:d,ctx:t}),!!u&&(0,o.createComponentVNode)(2,s,{title:m,laws:p,ctx:t}),!!h&&(0,o.createComponentVNode)(2,s,{title:"Inherent",laws:f,ctx:t}),!!C&&(0,o.createComponentVNode)(2,s,{title:"Supplied",laws:g,ctx:t}),(0,o.createComponentVNode)(2,i.Section,{title:"Statement Settings",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Statement Channel",children:N.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.channel,selected:e.channel===b,onClick:function(){return a("law_channel",{law_channel:e.channel})}},e.channel)}))}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"State Laws",children:(0,o.createComponentVNode)(2,i.Button,{content:"State Laws",onClick:function(){return a("state_laws")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Law Notification",children:(0,o.createComponentVNode)(2,i.Button,{content:"Notify",onClick:function(){return a("notify_laws")}})})]})}),!!V&&(0,o.createComponentVNode)(2,i.Section,{title:"Add Laws",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{width:"10%",children:"Type"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"60%",children:"Law"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"10%",children:"Index"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"20%",children:"Actions"})]}),!(!v||l)&&(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Zero"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:x}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("change_zeroth_law")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Add",icon:"plus",onClick:function(){return a("add_zeroth_law")}})]})]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Ion"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:y}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("change_ion_law")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Add",icon:"plus",onClick:function(){return a("add_ion_law")}})]})]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Inherent"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:k}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("change_inherent_law")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Add",icon:"plus",onClick:function(){return a("add_inherent_law")}})]})]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Supplied"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:w}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:_,onClick:function(){return a("change_supplied_law_position")}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("change_supplied_law")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Add",icon:"plus",onClick:function(){return a("add_supplied_law")}})]})]})]})})],0)},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.law_sets;return(0,o.createComponentVNode)(2,i.Box,{children:c.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name+" - "+e.header,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Load Laws",icon:"download",onClick:function(){return a("transfer_laws",{transfer_laws:e.ref})}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[e.laws.has_ion_laws>0&&e.laws.ion_laws.map((function(e){return(0,o.createComponentVNode)(2,i.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,i.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,i.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,i.LabeledList.Item,{label:e.index,children:e.law},e.index)}))]})},e.name)}))})},s=function(e,t){var n=(0,r.useBackend)(e.ctx),a=n.act,c=n.data.isMalf;return(0,o.createComponentVNode)(2,i.Section,{title:e.title+" Laws",children:(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{width:"10%",children:"Index"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"69%",children:"Law"}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"21%",children:"State?"})]}),e.laws.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.index}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.law}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Button,{content:e.state?"Yes":"No",selected:e.state,onClick:function(){return a("state_law",{ref:e.ref,state_law:e.state?0:1})}}),!!c&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return a("edit_law",{edit_law:e.ref})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Delete",icon:"trash",color:"red",onClick:function(){return a("delete_law",{delete_law:e.ref})}})],4)]})]},e.law)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ListInput=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3),l=n(99),s=0;t.ListInput=function(e,t){var n=(0,i.useBackend)(t),r=n.act,u=n.data,p=u.title,m=u.message,h=u.items,f=u.init_value,C=u.timeout,g=(0,i.useLocalState)(t,"search_bar",!0),N=g[0],b=g[1],V=(0,i.useLocalState)(t,"displayed_array",h),v=V[0],x=V[1],y=(0,i.useLocalState)(t,"search_array",[]),k=y[0],w=y[1],_=(0,i.useLocalState)(t,"search_index",0),B=_[0],S=_[1],L=(0,i.useLocalState)(t,"last_char_code",null),A=L[0],I=L[1],E=(0,i.useLocalState)(t,"selected_button",f),D=E[0],T=E[1];return(0,o.createComponentVNode)(2,c.Window,{title:p,resizable:!0,children:[C!==undefined&&(0,o.createComponentVNode)(2,d,{value:C}),(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{className:"Layout__content--flexColumn",height:"100%",mb:"7px",children:(0,o.createComponentVNode)(2,a.Section,{className:"ListInput__Section",flexGrow:"1",scrollable:!0,fill:!0,title:m,tabIndex:1,onKeyDown:function(e){if(e.preventDefault(),!(s>performance.now())){if(s=performance.now()+125,e.keyCode===l.ARROW_KEY_UP||e.keyCode===l.ARROW_KEY_DOWN){var t=1;e.keyCode===l.ARROW_KEY_UP&&(t=-1);for(var n=0;n=h.length&&(n=0),T(h[n]),I(null),void document.getElementById(h[n]).focus()}var o=String.fromCharCode(e.keyCode).toLowerCase();if(o){var r;if(o===A&&k.length>0){var i=B+1;i0&&(w(a),S(0),r=a[0])}r&&(I(o),T(r),document.getElementById(r).focus())}}},buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"search",color:"transparent",selected:N,tooltip:"Search...",tooltipPosition:"left",onClick:function(){b(!N),x(h)},compact:!0}),children:(0,o.createComponentVNode)(2,a.Flex,{wrap:"wrap",overflowX:"hidden",children:v.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"100%",children:(0,o.createComponentVNode)(2,a.Button,{color:"transparent",content:e,id:e,width:"100%",selected:D===e,onClick:function(){D===e?r("choose",{choice:e}):T(e),I(null)}})},e)}))})})}),N&&(0,o.createComponentVNode)(2,a.Flex.Item,{basis:2.5,children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",autoFocus:!0,onInput:function(e,t){return x(h.filter((function(e){return-1!==e.toLowerCase().search(t.toLowerCase())})))}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Flex,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,basis:0,ml:1,mx:"5px",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,color:"good",content:"Confirm",disabled:null===D,onClick:function(){return r("choose",{choice:D})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,basis:0,mr:1,mx:"5px",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,color:"bad",content:"Cancel",onClick:function(){return r("cancel")}})})]})})]})})]})};var d=function(e){var t=e.value;return(0,o.createVNode)(1,"div","ListInput__Loader",(0,o.createComponentVNode)(2,a.Box,{className:"ListInput__LoaderProgress",style:{width:100*(0,r.clamp01)(t)+"%"}}),2)}},function(e,t,n){"use strict";t.__esModule=!0,t.MechBayConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.MechBayConsole=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.recharge_port,s=l&&l.mech,d=s&&s.cell,u=s&&s.name;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:u?"Mech status: "+u:"Mech status",textAlign:"center",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Sync",onClick:function(){return c("reconnect")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Integrity",children:!l&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No power port detected. Please re-sync."})||!s&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No mech detected."})||(0,o.createComponentVNode)(2,i.ProgressBar,{value:s.health/s.maxhealth,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:!l&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No power port detected. Please re-sync."})||!s&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No mech detected."})||!d&&(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No cell is installed."})||(0,o.createComponentVNode)(2,i.ProgressBar,{value:d.charge/d.maxcharge,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]},children:[(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:d.charge})," / "+d.maxcharge]})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MechaControlConsole=void 0;var o=n(0),r=(n(15),n(1)),i=n(2),a=n(3),c=n(18);t.MechaControlConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.beacons,u=s.stored_data;return u.length?(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Log",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"window-close",onClick:function(){return l("clear_log")}}),children:u.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{color:"label",children:["(",e.time,")"]}),(0,o.createComponentVNode)(2,i.Box,{children:(0,c.decodeHtmlEntities)(e.message)})]},e.time)}))})})}):(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:d.length&&d.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"comment",onClick:function(){return l("send_message",{mt:e.uid})},children:"Message"}),(0,o.createComponentVNode)(2,i.Button,{icon:"eye",onClick:function(){return l("get_log",{mt:e.uid})},children:"View Log"}),(0,o.createComponentVNode)(2,i.Button.Confirm,{color:"red",content:"EMP",icon:"bomb",onClick:function(){return l("shock",{mt:e.uid})}})],4),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.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,i.LabeledList.Item,{label:"Cell Charge",children:e.cell&&(0,o.createComponentVNode)(2,i.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,i.NoticeBox,{children:"No Cell Installed"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Air Tank",children:[e.airtank,"kPa"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pilot",children:e.pilot||"Unoccupied"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:(0,c.toTitleCase)(e.location)||"Unknown"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Active Equipment",children:e.active||"None"}),e.cargoMax&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cargo Space",children:(0,o.createComponentVNode)(2,i.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,i.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),i=n(2),a=n(44),c=n(3),l=n(100),s=n(101),d=n(145),u={Minor:"good",Medium:"average","Dangerous!":"bad",Harmful:"bad","BIOHAZARD THREAT!":"bad"},p=function(e,t){(0,a.modalOpen)(e,"edit",{field:t.edit,value:t.value})};t.MedicalRecords=function(e,t){var n,u=(0,r.useBackend)(t).data,p=u.loginState,C=u.screen;return p.logged_in?(2===C?n=(0,o.createComponentVNode)(2,m):3===C?n=(0,o.createComponentVNode)(2,h):4===C?n=(0,o.createComponentVNode)(2,f):5===C?n=(0,o.createComponentVNode)(2,N):6===C&&(n=(0,o.createComponentVNode)(2,b)),(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,a.ComplexModal),(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l.LoginInfo),(0,o.createComponentVNode)(2,d.TemporaryNotice),(0,o.createComponentVNode)(2,V),(0,o.createComponentVNode)(2,i.Section,{height:"100%",flexGrow:"1",children:n})]})]})):(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,s.LoginScreen)})})};var m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.records;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Input,{fluid:!0,placeholder:"Search by Name, DNA, or ID",onChange:function(e,t){return a("search",{t1:t})}}),(0,o.createComponentVNode)(2,i.Box,{mt:"0.5rem",children:c.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"user",mb:"0.5rem",content:e.id+": "+e.name,onClick:function(){return a("d_rec",{d_rec:e.ref})}}),(0,o.createVNode)(1,"br")],4,t)}))})],4)},h=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"download",content:"Backup to Disk",disabled:!0}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button,{icon:"upload",content:"Upload from Disk",my:"0.5rem",disabled:!0}),(0,o.createTextVNode)(" "),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash",content:"Delete All Medical Records",onClick:function(){return n("del_all")}})],4)},f=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.medical,s=c.printing;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"General Data",level:2,mt:"-6px",children:(0,o.createComponentVNode)(2,C)}),(0,o.createComponentVNode)(2,i.Section,{title:"Medical Data",level:2,children:(0,o.createComponentVNode)(2,g)}),(0,o.createComponentVNode)(2,i.Section,{title:"Actions",level:2,children:[(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash",disabled:!!l.empty,content:"Delete Medical Record",color:"bad",onClick:function(){return a("del_r")}}),(0,o.createComponentVNode)(2,i.Button,{icon:s?"spinner":"print",disabled:s,iconSpin:!!s,content:"Print Entry",ml:"0.5rem",onClick:function(){return a("print_p")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-left",content:"Back",mt:"0.5rem",onClick:function(){return a("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,i.Box,{width:"50%",float:"left",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:n.fields.map((function(e,n){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.field,children:[(0,o.createComponentVNode)(2,i.Box,{height:"20px",display:"inline-block",children:e.value}),!!e.edit&&(0,o.createComponentVNode)(2,i.Button,{icon:"pen",ml:"0.5rem",onClick:function(){return p(t,e)}})]},n)}))})}),(0,o.createComponentVNode)(2,i.Box,{width:"50%",float:"right",textAlign:"right",children:!!n.has_photos&&n.photos.map((function(e,t){return(0,o.createComponentVNode)(2,i.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,i.Box,{color:"bad",children:"General records lost!"})},g=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.medical;return l&&l.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList,{children:l.fields.map((function(e,n){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.field,prewrap:!0,children:[e.value,(0,o.createComponentVNode)(2,i.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return p(t,e)}})]},n)}))}),(0,o.createComponentVNode)(2,i.Section,{title:"Comments/Log",level:2,children:[0===l.comments.length?(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"No comments found."}):l.comments.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{prewrap:!0,children:[(0,o.createComponentVNode)(2,i.Box,{color:"label",display:"inline",children:e.header}),(0,o.createVNode)(1,"br"),e.text,(0,o.createComponentVNode)(2,i.Button,{icon:"comment-slash",color:"bad",ml:"0.5rem",onClick:function(){return c("del_c",{del_c:t+1})}})]},t)})),(0,o.createComponentVNode)(2,i.Button,{icon:"comment-medical",content:"Add Entry",color:"good",mt:"0.5rem",mb:"0",onClick:function(){return(0,a.modalOpen)(t,"add_c")}})]})],4):(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:["Medical records lost!",(0,o.createComponentVNode)(2,i.Button,{icon:"pen",content:"New Record",ml:"0.5rem",onClick:function(){return c("new")}})]})},N=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.virus;return c.sort((function(e,t){return e.name>t.name?1:-1})),c.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"flask",content:e.name,mb:"0.5rem",onClick:function(){return a("vir",{vir:e.D})}}),(0,o.createVNode)(1,"br")],4,t)}))},b=function(e,t){var n=(0,r.useBackend)(t).data.medbots;return 0===n.length?(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"There are no Medbots."}):n.map((function(e,t){return(0,o.createComponentVNode)(2,i.Collapsible,{open:!0,title:e.name,children:(0,o.createComponentVNode)(2,i.Box,{px:"0.5rem",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:[e.area||"Unknown"," (",e.x,", ",e.y,")"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:e.on?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{color:"good",children:"Online"}),(0,o.createComponentVNode)(2,i.Box,{mt:"0.5rem",children:e.use_beaker?"Reservoir: "+e.total_volume+"/"+e.maximum_volume:"Using internal synthesizer."})],4):(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"Offline"})})]})})},t)}))},V=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.screen;return(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===c,onClick:function(){return a("screen",{screen:2})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"list"}),"List Records"]}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:5===c,onClick:function(){return a("screen",{screen:5})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"database"}),"Virus Database"]}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:6===c,onClick:function(){return a("screen",{screen:6})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"plus-square"}),"Medbot Tracking"]}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:3===c,onClick:function(){return a("screen",{screen:3})},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"wrench"}),"Record Maintenance"]})]})};(0,a.modalRegisterBodyOverride)("virus",(function(e,t){var n=e.args;return(0,o.createComponentVNode)(2,i.Section,{level:2,m:"-1rem",pb:"1rem",title:n.name||"Virus",children:(0,o.createComponentVNode)(2,i.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Number of stages",children:n.max_stages}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Spread",children:[n.spread_text," Transmission"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Possible cure",children:n.cure}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Notes",children:n.desc}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Severity",color:u[n.severity],children:n.severity})]})})})}))},function(e,t,n){"use strict";t.__esModule=!0,t.MiniGamesMenu=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.MiniGamesMenu=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.spawners||[],d=l.thunderdome_eligible,u=l.notifications_enabled;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"power-off",tooltip:d?"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445",tooltipPosition:"bottom",content:d?"\u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445",color:d?"good":"bad",onClick:function(){return c("toggle_minigames")}}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,textAlign:"center",icon:"power-off",tooltip:u?"\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445",tooltipPosition:"bottom",content:u?"\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445":"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u0431\u043e\u0435\u0432\u044b\u0445 \u043c\u0438\u043d\u0438-\u0438\u0433\u0440\u0430\u0445",color:u?"good":"bad",onClick:function(){return c("toggle_notifications")}}),(0,o.createComponentVNode)(2,i.Section,{children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{mb:.5,title:e.name,level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-circle-right",content:"Jump",onClick:function(){return c("jump",{ID:e.uids})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-circle-right",content:"Start",onClick:function(){return c("spawn",{ID:e.uids})}})],4),children:[(0,o.createComponentVNode)(2,i.Box,{style:{"white-space":"pre-wrap"},mb:1,fontSize:"16px",children:e.desc}),!!e.fluff&&(0,o.createComponentVNode)(2,i.Box,{style:{"white-space":"pre-wrap"},textColor:"#878787",fontSize:"14px",children:e.fluff}),!!e.important_info&&(0,o.createComponentVNode)(2,i.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.MiningVendor=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(3);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,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,d)]})})};var s=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.has_id,s=c.id;return(0,o.createComponentVNode)(2,a.NoticeBox,{success:l,children:l?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",style:{float:"left"},children:["Logged in as ",s.name,".",(0,o.createVNode)(1,"br"),"You have ",s.points.toLocaleString("en-US")," points."]}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject ID",style:{float:"right"},onClick:function(){return r("logoff")}}),(0,o.createComponentVNode)(2,a.Box,{style:{clear:"both"}})],4):"Please insert an ID in order to make purchases."})},d=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data),s=c.has_id,d=c.id,u=c.items,m=(0,i.useLocalState)(t,"search",""),h=m[0],f=(m[1],(0,i.useLocalState)(t,"sort","Alphabetical")),C=f[0],g=(f[1],(0,i.useLocalState)(t,"descending",!1)),N=g[0],b=(g[1],(0,r.createSearch)(h,(function(e){return e[0]}))),V=!1,v=Object.entries(u).map((function(e,t){var n=Object.entries(e[1]).filter(b).map((function(e){return e[1].affordable=s&&d.points>=e[1].price,e[1]})).sort(l[C]);if(0!==n.length)return N&&(n=n.reverse()),V=!0,(0,o.createComponentVNode)(2,p,{title:e[0],items:n},e[0])}));return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"auto",children:(0,o.createComponentVNode)(2,a.Section,{children:V?v:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No items matching your criteria was found!"})})})},u=function(e,t){var n=(0,i.useLocalState)(t,"search",""),r=(n[0],n[1]),c=(0,i.useLocalState)(t,"sort",""),s=(c[0],c[1]),d=(0,i.useLocalState)(t,"descending",!1),u=d[0],p=d[1];return(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",mr:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search by item name..",width:"100%",onInput:function(e,t){return r(t)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"30%",children:(0,o.createComponentVNode)(2,a.Dropdown,{selected:"Alphabetical",options:Object.keys(l),width:"100%",lineHeight:"19px",onSelected:function(e){return s(e)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:u?"arrow-down":"arrow-up",height:"19px",tooltip:u?"Descending order":"Ascending order",tooltipPosition:"bottom-left",ml:"0.5rem",onClick:function(){return p(!u)}})})]})})},p=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=e.title,s=e.items,d=function(e,t){if(null==e)return{};var n,o,r={},i=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,a.Collapsible,Object.assign({open:!0,title:l},d,{children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",lineHeight:"20px",style:{float:"left"},children:e.name}),(0,o.createComponentVNode)(2,a.Button,{disabled:!c.has_id||c.id.points=0||(r[n]=e[n]);return r}t.Multitool=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data,p=l.multitoolMenuId,v=l.buffer,x=l.bufferName,y=l.bufferTag,k=l.canBufferHaveTag,w=l.isAttachedAlreadyInBuffer,_=l.attachedName,B=!("default_no_machine"===p);return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{style:{"overflow-x":"hidden","overflow-y":"auto"},grow:1,shrink:1,basis:0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Configuration menu",py:.3,children:[(0,o.createComponentVNode)(2,s,{iconName:"tools",machineName:_,noMachine:"default_no_machine"===p,noMachineText:"No machine attached"}),function(e){switch(e){case"default_no_machine":case"no_options":return(0,o.createComponentVNode)(2,h);case"access_denied":return(0,o.createComponentVNode)(2,f);case"tag_only":return(0,o.createComponentVNode)(2,C);case"frequency_and_tag":return(0,o.createFragment)([(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,C)],4);case"air_sensor":return(0,o.createFragment)([(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,C),(0,o.createComponentVNode)(2,N)],4);case"general_air_control":return(0,o.createFragment)([(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,b)],4);case"large_tank_control":return(0,o.createFragment)([(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,V),(0,o.createComponentVNode)(2,b)],4);default:return"WE SHOULDN'T BE HERE!"}}(p)]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:(0,o.createComponentVNode)(2,a.Divider)}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Multitool buffer",mb:.9,py:.3,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:w?"Added":"Add machine",icon:"save",disabled:!B||w,onClick:function(){return r("buffer_add")}}),(0,o.createComponentVNode)(2,a.Button,{mr:1,content:"Flush",icon:"times-circle",color:"red",disabled:!v,onClick:function(){return r("buffer_flush")}})],4),children:[(0,o.createComponentVNode)(2,s,{iconName:"tools",machineName:x,noMachine:!v,noMachineElem:(0,o.createComponentVNode)(2,d,{text:""})}),!!v&&(0,o.createComponentVNode)(2,m,{mt:1.1,label:"ID tag",compactLabel:!0,wrapContent:k?(0,o.createComponentVNode)(2,u,{text:y,defaultText:"",color:"silver"}):(0,o.createComponentVNode)(2,a.Box,{as:"span",fontSize:"0.9rem",color:"red",italic:!0,nowrap:!0,children:"Not supported"})})]})})]})})})};var s=function(e,t){var n=e.iconName,r=e.machineName,i=e.noMachine,c=e.noMachineText,l=e.noMachineElem,s=i?c:r||"Unknown machine",d=s===c,u=s===c||"Unknown machine"===s;return i&&l?l:(0,o.createComponentVNode)(2,a.Flex,{mt:.1,mb:1.9,children:[!i&&(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,align:"center",children:(0,o.createComponentVNode)(2,a.Icon,{mr:1,size:1.1,name:n})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,wordWrap:"break-word",children:(0,o.createComponentVNode)(2,a.Box,{as:"span",wordWrap:"break-word",color:d?"label":"silver",fontSize:"1.1rem",bold:!0,italic:u,children:s})})]})},d=function(e,t){var n=e.text;return(0,o.createComponentVNode)(2,a.Box,{as:"span",fontSize:"0.9rem",color:"yellow",italic:!0,nowrap:!0,children:n})},u=function(e,t){var n=e.text,r=e.defaultText,i=l(e,["text","defaultText"]);return n?(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"span",wordWrap:"break-word"},i,{children:n}))):(0,o.createComponentVNode)(2,d,{text:r})},p=function(e,t){var n=e.noConfirm,r=void 0!==n&&n,i=l(e,["noConfirm"]);return r?(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({},i))):(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button.Confirm,Object.assign({},i)))},m=function(e,t){var n=e.label,r=e.wrapContent,i=e.noWrapContent,c=e.compactLabel,s=void 0!==c&&c,d=l(e,["label","wrapContent","noWrapContent","compactLabel"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Flex,Object.assign({my:.5,mr:"0.5%",spacing:1,align:"center"},d,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:s?0:1,shrink:0,textOverflow:"ellipsis",overflow:"hidden",basis:s?"auto":0,maxWidth:s?"none":20,color:"label",nowrap:!0,children:n}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,textAlign:"center",wordWrap:"break-word",children:r}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:.1}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,nowrap:!0,children:i})]})))},h=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.Box,{mt:1.5,fontSize:"0.9rem",color:"silver",italic:!0,children:"No options"})},f=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.Box,{fontSize:"1.1rem",color:"red",bold:!0,italic:!0,children:"ACCESS DENIED"})},C=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data.attachedTag;return(0,o.createComponentVNode)(2,m,{label:"ID tag",wrapContent:(0,o.createComponentVNode)(2,u,{text:c,defaultText:"",color:"silver"}),noWrapContent:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Set",icon:"wrench",onClick:function(){return r("set_tag")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Clear",icon:"times-circle",color:"red",disabled:!c,onClick:function(){return r("clear_tag")}})],4)})},g=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data,s=l.frequency,d=l.minFrequency,u=l.maxFrequency,p=l.canReset;return(0,o.createComponentVNode)(2,m,{label:"Frequency",noWrapContent:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,unit:"kHz",step:.1,stepPixelSize:10,minValue:d/10,maxValue:u/10,value:s/10,format:function(e){return(0,r.toFixed)(e,1)},onChange:function(e,t){return c("set_frequency",{frequency:10*t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"",disabled:!p,tooltip:"Reset",onClick:function(){return c("reset_frequency")}})],4)})},N=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.bolts,s=[{bitflag:1,checked:c.pressureCheck,label:"Monitor pressure"},{bitflag:2,checked:c.temperatureCheck,label:"Monitor temperature"},{bitflag:4,checked:c.oxygenCheck,label:"Monitor oxygen concentration"},{bitflag:8,checked:c.toxinsCheck,label:"Monitor plasma concentration"},{bitflag:16,checked:c.nitrogenCheck,label:"Monitor nitrogen concentration"},{bitflag:32,checked:c.carbonDioxideCheck,label:"Monitor carbon dioxide concentration"}];return(0,o.createFragment)([(0,o.createComponentVNode)(2,m,{label:"Floor bolts",noWrapContent:(0,o.createComponentVNode)(2,a.Button,{icon:l?"check":"times",selected:l,content:l?"YES":"NO",onClick:function(){return r("toggle_bolts")}})}),s.map((function(e){return(0,o.createComponentVNode)(2,m,{label:e.label,noWrapContent:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:e.checked,onClick:function(){return r("toggle_flag",{bitflag:e.bitflag})}})},e.bitflag)}))],0)},b=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data.sensors;return(0,o.createComponentVNode)(2,a.Section,{mt:1.7,ml:.5,mr:1,px:.5,title:"Sensors",buttons:(0,o.createComponentVNode)(2,a.Button,{mr:1,pl:2.1,content:"Add sensor",icon:"plus",iconRight:!0,onClick:function(){return r("add_sensor")}}),children:[(0,o.createComponentVNode)(2,m,{mr:0,compactLabel:!0,wrapContent:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:1}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,color:"label",nowrap:!0,bold:!0,children:"ID tag"}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,color:"label",nowrap:!0,bold:!0,children:"Label"}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:11.3})]})}),Object.keys(c).map((function(e){return(0,o.createComponentVNode)(2,m,{mr:0,label:(0,o.createComponentVNode)(2,a.Icon,{name:"wave-square"}),compactLabel:!0,wrapContent:(0,o.createComponentVNode)(2,a.Flex,{align:"center",spacing:1,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,color:"silver",wordWrap:"break-word",children:e}),c[e]?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,color:"silver",wordWrap:"break-word",children:c[e]}):(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,shrink:1,basis:0,fontSize:"0.9rem",color:"yellow",italic:!0,nowrap:!0,children:""})]}),noWrapContent:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:[(0,o.createComponentVNode)(2,a.Button,{content:"Label",icon:"edit",onClick:function(){return r("change_label",{sensor_tag:e})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Label",icon:"times-circle",color:"orange",disabled:!c[e],onClick:function(){return r("clear_label",{sensor_tag:e})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:.5}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:0,shrink:0,children:(0,o.createComponentVNode)(2,a.Button,{px:1.2,icon:"minus",color:"red",onClick:function(){return r("del_sensor",{sensor_tag:e})}})})]})},e)}))]})},V=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.inputTag,s=c.outputTag,d=c.bufferTag,h=c.bufferFitsInput,f=c.bufferFitsOutput,C=c.doNotLinkAndNotify;return(0,o.createFragment)([(0,o.createComponentVNode)(2,m,{label:"Input",labelWidth:6,wrapContent:(0,o.createComponentVNode)(2,u,{text:l,defaultText:"",color:"silver"}),noWrapContent:(0,o.createFragment)([(0,o.createComponentVNode)(2,p,{noConfirm:C||!l,confirmContent:"This will change the intput device. Confirm?",confirmColor:"orange",content:"Link buffer",icon:"link",selected:l&&d===l,disabled:!h,onClick:function(){return r("link_input")}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{confirmContent:"This will unlink the intput device. Confirm?",confirmColor:"orange",content:"Unlink",icon:"unlink",color:"red",disabled:!l,onClick:function(){return r("unlink_input")}})],4)}),(0,o.createComponentVNode)(2,m,{label:"Output",labelWidth:6,wrapContent:(0,o.createComponentVNode)(2,u,{text:s,defaultText:"",color:"silver"}),noWrapContent:(0,o.createFragment)([(0,o.createComponentVNode)(2,p,{noConfirm:C||!s,confirmContent:"This will change the output device. Confirm?",confirmColor:"orange",content:"Link buffer",icon:"link",selected:s&&d===s,disabled:!f,onClick:function(){return r("link_output")}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{confirmContent:"This will unlink the output device. Confirm?",confirmColor:"orange",content:"Unlink",icon:"unlink",color:"red",disabled:!s,onClick:function(){return r("unlink_output")}})],4)})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.Newscaster=void 0;var o=n(0),r=n(7),i=n(1),a=n(2),c=n(50),l=n(3),s=n(44),d=n(145);function u(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var p=["security","engineering","medical","science","service","supply"],m={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,c=(0,i.useBackend)(t),u=c.act,p=c.data,m=p.is_security,g=p.is_admin,N=p.is_silent,V=p.is_printing,v=p.screen,x=p.channels,y=p.channel_idx,k=void 0===y?-1:y,w=(0,i.useLocalState)(t,"menuOpen",!1),_=w[0],B=w[1],S=(0,i.useLocalState)(t,"viewingPhoto",""),L=S[0],A=(S[1],(0,i.useLocalState)(t,"censorMode",!1)),I=A[0],E=A[1];0===v||2===v?n=(0,o.createComponentVNode)(2,f):1===v&&(n=(0,o.createComponentVNode)(2,C));var D=x.reduce((function(e,t){return e+t.unread}),0);return(0,o.createComponentVNode)(2,l.Window,{theme:m&&"security",children:[L?(0,o.createComponentVNode)(2,b):(0,o.createComponentVNode)(2,s.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,a.Flex,{width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,a.Section,{stretchContents:!0,className:(0,r.classes)(["Newscaster__menu",_&&"Newscaster__menu--open"]),children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,a.Box,{flex:"0 1 content",children:[(0,o.createComponentVNode)(2,h,{icon:"bars",title:"Toggle Menu",onClick:function(){return B(!_)}}),(0,o.createComponentVNode)(2,h,{icon:"newspaper",title:"Headlines",selected:0===v,onClick:function(){return u("headlines")},children:D>0&&(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__menuButton--unread",children:D>=10?"9+":D})}),(0,o.createComponentVNode)(2,h,{icon:"briefcase",title:"Job Openings",selected:1===v,onClick:function(){return u("jobs")}}),(0,o.createComponentVNode)(2,a.Divider)]}),(0,o.createComponentVNode)(2,a.Box,{flex:"2",overflowY:"auto",overflowX:"hidden",children:x.map((function(e){return(0,o.createComponentVNode)(2,h,{icon:e.icon,title:e.name,selected:2===v&&x[k-1]===e,onClick:function(){return u("channel",{uid:e.uid})},children:e.unread>0&&(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__menuButton--unread",children:e.unread>=10?"9+":e.unread})},e)}))}),(0,o.createComponentVNode)(2,a.Box,{width:"100%",flex:"0 0 content",children:[(0,o.createComponentVNode)(2,a.Divider),(!!m||!!g)&&(0,o.createFragment)([(0,o.createComponentVNode)(2,h,{security:!0,icon:"exclamation-circle",title:"Edit Wanted Notice",mb:"0.5rem",onClick:function(){return(0,s.modalOpen)(t,"wanted_notice")}}),(0,o.createComponentVNode)(2,h,{security:!0,icon:I?"minus-square":"minus-square-o",title:"Censor Mode: "+(I?"On":"Off"),mb:"0.5rem",onClick:function(){return E(!I)}}),(0,o.createComponentVNode)(2,a.Divider)],4),(0,o.createComponentVNode)(2,h,{icon:"pen-alt",title:"New Story",mb:"0.5rem",onClick:function(){return(0,s.modalOpen)(t,"create_story")}}),(0,o.createComponentVNode)(2,h,{icon:"plus-circle",title:"New Channel",onClick:function(){return(0,s.modalOpen)(t,"create_channel")}}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,h,{icon:V?"spinner":"print",iconSpin:V,title:V?"Printing...":"Print Newspaper",onClick:function(){return u("print_newspaper")}}),(0,o.createComponentVNode)(2,h,{icon:N?"volume-mute":"volume-up",title:"Mute: "+(N?"On":"Off"),onClick:function(){return u("toggle_mute")}})]})]})}),(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",flex:"1",children:[(0,o.createComponentVNode)(2,d.TemporaryNotice),n]})]})})]})};var h=function(e,t){(0,i.useBackend)(t).act;var n=e.icon,c=void 0===n?"":n,l=e.iconSpin,s=e.selected,d=void 0!==s&&s,p=e.security,m=void 0!==p&&p,h=e.onClick,f=e.title,C=e.children,g=u(e,["icon","iconSpin","selected","security","onClick","title","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Newscaster__menuButton",d&&"Newscaster__menuButton--selected",m&&"Newscaster__menuButton--security"]),onClick:h},g,{children:[d&&(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__menuButton--selectedBar"}),(0,o.createComponentVNode)(2,a.Icon,{name:c,spin:l,size:"2"}),(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__menuButton--title",children:f}),C]})))},f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.screen,d=c.is_admin,u=c.channel_idx,p=c.channel_can_manage,m=c.channels,h=c.stories,f=c.wanted,C=(0,i.useLocalState)(t,"fullStories",[]),N=C[0],b=(C[1],(0,i.useLocalState)(t,"censorMode",!1)),V=b[0],v=(b[1],2===l&&u>-1?m[u-1]:null);return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",flex:"1",children:[!!f&&(0,o.createComponentVNode)(2,g,{story:f,wanted:!0}),(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Icon,{name:v?v.icon:"newspaper",mr:"0.5rem"}),v?v.name:"Headlines"],0),flexGrow:"1",children:h.length>0?h.slice().reverse().map((function(e){return!N.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,g,{story:e},e)})):(0,o.createComponentVNode)(2,a.Box,{className:"Newscaster__emptyNotice",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"times",size:"3"}),(0,o.createVNode)(1,"br"),"There are no stories at this time."]})}),!!v&&(0,o.createComponentVNode)(2,a.Section,{flexShrink:"1",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Icon,{name:"info-circle",mr:"0.5rem"}),(0,o.createTextVNode)("About")],4),buttons:(0,o.createFragment)([V&&(0,o.createComponentVNode)(2,a.Button,{disabled:!!v.admin&&!d,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,a.Button,{disabled:!p,icon:"cog",content:"Manage",onClick:function(){return(0,s.modalOpen)(t,"manage_channel",{uid:v.uid})}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:v.description||"N/A"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Owner",children:v.author||"N/A"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Public",children:v["public"]?"Yes":"No"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Views",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"eye",mr:"0.5rem"}),h.reduce((function(e,t){return e+t.view_count}),0).toLocaleString()]})]})})]})},C=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data),l=c.jobs,s=c.wanted,d=Object.entries(l).reduce((function(e,t){t[0];return e+t[1].length}),0);return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",flex:"1",children:[!!s&&(0,o.createComponentVNode)(2,g,{story:s,wanted:!0}),(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Icon,{name:"briefcase",mr:"0.5rem"}),(0,o.createTextVNode)("Job Openings")],4),buttons:(0,o.createComponentVNode)(2,a.Box,{mt:"0.25rem",color:"label",children:"Work for a better future at Nanotrasen"}),children:d>0?p.map((function(e){return Object.assign({},m[e],{id:e,jobs:l[e]})})).filter((function(e){return!!e&&e.jobs.length>0})).map((function(e){return(0,o.createComponentVNode)(2,a.Section,{className:(0,r.classes)(["Newscaster__jobCategory","Newscaster__jobCategory--"+e.id]),title:e.title,buttons:(0,o.createComponentVNode)(2,a.Box,{mt:"0.25rem",color:"label",children:e.fluff_text}),children:e.jobs.map((function(e){return(0,o.createComponentVNode)(2,a.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,a.Box,{className:"Newscaster__emptyNotice",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"times",size:"3"}),(0,o.createVNode)(1,"br"),"There are no openings at this time."]})}),(0,o.createComponentVNode)(2,a.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,a.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."})]})]})},g=function(e,t){var n=(0,i.useBackend)(t),l=n.act,s=n.data,d=e.story,u=e.wanted,p=void 0!==u&&u,m=(0,i.useLocalState)(t,"fullStories",[]),h=m[0],f=m[1],C=(0,i.useLocalState)(t,"censorMode",!1),g=C[0];C[1];return(0,o.createComponentVNode)(2,a.Section,{className:(0,r.classes)(["Newscaster__story",p&&"Newscaster__story--wanted"]),title:(0,o.createFragment)([p&&(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-circle",mr:"0.5rem"}),(2&d.censor_flags?"[REDACTED]":d.title)||"News from "+d.author],0),buttons:(0,o.createComponentVNode)(2,a.Box,{mt:"0.25rem",children:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:[!p&&g&&(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:(0,o.createComponentVNode)(2,a.Button,{enabled:2&d.censor_flags,icon:2&d.censor_flags?"comment-slash":"comment",content:2&d.censor_flags?"Uncensor":"Censor",mr:"0.5rem",mt:"-0.25rem",onClick:function(){return l("censor_story",{uid:d.uid})}})}),(0,o.createComponentVNode)(2,a.Box,{display:"inline",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user"})," ",d.author," |\xa0",!p&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Icon,{name:"eye"}),(0,o.createTextVNode)(" "),d.view_count.toLocaleString(),(0,o.createTextVNode)(" |\xa0")],0),(0,o.createComponentVNode)(2,a.Icon,{name:"clock"})," ",(0,c.timeAgo)(d.publish_time,s.world_time)]})]})}),children:(0,o.createComponentVNode)(2,a.Box,{children:2&d.censor_flags?"[REDACTED]":(0,o.createFragment)([!!d.has_photo&&(0,o.createComponentVNode)(2,N,{name:"story_photo_"+d.uid+".png",float:"right",ml:"0.5rem"}),(d.body_short||d.body).split("\n").map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e||(0,o.createVNode)(1,"br")},e)})),d.body_short&&(0,o.createComponentVNode)(2,a.Button,{content:"Read more..",mt:"0.5rem",onClick:function(){return f([].concat(h,[d.uid]))}}),(0,o.createComponentVNode)(2,a.Box,{clear:"right"})],0)})})},N=function(e,t){var n=e.name,r=u(e,["name"]),c=(0,i.useLocalState)(t,"viewingPhoto",""),l=(c[0],c[1]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({as:"img",className:"Newscaster__photo",src:n,onClick:function(){return l(n)}},r)))},b=function(e,t){var n=(0,i.useLocalState)(t,"viewingPhoto",""),r=n[0],c=n[1];return(0,o.createComponentVNode)(2,a.Modal,{className:"Newscaster__photoZoom",children:[(0,o.createComponentVNode)(2,a.Box,{as:"img",src:r}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Close",color:"grey",mt:"1rem",onClick:function(){return c("")}})]})},V=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.data),c=!!e.args.uid&&r.channels.filter((function(t){return t.uid===e.args.uid})).pop();if("manage_channel"!==e.id||c){var l="manage_channel"===e.id,d=!!e.args.is_admin,u=e.args.scanned_user,p=(0,i.useLocalState)(t,"author",(null==c?void 0:c.author)||u||"Unknown"),m=p[0],h=p[1],f=(0,i.useLocalState)(t,"name",(null==c?void 0:c.name)||""),C=f[0],g=f[1],N=(0,i.useLocalState)(t,"description",(null==c?void 0:c.description)||""),b=N[0],V=N[1],v=(0,i.useLocalState)(t,"icon",(null==c?void 0:c.icon)||"newspaper"),x=v[0],y=v[1],k=(0,i.useLocalState)(t,"isPublic",!!l&&!!(null==c?void 0:c["public"])),w=k[0],_=k[1],B=(0,i.useLocalState)(t,"adminLocked",1===(null==c?void 0:c.admin)||!1),S=B[0],L=B[1];return(0,o.createComponentVNode)(2,a.Section,{level:"2",m:"-1rem",pb:"1rem",title:l?"Manage "+c.name:"Create New Channel",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:"Owner",children:(0,o.createComponentVNode)(2,a.Input,{disabled:!d,width:"100%",value:m,onInput:function(e,t){return h(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",placeholder:"50 characters max.",maxLength:"50",value:C,onInput:function(e,t){return g(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description (optional)",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Input,{multiline:!0,width:"100%",placeholder:"128 characters max.",maxLength:"128",value:b,onInput:function(e,t){return V(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Icon",children:[(0,o.createComponentVNode)(2,a.Input,{disabled:!d,value:x,width:"35%",mr:"0.5rem",onInput:function(e,t){return y(t)}}),(0,o.createComponentVNode)(2,a.Icon,{name:x,size:"2",verticalAlign:"middle",mr:"0.5rem"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Accept Public Stories?",children:(0,o.createComponentVNode)(2,a.Button,{selected:w,icon:w?"toggle-on":"toggle-off",content:w?"Yes":"No",onClick:function(){return _(!w)}})}),d&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Button,{selected:S,icon:S?"lock":"lock-open",content:S?"On":"Off",tooltip:"Locking this channel will make it editable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return L(!S)}})})]})}),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:0===m.trim().length||0===C.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,s.modalAnswer)(t,e.id,"",{author:m,name:C.substr(0,49),description:b.substr(0,128),icon:x,"public":w?1:0,admin_locked:S?1:0}),(0,i.deleteLocalState)(t,"author","name","description","icon","public")}})]})}(0,s.modalClose)(t)};(0,s.modalRegisterBodyOverride)("create_channel",V),(0,s.modalRegisterBodyOverride)("manage_channel",V),(0,s.modalRegisterBodyOverride)("create_story",(function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.photo,d=c.channels,u=c.channel_idx,p=void 0===u?-1:u,m=!!e.args.is_admin,h=e.args.scanned_user,f=d.slice().sort((function(e,t){if(p<0)return 0;var n=d[p-1];return n.uid===e.uid?-1:n.uid===t.uid?1:void 0})).filter((function(e){return m||!e.frozen&&(e.author===h||!!e["public"])})),C=(0,i.useLocalState)(t,"author",h||"Unknown"),g=C[0],b=C[1],V=(0,i.useLocalState)(t,"channel",f.length>0?f[0].name:""),v=V[0],x=V[1],y=(0,i.useLocalState)(t,"title",""),k=y[0],w=y[1],_=(0,i.useLocalState)(t,"body",""),B=_[0],S=_[1],L=(0,i.useLocalState)(t,"adminLocked",!1),A=L[0],I=L[1];return(0,o.createComponentVNode)(2,a.Section,{level:2,m:"-1rem",pb:"1rem",title:"Create New Story",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:"Author",children:(0,o.createComponentVNode)(2,a.Input,{disabled:!m,width:"100%",value:g,onInput:function(e,t){return b(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Channel",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Dropdown,{selected:v,options:f.map((function(e){return e.name})),mb:"0",width:"100%",onSelected:function(e){return x(e)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Title",children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",placeholder:"128 characters max.",maxLength:"128",value:k,onInput:function(e,t){return w(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Story Text",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,multiline:!0,placeholder:"1024 characters max.",maxLength:"1024",rows:"8",width:"100%",value:B,onInput:function(e,t){return S(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Photo (optional)",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.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,a.LabeledList.Item,{label:"Preview",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Section,{noTopPadding:!0,title:k,maxHeight:"13.5rem",overflow:"auto",children:(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:[!!l&&(0,o.createComponentVNode)(2,N,{name:"inserted_photo_"+l.uid+".png",float:"right"}),B.split("\n").map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e||(0,o.createVNode)(1,"br")},e)})),(0,o.createComponentVNode)(2,a.Box,{clear:"right"})]})})}),m&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Button,{selected:A,icon:A?"lock":"lock-open",content:A?"On":"Off",tooltip:"Locking this story will make it censorable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return I(!A)}})})]})}),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:0===g.trim().length||0===v.trim().length||0===k.trim().length||0===B.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,s.modalAnswer)(t,"create_story","",{author:g,channel:v,title:k.substr(0,127),body:B.substr(0,1023),admin_locked:A?1:0}),(0,i.deleteLocalState)(t,"author","channel","title","body")}})]})})),(0,s.modalRegisterBodyOverride)("wanted_notice",(function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.photo,d=c.wanted,u=!!e.args.is_admin,p=e.args.scanned_user,m=(0,i.useLocalState)(t,"author",(null==d?void 0:d.author)||p||"Unknown"),h=m[0],f=m[1],C=(0,i.useLocalState)(t,"name",(null==d?void 0:d.title.substr(8))||""),g=C[0],b=C[1],V=(0,i.useLocalState)(t,"description",(null==d?void 0:d.body)||""),v=V[0],x=V[1],y=(0,i.useLocalState)(t,"adminLocked",1===(null==d?void 0:d.admin_locked)||!1),k=y[0],w=y[1];return(0,o.createComponentVNode)(2,a.Section,{level:"2",m:"-1rem",pb:"1rem",title:"Manage Wanted Notice",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:"Authority",children:(0,o.createComponentVNode)(2,a.Input,{disabled:!u,width:"100%",value:h,onInput:function(e,t){return f(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,a.Input,{width:"100%",value:g,maxLength:"128",onInput:function(e,t){return b(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Input,{multiline:!0,width:"100%",value:v,maxLength:"512",rows:"4",onInput:function(e,t){return x(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Photo (optional)",verticalAlign:"top",children:[(0,o.createComponentVNode)(2,a.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,N,{name:"inserted_photo_"+l.uid+".png",float:"right"})]}),u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,a.Button,{selected:k,icon:k?"lock":"lock-open",content:k?"On":"Off",tooltip:"Locking this wanted notice will make it editable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return w(!k)}})})]})}),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!d,icon:"eraser",color:"danger",content:"Clear",position:"absolute",right:"7.25rem",bottom:"-0.75rem",onClick:function(){r("clear_wanted_notice"),(0,s.modalClose)(t),(0,i.deleteLocalState)(t,"author","name","description","admin_locked")}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:0===h.trim().length||0===g.trim().length||0===v.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,s.modalAnswer)(t,e.id,"",{author:h,name:g.substr(0,127),description:v.substr(0,511),admin_locked:k?1:0}),(0,i.deleteLocalState)(t,"author","name","description","admin_locked")}})]})}))},function(e,t,n){"use strict";t.__esModule=!0,t.NinjaBloodScan=void 0;var o=n(0),r=n(1),i=n(2),a=n(51),c=n(3);t.NinjaBloodScan=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,theme:"spider_clan",children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s)]})})};var l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.vialIcons,d=l.noVialIcon,u=l.bloodOwnerNames,p=l.bloodOwnerSpecies,m=l.bloodOwnerTypes,h=l.blockButtons,f=l.scanStates,C="Button_blue",g="Button_disabled",N=["NoticeBox_red","NoticeBox","NoticeBox_blue"];return(0,o.createComponentVNode)(2,i.Flex,{direction:"column",shrink:1,alignContent:"center",children:(0,o.createComponentVNode)(2,i.Section,{title:"\u041e\u0431\u0440\u0430\u0437\u0446\u044b",backgroundColor:"rgba(0, 0, 0, 0.4)",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0442\u0440\u0438 \u043e\u0431\u0440\u0430\u0437\u0446\u0430 \u043a\u0440\u043e\u0432\u0438. \u041c\u0430\u0448\u0438\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u0440\u043e\u0432\u044c\u044e \u0441\u0443\u0449\u0435\u0441\u0442\u0432 \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0432\u0430\u043c \u043a\u043b\u0430\u043d. \u0420\u0435\u0430\u0433\u0435\u043d\u0442\u044b \u0438\u043c \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u0435 \u043f\u0440\u0438\u043c\u0443\u0442\u0441\u044f \u0438\u043b\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c",tooltipPosition:"bottom-left"}),children:[(0,o.createComponentVNode)(2,i.Flex,{direction:"row",shrink:1,alignContent:"center",children:[1,2,3].map((function(e,t){return(0,o.createComponentVNode)(2,a.FlexItem,{direction:"column",width:"33.3%",ml:t?2:0,children:[(0,o.createComponentVNode)(2,i.Section,{title:u[t]?"\u041a\u0440\u043e\u0432\u044c":"\u041d\u0435\u0442 \u0440\u0435\u0430\u0433\u0435\u043d\u0442\u0430",style:{"text-align":"left",background:"rgba(53, 94, 163, 0.5)"}}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:N[f[t]],success:0,danger:0,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{className:h?g:C,height:"100%",width:"100%",disabled:h,onClick:function(){return c("vial_out",{button_num:t+1})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"128px",width:"128px",src:"data:image/jpeg;base64,"+(s[t]||d),style:{"margin-left":"3px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:u[t]||" - ",content:"\u0420\u0430\u0441\u0430: "+(p[t]||" - ")+"\n\u0422\u0438\u043f \u043a\u0440\u043e\u0432\u0438: "+(m[t]||" - "),position:"bottom"})]})})]},t)}))}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_red",success:0,danger:0,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{className:0===h?"":"Button_disabled",content:"\u041d\u0430\u0447\u0430\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",width:"250px",textAlign:"center",disabled:h,tooltip:"\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u0440\u043e\u0432\u044c \u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043a\u043b\u0430\u043d\u0443.",tooltipPosition:"bottom",onClick:function(){return c("scan_blood")}})})]})})},s=function(e,t){var n=(0,r.useBackend)(t).data.progressBar;return(0,o.createComponentVNode)(2,i.Section,{stretchContents:!0,children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:"green",value:n,minValue:0,maxValue:100,children:(0,o.createVNode)(1,"center",null,(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_green",mt:1,children:n?"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 "+n+"%":"\u0420\u0435\u0436\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f"}),2)})})}},function(e,t,n){"use strict";t.__esModule=!0,t.NinjaMindScan=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.NinjaMindScan=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"spider_clan",children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.occupantIcon,s=c.occupant_name,d=c.occupant_health,u=c.scanned_occupants,p="none"===s?1:0;return(0,o.createComponentVNode)(2,i.Flex,{direction:"column",shrink:1,alignContent:"left",children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u041f\u0430\u0446\u0438\u0435\u043d\u0442",backgroundColor:"rgba(0, 0, 0, 0.4)",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435.",tooltipPosition:"bottom-left"}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",shrink:1,alignContent:"left",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{shrink:1,alignContent:"left",children:(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_blue",success:0,danger:0,width:"90px",align:"left",children:(0,o.createComponentVNode)(2,i.Section,{style:{background:"rgba(4, 74, 27, 0.75)"},align:"left",children:(0,o.createVNode)(1,"img",null,null,1,{height:"128px",width:"128px",src:"data:image/jpeg;base64,"+l,style:{"margin-left":"-28px","-ms-interpolation-mode":"nearest-neighbor"}})})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,alignContent:"right",children:[(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_green",success:0,danger:0,align:"left",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0418\u043c\u044f",children:s}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0417\u0434\u043e\u0440\u043e\u0432\u044c\u0435",children:d})]})}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_red",mt:2.5,success:0,danger:0,align:"center",children:[(0,o.createComponentVNode)(2,i.Button,{className:0===p?"":"Button_disabled",content:"\u041d\u0430\u0447\u0430\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",width:"250px",textAlign:"center",disabled:p,tooltip:"\u0421\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u044b\u0442\u044c \u0438\u0437 \u0435\u0433\u043e \u0440\u0430\u0437\u0443\u043c\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043a\u043b\u0430\u043d\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.",tooltipPosition:"bottom-left",onClick:function(){return a("scan_occupant")}}),(0,o.createComponentVNode)(2,i.Button,{className:0===p?"":"Button_disabled",content:"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e",width:"250px",textAlign:"center",disabled:p,tooltip:"\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u044f \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u0438\u0437 \u043a\u0430\u043f\u0441\u0443\u043b\u044b",tooltipPosition:"bottom-left",onClick:function(){return a("go_out")}}),(0,o.createComponentVNode)(2,i.Button,{className:0===p?"":"Button_disabled",content:"\u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044f \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430",width:"250px",textAlign:"center",disabled:p,tooltip:"\u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u0446\u0438\u0435\u043d\u0442\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d \u0431\u044b\u043b \u043f\u043e\u0445\u0438\u0449\u0435\u043d. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0433\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u0440\u0430\u0437\u0431\u043e\u043b\u0442\u0430\u043b \u043e \u0432\u0430\u0441.",tooltipPosition:"bottom-left",onClick:function(){return a("teleport_out")}})]})]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u043f\u0438\u0441\u043e\u043a \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u043c\u0438 \u043b\u044e\u0434\u0435\u0439",align:"center",backgroundColor:"rgba(0, 0, 0, 0.4)",children:(0,o.createComponentVNode)(2,i.Box,{maxHeight:15,overflowY:"auto",overflowX:"hidden",children:(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.scanned_occupant})})},e.scanned_occupant)}))})})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.NuclearBomb=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.NuclearBomb=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return l.extended?(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Auth Disk",children:(0,o.createComponentVNode)(2,i.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 c("auth")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Auth Code",children:(0,o.createComponentVNode)(2,i.Button,{icon:"key",disabled:!l.authdisk,selected:l.authcode,content:l.codemsg,onClick:function(){return c("code")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Arming & Disarming",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Bolted to floor",children:(0,o.createComponentVNode)(2,i.Button,{icon:l.anchored?"check":"times",selected:l.anchored,disabled:!l.authfull,content:l.anchored?"YES":"NO",onClick:function(){return c("toggle_anchor")}})}),l.authfull&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Time Left",children:(0,o.createComponentVNode)(2,i.Button,{icon:"stopwatch",content:l.time,disabled:!l.authfull,tooltip:"Set Timer",onClick:function(){return c("set_time")}})})||(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Time Left",color:l.timer?"red":"",children:l.time+"s"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safety",children:(0,o.createComponentVNode)(2,i.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 c("toggle_safety")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Arm/Disarm",children:(0,o.createComponentVNode)(2,i.Button,{icon:(l.timer,"bomb"),disabled:l.safety||!l.authfull,color:"red",content:l.timer?"DISARM THE NUKE":"ARM THE NUKE",onClick:function(){return c("toggle_armed")}})})]})})]})}):(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{title:"Deployment",children:(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation-triangle",content:"Deploy Nuclear Device (will bolt device to floor)",onClick:function(){return c("deploy")}})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.OperatingComputer=void 0;var o=n(0),r=n(15),i=n(1),a=n(3),c=n(2),l=[["good","Conscious"],["average","Unconscious"],["bad","DEAD"]],s=[["Resp.","oxyLoss"],["Toxin","toxLoss"],["Brute","bruteLoss"],["Burn","fireLoss"]],d={average:[.25,.5],bad:[.5,Infinity]},u=["bad","average","average","good","average","average","bad"];t.OperatingComputer=function(e,t){var n,r=(0,i.useBackend)(t),l=r.act,s=r.data,d=s.hasOccupant,u=s.choice;return n=u?(0,o.createComponentVNode)(2,h):d?(0,o.createComponentVNode)(2,p):(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,c.Tabs,{children:[(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:!u,icon:"user",onClick:function(){return l("choiceOff")},children:"Patient"}),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:!!u,icon:"cog",onClick:function(){return l("choiceOn")},children:"Options"})]}),(0,o.createComponentVNode)(2,c.Section,{flexGrow:"1",children:n})]})})};var p=function(e,t){var n=(0,i.useBackend)(t).data.occupant;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:"Patient",level:"2",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:n.name}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",color:l[n.stat][0],children:l[n.stat][1]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:n.maxHealth,value:n.health/n.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),s.map((function(e,t){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e[0]+" Damage",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:"100",value:n[e[1]]/100,ranges:d,children:(0,r.round)(n[e[1]])},t)},t)})),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:n.maxTemp,value:n.bodyTemperature/n.maxTemp,color:u[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,c.LabeledList.Item,{label:"Blood Level",children:(0,o.createComponentVNode)(2,c.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,c.LabeledList.Item,{label:"Pulse",children:[n.pulse," BPM"]})],4)]})}),(0,o.createComponentVNode)(2,c.Section,{title:"Current Procedures",level:"2",children:n.inSurgery?n.surgeries.map((function(e){var t=e.bodypartName,n=e.surgeryName,r=e.stepName;return(0,o.createComponentVNode)(2,c.Section,{title:t,level:"4",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Procedure",children:n}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Next Step",children:r})]})},t)})):(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No procedures ongoing."})})],4)},m=function(){return(0,o.createComponentVNode)(2,c.Flex,{textAlign:"center",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 patient detected."]})})},h=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data,l=a.verbose,s=a.health,d=a.healthAlarm,u=a.oxy,p=a.oxyAlarm,m=a.crit;return(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Loudspeaker",children:(0,o.createComponentVNode)(2,c.Button,{selected:l,icon:l?"toggle-on":"toggle-off",content:l?"On":"Off",onClick:function(){return r(l?"verboseOff":"verboseOn")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health Announcer",children:(0,o.createComponentVNode)(2,c.Button,{selected:s,icon:s?"toggle-on":"toggle-off",content:s?"On":"Off",onClick:function(){return r(s?"healthOff":"healthOn")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health Announcer Threshold",children:(0,o.createComponentVNode)(2,c.Knob,{bipolar:!0,minValue:"-100",maxValue:"100",value:d,stepPixelSize:"5",ml:"0",onChange:function(e,t){return r("health_adj",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Oxygen Alarm",children:(0,o.createComponentVNode)(2,c.Button,{selected:u,icon:u?"toggle-on":"toggle-off",content:u?"On":"Off",onClick:function(){return r(u?"oxyOff":"oxyOn")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Oxygen Alarm Threshold",children:(0,o.createComponentVNode)(2,c.Knob,{bipolar:!0,minValue:"-100",maxValue:"100",value:p,stepPixelSize:"5",ml:"0",onChange:function(e,t){return r("oxy_adj",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Critical Alert",children:(0,o.createComponentVNode)(2,c.Button,{selected:m,icon:m?"toggle-on":"toggle-off",content:m?"On":"Off",onClick:function(){return r(m?"critOff":"critOn")}})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Orbit=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(3);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 s(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 s(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 s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);nt},m=function(e,t){var n=e.name,o=t.name;if(!n||!o)return 0;var r=n.match(d),i=o.match(d);return r&&i&&n.replace(d,"")===o.replace(d,"")?parseInt(r[1],10)-parseInt(i[1],10):p(n,o)},h=function(e,t){var n=(0,i.useBackend)(t).act,r=e.searchText,c=e.source,l=e.title,s=c.filter(u(r));return s.sort(m),c.length>0&&(0,o.createComponentVNode)(2,a.Section,{title:l+" - ("+c.length+")",children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,onClick:function(){return n("orbit",{ref:e.ref})}},e.name)}))})},f=function(e,t){var n=(0,i.useBackend)(t).act,r=e.color,c=e.thing;return(0,o.createComponentVNode)(2,a.Button,{color:r,onClick:function(){return n("orbit",{ref:c.ref})},children:c.name})};t.Orbit=function(e,t){for(var n,r=(0,i.useBackend)(t),s=r.act,d=r.data,C=d.alive,g=d.antagonists,N=d.highlights,b=(d.auto_observe,d.dead),V=d.ghosts,v=d.misc,x=d.npcs,y=(0,i.useLocalState)(t,"searchText",""),k=y[0],w=y[1],_={},B=l(g);!(n=B()).done;){var S=n.value;_[S.antag]===undefined&&(_[S.antag]=[]),_[S.antag].push(S)}var L=Object.entries(_);L.sort((function(e,t){return p(e[0],t[0])}));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:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Icon,{name:"search",mr:1})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search...",autoFocus:!0,fluid:!0,value:k,onInput:function(e,t){return w(t)},onEnter:function(e,t){return function(e){for(var t=0,n=[L.map((function(e){return e[0],e[1]})),N,C,V,b,x,v];t0&&(0,o.createComponentVNode)(2,a.Section,{title:"Antagonists",children:L.map((function(e){var t=e[0],n=e[1];return(0,o.createComponentVNode)(2,a.Section,{title:t,level:2,children:n.filter(u(k)).sort(m).map((function(e){return(0,o.createComponentVNode)(2,f,{color:"bad",thing:e},e.name)}))},t)}))}),N.length>0&&(0,o.createComponentVNode)(2,h,{title:"Highlights",source:N,searchText:k,color:"teal"}),(0,o.createComponentVNode)(2,a.Section,{title:"Alive - ("+C.length+")",children:C.filter(u(k)).sort(m).map((function(e){return(0,o.createComponentVNode)(2,f,{color:"good",thing:e},e.name)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Ghosts - ("+V.length+")",children:V.filter(u(k)).sort(m).map((function(e){return(0,o.createComponentVNode)(2,f,{color:"grey",thing:e},e.name)}))}),(0,o.createComponentVNode)(2,h,{title:"Dead",source:b,searchText:k}),(0,o.createComponentVNode)(2,h,{title:"NPCs",source:x,searchText:k}),(0,o.createComponentVNode)(2,h,{title:"Misc",source:v,searchText:k})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.OreRedemption=void 0;var o=n(0),r=n(1),i=n(2),a=n(51),c=n(3),l=function(e){return e.toLocaleString("en-US")+" pts"},s={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,i.Flex,{direction:"column",width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"content",mb:"0.5rem",children:(0,o.createComponentVNode)(2,d,{height:"100%"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",overflow:"hidden",children:[(0,o.createComponentVNode)(2,u,{height:"62%"}),(0,o.createComponentVNode)(2,p,{height:"38%"})]})]})})})};var d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,s=c.id,d=c.points,u=c.disk,p=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Section,Object.assign({},p,{children:[(0,o.createComponentVNode)(2,i.Box,{color:"average",textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"exclamation-triangle",mr:"0.5rem"}),"This machine only accepts ore. Gibtonite is not accepted."]}),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID card",children:s?(0,o.createComponentVNode)(2,i.Button,{selected:!0,bold:!0,verticalAlign:"middle",icon:"eject",content:s.name,tooltip:"Ejects the ID card.",onClick:function(){return a("eject_id")},style:{"white-space":"pre-wrap"}}):(0,o.createComponentVNode)(2,i.Button,{icon:"sign-in-alt",content:"Insert",tooltip:"Hold the ID card in your hand to insert.",onClick:function(){return a("insert_id")}})}),s&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Mining Points",children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:l(s.points)})}),s&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Mining Points",children:(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:l(s.total_points)})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Unclaimed Points",color:d>0?"good":"grey",bold:d>0&&"good",children:l(d)}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{children:(0,o.createComponentVNode)(2,i.Button,{disabled:!s,icon:"hand-holding-usd",content:"Claim",onClick:function(){return a("claim")}})})]}),(0,o.createComponentVNode)(2,i.Divider),u?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Design disk",children:(0,o.createComponentVNode)(2,i.Button,{selected:!0,bold:!0,icon:"eject",content:u.name,tooltip:"Ejects the design disk.",onClick:function(){return a("eject_disk")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stored design",children:(0,o.createComponentVNode)(2,i.Box,{color:u.design&&(u.compatible?"good":"bad"),children:u.design||"N/A"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{children:(0,o.createComponentVNode)(2,i.Button,{disabled:!u.design||!u.compatible,icon:"upload",content:"Download",tooltip:"Downloads the design on the disk into the machine.",onClick:function(){return a("download")},mb:"0"})})]}):(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"No design disk inserted."})]})))},u=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.sheets),c=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Section,Object.assign({className:"OreRedemption__Ores",p:"0"},c,{children:[(0,o.createComponentVNode)(2,m,{title:"Sheets",columns:[["Available","25%"],["Ore Value","15%"],["Smelt","20%"]]}),a.map((function(e){return(0,o.createComponentVNode)(2,h,{ore:e},e.id)}))]})))},p=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.alloys),c=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Section,Object.assign({className:"OreRedemption__Ores",p:"0"},c,{children:[(0,o.createComponentVNode)(2,m,{title:"Alloys",columns:[["Recipe","50%"],["Available","11%"],["Smelt","20%"]]}),a.map((function(e){return(0,o.createComponentVNode)(2,f,{ore:e},e.id)}))]})))},m=function(e,t){var n;return(0,o.createComponentVNode)(2,i.Box,{className:"OreHeader",children:(0,o.createComponentVNode)(2,i.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",children:e.title}),null==(n=e.columns)?void 0:n.map((function(e){return(0,o.createComponentVNode)(2,i.Flex.Item,{basis:e[1],textAlign:"center",color:"label",bold:!0,children:e[0]},e[1])}))]})})},h=function(e,t){var n=(0,r.useBackend)(t).act,a=e.ore;if(!(a.value&&a.amount<=0)||["$metal","$glass"].indexOf(a.id)>-1){var c=a.id.replace("$","");return(0,o.createComponentVNode)(2,i.Box,{className:"SheetLine",children:(0,o.createComponentVNode)(2,i.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"45%",align:"middle",children:[(0,o.createComponentVNode)(2,i.Box,{as:"img",src:"sheet-"+(s[c]||c)+".png",verticalAlign:"middle",ml:"0rem"}),a.name]}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"20%",textAlign:"center",color:a.amount>0?"good":"gray",bold:a.amount>0,align:"center",children:a.amount.toLocaleString("en-US")}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"20%",textAlign:"center",align:"center",children:a.value}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"20%",textAlign:"center",align:"center",lineHeight:"32px",children:(0,o.createComponentVNode)(2,i.NumberInput,{value:0,minValue:0,maxValue:Math.min(a.amount,50),stepPixelSize:6,onChange:function(e,t){return n(a.value?"sheet":"alloy",{id:a.id,amount:t})}})})]})})}},f=function(e,t){var n=(0,r.useBackend)(t).act,c=e.ore,l=c.id.replace("$","");return(0,o.createComponentVNode)(2,i.Box,{className:"SheetLine",children:(0,o.createComponentVNode)(2,i.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"7%",align:"middle",children:(0,o.createComponentVNode)(2,i.Box,{as:"img",src:"sheet-"+l+".png",verticalAlign:"middle",ml:"`0rem"})}),(0,o.createComponentVNode)(2,a.FlexItem,{basis:"30%",textAlign:"middle",align:"center",children:c.name}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"35%",textAlign:"middle",color:c.amount>0?"good":"gray",align:"center",children:c.description}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"10%",textAlign:"center",color:c.amount>0?"good":"gray",bold:c.amount>0,align:"center",children:c.amount.toLocaleString("en-US")}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"20%",textAlign:"center",align:"center",lineHeight:"32px",children:(0,o.createComponentVNode)(2,i.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})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PAI=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(136),l=n(577);t.PAI=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data,u=d.app_template,p=d.app_icon,m=d.app_title,h=function(e){var t;try{t=l("./"+e+".js")}catch(o){if("MODULE_NOT_FOUND"===o.code)return(0,c.routingError)("notFound",e);throw o}var n=t[e];return n||(0,c.routingError)("missingExport",e)}(u);return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Icon,{name:p,mr:1}),m,"pai_main_menu"!==u&&(0,o.createComponentVNode)(2,i.Button,{ml:2,content:"Home",icon:"arrow-up",onClick:function(){return s("MASTER_back")}})]}),p:1,children:(0,o.createComponentVNode)(2,h)})})})}},function(e,t,n){var o={"./pai_advsecrecords.js":578,"./pai_atmosphere.js":579,"./pai_bioscan.js":580,"./pai_camera_bug.js":581,"./pai_directives.js":582,"./pai_doorjack.js":583,"./pai_encoder.js":584,"./pai_main_menu.js":585,"./pai_manifest.js":586,"./pai_medrecords.js":587,"./pai_messenger.js":588,"./pai_radio.js":589,"./pai_sec_chem.js":590,"./pai_secrecords.js":591,"./pai_signaler.js":592};function r(e){var t=i(e);return n(t)}function i(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=i,e.exports=r,r.id=577},function(e,t,n){"use strict";t.__esModule=!0,t.pai_advsecrecords=void 0;var o=n(0),r=n(1),i=n(2);t.pai_advsecrecords=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data;return(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Special Syndicate options:",children:(0,o.createComponentVNode)(2,i.Button,{content:"Select Records",onClick:function(){return a("ui_interact")}})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_atmosphere=void 0;var o=n(0),r=n(1),i=n(195);t.pai_atmosphere=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return(0,o.createComponentVNode)(2,i.AtmosScan,{data:a.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_bioscan=void 0;var o=n(0),r=n(1),i=n(2);t.pai_bioscan=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.app_data),c=a.holder,l=a.dead,s=a.health,d=a.brute,u=a.oxy,p=a.tox,m=a.burn,h=a.reagents,f=a.addictions,C=a.fractures,g=a.internal_bleeding;return c?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:l?(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"red",children:"Dead"}):(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"green",children:"Alive"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:0,max:1,value:s/100,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen Damage",children:(0,o.createComponentVNode)(2,i.Box,{color:"blue",children:u})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Toxin Damage",children:(0,o.createComponentVNode)(2,i.Box,{color:"green",children:p})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Burn Damage",children:(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:m})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Brute Damage",children:(0,o.createComponentVNode)(2,i.Box,{color:"red",children:d})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Reagents",children:h?h.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.title,children:(0,o.createComponentVNode)(2,i.Box,{color:e.overdosed?"bad":"good",children:[" ",e.volume," ",e.overdosed?"OVERDOSED":""," "]})},e.id)})):"Reagents not found."}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Addictions",children:f?f.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.addiction_name,children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:[" Stage: ",e.stage," "]})},e.id)})):(0,o.createComponentVNode)(2,i.Box,{color:"good",children:"Addictions not found."})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fractures",children:(0,o.createComponentVNode)(2,i.Box,{color:C?"bad":"good",children:["Fractures ",C?"":"not"," detected."]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Internal Bleedings",children:(0,o.createComponentVNode)(2,i.Box,{color:g?"bad":"good",children:["Internal Bleedings ",g?"":"not"," detected."]})})]}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Error: No biological host found."})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_camera_bug=void 0;var o=n(0),r=n(1),i=n(2);t.pai_camera_bug=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data;return(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Special Syndicate options:",children:(0,o.createComponentVNode)(2,i.Button,{content:"Select Monitor",onClick:function(){return a("ui_interact")}})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_directives=void 0;var o=n(0),r=n(1),i=n(2);t.pai_directives=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app_data,l=c.master,s=c.dna,d=c.prime,u=c.supplemental;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Master",children:l?l+" ("+s+")":"None"}),l&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Request DNA",children:(0,o.createComponentVNode)(2,i.Button,{content:"Request Carrier DNA Sample",icon:"dna",onClick:function(){return a("getdna")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Prime Directive",children:d}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Supplemental Directives",children:u||"None"})]}),(0,o.createComponentVNode)(2,i.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,i.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),i=n(2);t.pai_doorjack=function(e,t){var n,a,c=(0,r.useBackend)(t),l=c.act,s=c.data.app_data,d=s.cable,u=s.machine,p=s.inprogress;s.progress,s.aborted;return n=u?(0,o.createComponentVNode)(2,i.Button,{selected:!0,content:"Connected"}):(0,o.createComponentVNode)(2,i.Button,{content:d?"Extended":"Retracted",color:d?"orange":null,onClick:function(){return l("cable")}}),u&&(a=(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hack",children:[(0,o.createComponentVNode)(2,i.Box,{color:p?"green":"red",children:[" In progress: ",p?"Yes":"No"," "]}),p?(0,o.createComponentVNode)(2,i.Button,{mt:1,color:"red",content:"Abort",onClick:function(){return l("cancel")}}):(0,o.createComponentVNode)(2,i.Button,{mt:1,content:"Start",onClick:function(){return l("jack")}})]})),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cable",children:n}),a]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_encoder=void 0;var o=n(0),r=n(1),i=n(2);t.pai_encoder=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app_data,l=c.radio_name,s=c.radio_rank;return(0,o.createComponentVNode)(2,i.Section,{title:"Your name and rank in radio channels",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Your current name and rank",children:[l,", ",s]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Set new name",children:(0,o.createComponentVNode)(2,i.Input,{onInput:function(e,t){return a("set_newname",{newname:t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Set new rank",children:(0,o.createComponentVNode)(2,i.Input,{onInput:function(e,t){return a("set_newrank",{newrank:t})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_main_menu=void 0;var o=n(0),r=n(1),i=n(2);t.pai_main_menu=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app_data,l=c.available_software,s=c.installed_software,d=c.installed_toggles,u=c.available_ram,p=c.emotions,m=c.current_emotion,h=[];return s.map((function(e){return h[e.key]=e.name})),d.map((function(e){return h[e.key]=e.name})),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available RAM",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available Software",children:[l.filter((function(e){return!h[e.key]})).map((function(e){return(0,o.createComponentVNode)(2,i.Button,{color:e.syndi?"red":"default",content:e.name+" ("+e.cost+")",icon:e.icon,disabled:e.cost>u,onClick:function(){return a("purchaseSoftware",{key:e.key})}},e.key)})),0===l.filter((function(e){return!h[e.key]})).length&&"No software available!"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Installed Software",children:[s.filter((function(e){return"mainmenu"!==e.key})).map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.name,icon:e.icon,onClick:function(){return a("startSoftware",{software_key:e.key})}},e.key)})),0===s.length&&"No software installed!"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Installed Toggles",children:[d.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.name,icon:e.icon,selected:e.active,onClick:function(){return a("setToggle",{toggle_key:e.key})}},e.key)})),0===d.length&&"No toggles installed!"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Select Emotion",children:p.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{color:e.syndi?"red":"default",content:e.name,selected:e.id===m,onClick:function(){return a("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),i=n(144);t.pai_manifest=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return(0,o.createComponentVNode)(2,i.CrewManifest,{data:a.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_medrecords=void 0;var o=n(0),r=n(1),i=n(106);t.pai_medrecords=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.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),i=n(196);t.pai_messenger=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return a.app_data.active_convo?(0,o.createComponentVNode)(2,i.ActiveConversation,{data:a.app_data}):(0,o.createComponentVNode)(2,i.MessengerList,{data:a.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_radio=void 0;var o=n(0),r=n(1),i=n(15),a=n(2);t.pai_radio=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.app_data,s=l.minFrequency,d=l.maxFrequency,u=l.frequency,p=l.broadcasting;return(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Frequency",children:[(0,o.createComponentVNode)(2,a.NumberInput,{animate:!0,step:.2,stepPixelSize:6,minValue:s/10,maxValue:d/10,value:u/10,format:function(e){return(0,i.toFixed)(e,1)},onChange:function(e,t){return c("freq",{freq:t})}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Reset",icon:"undo",onClick:function(){return c("freq",{freq:"145.9"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Broadcast Nearby Speech",children:(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return c("toggleBroadcast")},selected:p,content:p?"Enabled":"Disabled"})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_sec_chem=void 0;var o=n(0),r=n(1),i=n(2);t.pai_sec_chem=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app_data,l=c.holder,s=c.dead,d=c.health,u=c.current_chemicals,p=c.available_chemicals;return l?(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:s?(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"red",children:"Dead"}):(0,o.createComponentVNode)(2,i.Box,{bold:!0,color:"green",children:"Alive"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:0,max:1,value:d/100,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Chemicals",children:u}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available Chemicals",children:[p.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{content:e.name+" ("+e.cost+")",tooltip:e.desc,disabled:e.cost>u,onClick:function(){return a("secreteChemicals",{key:e.key})}},e.key)})),0===p.length&&"No chemicals available!"]})]})}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Error: No biological host found."})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_secrecords=void 0;var o=n(0),r=n(1),i=n(106);t.pai_secrecords=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.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),i=n(197);t.pai_signaler=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return(0,o.createComponentVNode)(2,i.Signaler,{data:a.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.PDA=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(136),l=n(594);t.PDA=function(e,t){var n=(0,r.useBackend)(t),u=(n.act,n.data),p=u.app;if(!u.owner)return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Error",children:"No user data found. Please swipe an ID card."})})});var m=function(e){var t;try{t=l("./"+e+".js")}catch(o){if("MODULE_NOT_FOUND"===o.code)return(0,c.routingError)("notFound",e);throw o}var n=t[e];return n||(0,c.routingError)("missingExport",e)}(p.template);return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,i.Section,{title:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Icon,{name:p.icon,mr:1}),p.name]}),p:1,children:(0,o.createComponentVNode)(2,m)}),(0,o.createComponentVNode)(2,i.Box,{mb:8}),(0,o.createComponentVNode)(2,d)]})})};var s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.idInserted,s=c.idLink,d=c.stationTime,u=c.cartridge_name;return(0,o.createComponentVNode)(2,i.Box,{mb:1,children:(0,o.createComponentVNode)(2,i.Flex,{align:"center",justify:"space-between",children:[l?(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"id-card",color:"transparent",onClick:function(){return a("Authenticate")},content:s})}):(0,o.createComponentVNode)(2,i.Flex.Item,{m:1,color:"grey",children:"No ID Inserted"}),u?(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"sd-card",color:"transparent",onClick:function(){return a("Eject")},content:"Eject "+u})}):(0,o.createComponentVNode)(2,i.Flex.Item,{m:1,color:"grey",children:"No Cartridge Inserted"}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,textAlign:"right",bold:!0,m:1,children:d})]})})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.app;return(0,o.createComponentVNode)(2,i.Box,{className:"PDA__footer",backgroundColor:"#1b1b1b",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"33%",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,className:"PDA__footer__button",color:"transparent",iconColor:c.has_back?"white":"disabled",icon:"arrow-alt-circle-left-o",onClick:function(){return a("Back")}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"33%",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,className:"PDA__footer__button",color:"transparent",iconColor:c.is_home?"disabled":"white",icon:"home",onClick:function(){a("Home")}})})]})})}},function(e,t,n){var o={"./pda_atmos_scan.js":595,"./pda_janitor.js":596,"./pda_main_menu.js":597,"./pda_manifest.js":598,"./pda_medical.js":599,"./pda_messenger.js":196,"./pda_mob_hunt.js":600,"./pda_mule.js":601,"./pda_notes.js":602,"./pda_power.js":603,"./pda_secbot.js":604,"./pda_security.js":605,"./pda_signaler.js":606,"./pda_status_display.js":607,"./pda_supplyrecords.js":608};function r(e){var t=i(e);return n(t)}function i(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=i,e.exports=r,r.id=594},function(e,t,n){"use strict";t.__esModule=!0,t.pda_atmos_scan=void 0;var o=n(0),r=n(1),i=n(195);t.pda_atmos_scan=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.AtmosScan,{data:n})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_janitor=void 0;var o=n(0),r=n(1),i=n(2);t.pda_janitor=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.janitor),c=a.user_loc,l=a.mops,s=a.buckets,d=a.cleanbots,u=a.carts;return(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Location",children:[c.x,",",c.y]}),l&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mop Locations",children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.x,",",e.y," (",e.dir,") - ",e.status]},e)}))}),s&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mop Bucket Locations",children:s.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.x,",",e.y," (",e.dir,") - [",e.volume,"/",e.max_volume,"]"]},e)}))}),d&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cleanbot Locations",children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.x,",",e.y," (",e.dir,") - ",e.status]},e)}))}),u&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Janitorial Cart Locations",children:u.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:[e.x,",",e.y," (",e.dir,") - [",e.volume,"/",e.max_volume,"]"]},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_main_menu=void 0;var o=n(0),r=(n(15),n(1)),i=n(2);t.pda_main_menu=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.owner,s=c.ownjob,d=c.idInserted,u=c.categories,p=c.pai,m=c.notifying;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Owner",color:"average",children:[l,", ",s]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID",children:(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Update PDA Info",disabled:!d,onClick:function(){return a("UpdateInfo")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{level:2,title:"Functions",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:u.map((function(e){var t=c.apps[e];return t&&t.length?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e,children:t.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:e.uid in m?e.notify_icon:e.icon,iconSpin:e.uid in m,color:e.uid in m?"red":"transparent",content:e.name,onClick:function(){return a("StartProgram",{program:e.uid})}},e.uid)}))},e):null}))})}),!!p&&(0,o.createComponentVNode)(2,i.Section,{level:2,title:"pAI",children:[(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"cog",content:"Configuration",onClick:function(){return a("pai",{option:1})}}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:"Eject pAI",onClick:function(){return a("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),i=n(144);t.pda_manifest=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,i.CrewManifest)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_medical=void 0;var o=n(0),r=n(1),i=n(106);t.pda_medical=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.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),i=n(2);t.pda_mob_hunt=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.connected,s=c.wild_captures,d=c.no_collection,u=c.entry;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Connection Status",children:l?(0,o.createComponentVNode)(2,i.Box,{color:"green",children:["Connected",(0,o.createComponentVNode)(2,i.Button,{ml:2,content:"Disconnect",icon:"sign-out-alt",onClick:function(){return a("Disconnect")}})]}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:["Disconnected",(0,o.createComponentVNode)(2,i.Button,{ml:2,content:"Connect",icon:"sign-in-alt",onClick:function(){return a("Reconnect")}})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total Wild Captures",children:s})]}),(0,o.createComponentVNode)(2,i.Section,{title:"Collection",mt:2,buttons:(0,o.createComponentVNode)(2,i.Box,{children:!d&&(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"Previous",icon:"arrow-left",onClick:function(){return a("Prev")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Next",icon:"arrow-right",onClick:function(){return a("Next")}})]})}),children:d?"Your collection is empty! Go capture some Nano-Mobs!":u?(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:u.sprite,style:{width:"64px","-ms-interpolation-mode":"nearest-neighbor"}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[u.nickname&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nickname",children:u.nickname}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Species",children:u.real_name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:u.level}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Primary Type",children:u.type1}),u.type2&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Secondary Type",children:u.type2}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Transfer",icon:"sd-card",onClick:function(){return a("Transfer")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Release",icon:"arrow-up",onClick:function(){return a("Release")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Rename",icon:"pencil-alt",onClick:function(){return a("Rename")}}),!!u.is_hacked&&(0,o.createComponentVNode)(2,i.Button,{content:"Set Trap",icon:"bolt",color:"red",onClick:function(){return a("Set_Trap")}})]})]})})]}):(0,o.createComponentVNode)(2,i.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),i=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,i.Box,{children:l?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,a)})};var a=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.mulebot.bots;return(0,o.createComponentVNode)(2,i.Box,{children:[c.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:e.Name,icon:"cog",onClick:function(){return a("AccessBot",{uid:e.uid})}})},e.Name)})),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"rss",content:"Re-scan for bots",onClick:function(){return a("Rescan")}})})]})},c=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,l=a.data.mulebot,s=l.botstatus,d=l.active,u=s.mode,p=s.loca,m=s.load,h=s.powr,f=s.dest,C=s.home,g=s.retn,N=s.pick;switch(u){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=u}return(0,o.createComponentVNode)(2,i.Section,{title:d,children:[-1===u&&(0,o.createComponentVNode)(2,i.Box,{color:"red",bold:!0,children:"Waiting for response..."}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:p}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:n}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power",children:[h,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Home",children:C}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Destination",children:(0,o.createComponentVNode)(2,i.Button,{content:f?f+" (Set)":"None (Set)",onClick:function(){return c("SetDest")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Load",children:(0,o.createComponentVNode)(2,i.Button,{content:m?m+" (Unload)":"None",disabled:!m,onClick:function(){return c("Unload")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Auto Pickup",children:(0,o.createComponentVNode)(2,i.Button,{content:N?"Yes":"No",selected:N,onClick:function(){return c("SetAutoPickup",{autoPickupType:N?"pickoff":"pickon"})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Auto Return",children:(0,o.createComponentVNode)(2,i.Button,{content:g?"Yes":"No",selected:g,onClick:function(){return c("SetAutoReturn",{autoReturnType:g?"retoff":"reton"})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Stop",icon:"stop",onClick:function(){return c("Stop")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Proceed",icon:"play",onClick:function(){return c("Start")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Return Home",icon:"home",onClick:function(){return c("ReturnHome")}})]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_notes=void 0;var o=n(0),r=n(1),i=n(2);t.pda_notes=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.note;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Section,{children:c}),(0,o.createComponentVNode)(2,i.Button,{icon:"pen",onClick:function(){return a("Edit")},content:"Edit"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_power=void 0;var o=n(0),r=n(1),i=n(198);t.pda_power=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,i.PowerMonitorMainContent)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_secbot=void 0;var o=n(0),r=n(1),i=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,i.Box,{children:l?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,a)})};var a=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.beepsky.bots;return(0,o.createComponentVNode)(2,i.Box,{children:[c.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:e.Name,icon:"cog",onClick:function(){return a("AccessBot",{uid:e.uid})}})},e.Name)})),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"rss",content:"Re-scan for bots",onClick:function(){return a("Rescan")}})})]})},c=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act,l=a.data.beepsky,s=l.botstatus,d=l.active,u=s.mode,p=s.loca;switch(u){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,i.Section,{title:d,children:[-1===u&&(0,o.createComponentVNode)(2,i.Box,{color:"red",bold:!0,children:"Waiting for response..."}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:p}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:n}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Go",icon:"play",onClick:function(){return c("Go")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Stop",icon:"stop",onClick:function(){return c("Stop")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Summon",icon:"arrow-down",onClick:function(){return c("Summon")}})]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_security=void 0;var o=n(0),r=n(1),i=n(106);t.pda_security=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,i.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),i=n(197);t.pda_signaler=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data);return(0,o.createComponentVNode)(2,i.Signaler,{data:a})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_status_display=void 0;var o=n(0),r=n(1),i=n(2);t.pda_status_display=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.records;return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Code",children:[(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"trash",content:"Clear",onClick:function(){return a("Status",{statdisp:"blank"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"clock",content:"Evac ETA",onClick:function(){return a("Status",{statdisp:"shuttle"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"edit",content:"Message",onClick:function(){return a("Status",{statdisp:"message"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"exclamation-triangle",content:"Red Alert",onClick:function(){return a("Status",{statdisp:"alert",alert:"redalert"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"boxes",content:"NT Logo",onClick:function(){return a("Status",{statdisp:"alert",alert:"default"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"lock",content:"Lockdown",onClick:function(){return a("Status",{statdisp:"alert",alert:"lockdown"})}}),(0,o.createComponentVNode)(2,i.Button,{color:"transparent",icon:"biohazard",content:"Biohazard",onClick:function(){return a("Status",{statdisp:"alert",alert:"biohazard"})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message line 1",children:(0,o.createComponentVNode)(2,i.Button,{content:c.message1+" (set)",icon:"pen",onClick:function(){return a("Status",{statdisp:"setmsg1"})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message line 2",children:(0,o.createComponentVNode)(2,i.Button,{content:c.message2+" (set)",icon:"pen",onClick:function(){return a("Status",{statdisp:"setmsg2"})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_supplyrecords=void 0;var o=n(0),r=n(1),i=n(2);t.pda_supplyrecords=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.supply),c=a.shuttle_loc,l=a.shuttle_time,s=a.shuttle_moving,d=a.approved,u=a.approved_count,p=a.requests,m=a.requests_count;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Status",children:s?(0,o.createComponentVNode)(2,i.Box,{children:["In transit ",l]}):(0,o.createComponentVNode)(2,i.Box,{children:c})})}),(0,o.createComponentVNode)(2,i.Section,{mt:1,title:"Requested Orders",children:m>0&&p.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:["#",e.Number,' - "',e.Name,'" for "',e.OrderedBy,'"']},e)}))}),(0,o.createComponentVNode)(2,i.Section,{title:"Approved Orders",children:u>0&&d.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:["#",e.Number,' - "',e.Name,'" for "',e.ApprovedBy,'"']},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.PDAColorRow=t.PDAPainter=void 0;var o=n(0),r=n(1),i=n(3),a=n(2);t.PDAPainter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.statusLabel,u=s.pdaTypes,p=s.hasPDA,m=s.pdaIcon,h=s.pdaOwnerName,f=s.pdaJobName;return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{spacing:1,direction:"row",height:"100%",flex:"1",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:24,shrink:0,children:[(0,o.createComponentVNode)(2,a.Section,{title:"\u041e\u0431\u0449\u0435\u0435",buttons:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:p?"eject":"exclamation-triangle",selected:p,content:p?"\u0418\u0437\u0432\u043b\u0435\u0447\u044c":"-----",tooltip:p?"\u0418\u0437\u0432\u043b\u0435\u0447\u044c PDA":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c PDA",tooltipPosition:"left",onClick:function(){return l(p?"eject_pda":"insert_pda")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0418\u043c\u044f",children:h||"\u041d/\u0414"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c",children:f||"\u041d/\u0414"})]})}),(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",direction:"column",flex:"1",children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Box,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Box,{as:"img",height:"160px",src:p?"data:image/png;base64,"+m:"",style:{"-ms-interpolation-mode":"nearest-neighbor"},align:"middle"})}),(0,o.createComponentVNode)(2,a.LabeledList,{m:"5px",children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"\u0421\u0442\u0430\u0442\u0443\u0441",children:d})}),(0,o.createComponentVNode)(2,a.Button.Confirm,{m:"5px",fluid:!0,disabled:!p,content:"\u0421\u0442\u0435\u0440\u0435\u0442\u044c PDA",confirmContent:"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c?",textAlign:"left",color:"red",tooltip:"C\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043d\u0430 \u0437\u0430\u0432\u043e\u0434\u0441\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438",tooltipPosition:"top",onClick:function(){return l("erase_pda")}})]})})})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:27,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",flex:"1",children:(0,o.createComponentVNode)(2,a.Section,{title:"\u0426\u0432\u0435\u0442 PDA",flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Table,{children:Object.keys(u).map((function(e){return(0,o.createComponentVNode)(2,c,{selectedPda:e,selectedPdaImage:u[e][0]},e)}))})})})})]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),i=n.act,c=n.data.hasPDA,l=e.selectedPda,s=e.selectedPdaImage;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/png;base64,"+s,style:{"vertical-align":"middle",width:"32px",margin:"0px","margin-left":"0px"}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:(0,o.createComponentVNode)(2,a.Button.Confirm,{fluid:!0,disabled:!c,icon:s,content:l,confirmContent:"\u041f\u043e\u043a\u0440\u0430\u0441\u0438\u0442\u044c?",textAlign:"left",onClick:function(){return i("choose_pda",{selectedPda:l,selectedPdaImage:s})}})})]})};t.PDAColorRow=c},function(e,t,n){"use strict";t.__esModule=!0,t.Pacman=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(103);t.Pacman=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.broken,u=s.anchored,p=s.active,m=s.fuel_type,h=s.fuel_usage,f=s.fuel_stored,C=s.fuel_cap,g=s.is_ai,N=s.tmp_current,b=s.tmp_max,V=s.tmp_overheat,v=s.output_max,x=s.power_gen,y=s.output_set,k=s.has_fuel,w=f/C,_=N/b,B=y*x,S=Math.round(f/h),L=Math.round(S/60),A=S>120?L+" minutes":S+" seconds";return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(d||!u)&&(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:[!!d&&(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"The generator is malfunctioning!"}),!d&&!u&&(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"The generator needs to be anchored to the floor with a wrench."})]}),!d&&!!u&&(0,o.createVNode)(1,"div",null,[(0,o.createComponentVNode)(2,i.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:p?"power-off":"times",content:p?"On":"Off",tooltip:"Toggles the generator on/off. Requires fuel.",tooltipPosition:"left",disabled:!k,selected:p,onClick:function(){return l("toggle_power")}}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",className:"ml-1",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power setting",children:[(0,o.createComponentVNode)(2,i.NumberInput,{value:y,minValue:1,maxValue:v,step:1,className:"mt-1",onDrag:function(e,t){return l("change_power",{change_power:t})}}),"(",(0,c.formatPower)(B),")"]})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:_,ranges:{green:[-Infinity,.33],orange:[.33,.66],red:[.66,Infinity]},children:[N," \u2103"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:[V>50&&(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"CRITICAL OVERHEAT!"}),V>20&&V<=50&&(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"WARNING: Overheating!"}),V>1&&V<=20&&(0,o.createComponentVNode)(2,i.Box,{color:"orange",children:"Temperature High"}),0===V&&(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Optimal"})]})]})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Fuel",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"eject",content:"Eject Fuel",tooltip:"Ejects fuel. Generator needs to be offline.",tooltipPosition:"left",disabled:p||g||!k,onClick:function(){return l("eject_fuel")}}),children:(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Type",children:m}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fuel level",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:w,ranges:{red:[-Infinity,.33],orange:[.33,.66],green:[.66,Infinity]},children:[Math.round(f/1e3)," dm\xb3"]})})]})}),(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fuel usage",children:[h/1e3," dm\xb3/s"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Fuel depletion",children:[!!k&&(h?A:"N/A"),!k&&(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3);t.PersonalCrafting=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data,u=d.busy,p=d.category,m=d.display_craftable_only,h=d.display_compact,f=d.prev_cat,C=d.next_cat,g=d.subcategory,N=d.prev_subcat,b=d.next_subcat;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!!u&&(0,o.createComponentVNode)(2,i.Dimmer,{fontSize:"32px",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"cog",spin:1})," Crafting..."]}),(0,o.createComponentVNode)(2,i.Section,{title:p,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"Show Craftable Only",icon:m?"check-square-o":"square-o",selected:m,onClick:function(){return s("toggle_recipes")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Compact Mode",icon:h?"check-square-o":"square-o",selected:h,onClick:function(){return s("toggle_compact")}})],4),children:[(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:f,icon:"arrow-left",onClick:function(){return s("backwardCat")}}),(0,o.createComponentVNode)(2,i.Button,{content:C,icon:"arrow-right",onClick:function(){return s("forwardCat")}})]}),g&&(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{content:N,icon:"arrow-left",onClick:function(){return s("backwardSubCat")}}),(0,o.createComponentVNode)(2,i.Button,{content:b,icon:"arrow-right",onClick:function(){return s("forwardSubCat")}})]}),h?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,l)]})]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.display_craftable_only,s=c.can_craft,d=c.cant_craft;return(0,o.createComponentVNode)(2,i.Box,{mt:1,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[s.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",content:"Craft",onClick:function(){return a("make",{make:e.ref})}}),e.catalyst_text&&(0,o.createComponentVNode)(2,i.Button,{tooltip:e.catalyst_text,content:"Catalysts",color:"transparent"}),(0,o.createComponentVNode)(2,i.Button,{tooltip:e.req_text,content:"Requirements",color:"transparent"}),e.tool_text&&(0,o.createComponentVNode)(2,i.Button,{tooltip:e.tool_text,content:"Tools",color:"transparent"})]},e.name)})),!l&&d.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,children:[(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",content:"Craft",disabled:!0}),e.catalyst_text&&(0,o.createComponentVNode)(2,i.Button,{tooltip:e.catalyst_text,content:"Catalysts",color:"transparent"}),(0,o.createComponentVNode)(2,i.Button,{tooltip:e.req_text,content:"Requirements",color:"transparent"}),e.tool_text&&(0,o.createComponentVNode)(2,i.Button,{tooltip:e.tool_text,content:"Tools",color:"transparent"})]},e.name)}))]})})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.display_craftable_only,s=c.can_craft,d=c.cant_craft;return(0,o.createComponentVNode)(2,i.Box,{mt:1,children:[s.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",content:"Craft",onClick:function(){return a("make",{make:e.ref})}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[e.catalyst_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Catalysts",children:e.catalyst_text}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Requirements",children:e.req_text}),e.tool_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)})),!l&&d.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",content:"Craft",disabled:!0}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[e.catalyst_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Catalysts",children:e.catalyst_text}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Requirements",children:e.req_text}),e.tool_text&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Photocopier=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(24);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 s(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 s(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 s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);ne?this.substring(0,e)+"...":this};t.Photocopier=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data;"mode_aipic"!==d.mode||d.isAI||s("mode_copy");for(var u,p,m=(0,c.sortBy)((function(e){return e.category}))(d.forms||[]),h=[],f=l(m);!(u=f()).done;){var C=u.value;h.includes(C.category)||h.push(C.category)}return p=""===d.category?m:m.filter((function(e){return e.category===d.category})),(0,o.createComponentVNode)(2,a.Window,{theme:d.ui_theme,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",spacing:1,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:24,shrink:0,children:[(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,m:1,children:"\u0421\u0442\u0430\u0442\u0443\u0441"}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0417\u0430\u0440\u044f\u0434 \u0442\u043e\u043d\u0435\u0440\u0430",color:d.toner>0?"good":"bad",children:d.toner}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0421\u043b\u043e\u0442 \u0441\u043a\u0430\u043d\u0435\u0440\u0430",children:(0,o.createComponentVNode)(2,i.Button,{icon:"sign-out-alt",disabled:d.isAI||null===d.copyitem,content:"\u0418\u0437\u0432\u043b\u0435\u0447\u044c",onClick:function(){return s("remove")}})})]}),(0,o.createComponentVNode)(2,i.Box,{bold:!0,m:1,children:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435"}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e",children:[d.copies,(0,o.createComponentVNode)(2,i.Button,{icon:"minus",ml:2,disabled:!(d.copies>1),onClick:function(){return s("min")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"plus",disabled:!(d.copies<=d.toner),onClick:function(){return s("add")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0420\u0435\u0436\u0438\u043c",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"clone",disabled:0===d.toner,content:"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435",selected:"mode_copy"===d.mode?"selected":null,onClick:function(){return s("mode_copy")}}),(0,o.createComponentVNode)(2,i.Button,{icon:"file",disabled:0===d.toner,content:"\u041f\u0435\u0447\u0430\u0442\u044c",selected:"mode_print"===d.mode?"selected":null,onClick:function(){return s("mode_print")}}),!!d.isAI&&(0,o.createComponentVNode)(2,i.Button,{icon:"terminal",disabled:0===d.toner,content:"\u0424\u043e\u0442\u043e \u0438\u0437 \u0414\u0411",selected:"mode_aipic"===d.mode?"selected":null,onClick:function(){return s("mode_aipic")}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c",children:["mode_copy"===d.mode&&(0,o.createComponentVNode)(2,i.Button,{icon:"print",disabled:0===d.toner||null===d.copyitem&&!d.ass,content:"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c",onClick:function(){return s("copy")}}),"mode_print"===d.mode&&(0,o.createComponentVNode)(2,i.Button,{icon:"print",disabled:0===d.toner||null===d.form,content:"\u041f\u0435\u0447\u0430\u0442\u044c",onClick:function(){return s("print_form")}}),"mode_aipic"===d.mode&&(0,o.createComponentVNode)(2,i.Button,{icon:"print",disabled:0===d.toner,content:"\u041f\u0435\u0447\u0430\u0442\u044c \u0444\u043e\u0442\u043e",onClick:function(){return s("aipic")}})]})]})]}),(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,m:1,children:"\u0411\u044e\u0440\u043e\u043a\u0440\u0430\u0442\u0438\u044f"}),(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0424\u043e\u0440\u043c\u0430",children:""===d.form_id?"\u041d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u0430":d.form_id})}),(0,o.createComponentVNode)(2,i.Flex,{direction:"column",mt:2,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"chevron-right",content:"\u0412\u0441\u0435 \u0444\u043e\u0440\u043c\u044b",selected:""===d.category?"selected":null,onClick:function(){return s("choose_category",{category:null})},mb:1})}),h.map((function(e){return(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"chevron-right",content:e,selected:d.category===e?"selected":null,onClick:function(){return s("choose_category",{category:e})},mb:1},e)},e)}))]})]}),(0,o.createComponentVNode)(2,i.NoticeBox,{color:d.info_box_color,children:d.info_box})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:27,children:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,m:1,children:""===d.category?"\u0412\u0441\u0435 \u0444\u043e\u0440\u043c\u044b":d.category}),(0,o.createComponentVNode)(2,i.Flex,{direction:"column",mt:2,children:p.map((function(e){return(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,content:e.id+": "+e.altername.trimLongStr(30),tooltip:e.id+": "+e.altername,selected:d.form===e.path?"selected":null,onClick:function(){return s("choose_form",{path:e.path,id:e.id})},mb:1},e.path)},e.path)}))})]})})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PodTracking=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.PodTracking=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.pods);return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:c.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Position",children:[e.podx,", ",e.pody,", ",e.podz]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pilot",children:e.pilot}),(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3);var c={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,a=function(e,t){if(null==e)return{};var n,o,r={},i=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["tempKey"]),l=c[n];if(!l)return null;var s=(0,r.useBackend)(t),d=s.data,u=s.act,p=d.currentTemp,m=l.label,h=l.icon,f=n===p;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Button,Object.assign({selected:f,onClick:function(){u("setTemp",{temp:n})}},a,{children:[(0,o.createComponentVNode)(2,i.Icon,{name:h}),m]})))};t.PoolController=function(e,t){for(var n=(0,r.useBackend)(t).data,s=n.emagged,d=n.currentTemp,u=c[d]||c.normal,p=u.label,m=u.color,h=[],f=0,C=Object.entries(c);f1100?"purple":e>500?"orange":e>250?"yellow":"green"}(d.reward,p);return(0,o.createComponentVNode)(2,i.Section,{title:"Order from "+d.target_departament,className:"QuestConsoleSection QuestConsoleSection--"+h+" "+(a===d.ref&&"QuestConsoleSection--dimmed")+" "+(d.active&&"QuestConsoleSection--active"),height:"100%",stretchContents:!0,position:"relative",overflow:"clip",onClick:function(){return c(a!==d.ref?d.ref:-1)},children:[!d.fast_bonus||(0,o.createComponentVNode)(2,u,{color:h}),(0,o.createComponentVNode)(2,i.Flex,{className:"QuestConsoleSection__content",direction:"column",height:"calc(100% - 33px)",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Table,{children:l(d.quests_items,(function(e,t,n){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{width:"50%",children:(0,o.createComponentVNode)(2,m,{task:e})}),(0,o.createComponentVNode)(2,i.Table.Cell,{width:"50%",children:t?(0,o.createComponentVNode)(2,m,{task:t}):(0,o.createComponentVNode)(2,i.Box)})]},n)}))})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:1}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Table,{children:(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Box,{fontSize:1.15,children:[(0,o.createVNode)(1,"b",null,"PROFIT:",16)," +",d.reward," ",p?"credits":"points"]})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createVNode)(1,"b",null,"Time left:",16)," ",d.timer]})})]})})})]}),a!==d.ref||(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{fillPositionedParent:!0,backgroundColor:"black",opacity:"0.5",style:{"z-index":"1"}}),d.active?(0,o.createComponentVNode)(2,i.Box,{position:"absolute",top:"50%",left:"50%",textAlign:"center",style:{"z-index":"2",transform:"translate(-50%, -50%)"},children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,fontSize:1.2,children:"The order is already being processed"}),(0,o.createComponentVNode)(2,i.Button,{icon:"print",color:"blue",fontSize:1.2,py:1,px:2,onClick:function(){return s("print_order",{uid:d.ref})},children:"Print"}),(0,o.createComponentVNode)(2,i.Button,{ml:2,icon:"hourglass-half",color:"orange",fontSize:1.2,py:1,px:2,onClick:function(){return s("add_time",{uid:d.ref})},children:"Delay"})]}):(0,o.createComponentVNode)(2,i.Box,{position:"absolute",top:"50%",left:"50%",textAlign:"center",style:{"z-index":"2",transform:"translate(-50%, -50%)"},children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,fontSize:1.3,mb:2,children:"Choose an option:"}),(0,o.createComponentVNode)(2,i.Button,{icon:"check",color:"green",fontSize:1.2,py:1,px:2,onClick:function(){return s("activate",{uid:d.ref})},children:"Take"}),(0,o.createComponentVNode)(2,i.Button,{ml:2,icon:"undo",color:"blue",fontSize:1.2,py:1,px:2,onClick:function(){return s("denied",{uid:d.ref})},children:"Reroll"})]})],0)]})},m=function(e){var t=e.task;return(0,o.createComponentVNode)(2,i.Flex,{align:"center",position:"relative",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"42px",mr:1,children:(0,o.createComponentVNode)(2,i.Box,{position:"relative",children:[(0,o.createComponentVNode)(2,i.Tooltip,{position:"right",content:"Send "+(null==t?void 0:t.quest_type_name)}),(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+(null==t?void 0:t.image),style:{"-ms-interpolation-mode":"nearest-neighbor","vertical-align":"middle",width:"42px",margin:"0px"}})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{style:{"max-width":"180px","white-space":"pre"},children:(0,c.decodeHtmlEntities)(t.desc)})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RCD=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(44),l=n(102);t.RCD=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,c.ComplexModal),(0,o.createComponentVNode)(2,a.Window.Content,{display:"flex",className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})]})};var s=function(e,t){var n=(0,r.useBackend)(t).data,a=n.matter,c=n.max_matter,l=.7*c,s=.25*c;return(0,o.createComponentVNode)(2,i.Section,{title:"Matter Storage",flexBasis:"content",children:(0,o.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[l,Infinity],average:[s,l],bad:[-Infinity,s]},value:a,maxValue:c,children:(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",children:a+" / "+c+" units"})})})},d=function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Construction Type",flexBasis:"content",children:(0,o.createComponentVNode)(2,i.Flex,{children:(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,u,{mode_type:"Floors and Walls"}),(0,o.createComponentVNode)(2,u,{mode_type:"Airlocks"}),(0,o.createComponentVNode)(2,u,{mode_type:"Windows"}),(0,o.createComponentVNode)(2,u,{mode_type:"Deconstruction"}),(0,o.createComponentVNode)(2,u,{mode_type:"Firelocks"})]})})})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=e.mode_type,s=c.mode;return(0,o.createComponentVNode)(2,i.Button.Checkbox,{content:l,checked:s===l?1:0,onClick:function(){return a("mode",{mode:l})}})},p=function(e,t){var n=(0,r.useBackend)(t).data.door_name;return(0,o.createComponentVNode)(2,i.Section,{title:"Airlock Settings",flexBasis:"content",height:5.5,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{color:"silver",label:"Name",children:[n,(0,o.createComponentVNode)(2,i.Button,{ml:2.5,icon:"pen-alt",content:"Edit",onClick:function(){return(0,c.modalOpen)(t,"renameAirlock")}})]})})})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,s=c.tab,d=c.locked,u=c.one_access,p=c.selected_accesses,m=c.regions;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{content:"Airlock Types",icon:"cog",selected:1===s,onClick:function(){return a("set_tab",{tab:1})}}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===s,content:"Airlock Access",icon:"list",onClick:function(){return a("set_tab",{tab:2})}})]}),1===s?(0,o.createComponentVNode)(2,i.Section,{title:"Types",flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",mr:1,children:(0,o.createComponentVNode)(2,h,{check_number:0})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,h,{check_number:1})})]})}):2===s&&d?(0,o.createComponentVNode)(2,i.Section,{title:"Access",flexGrow:"1",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"lock-open",content:"Unlock",onClick:function(){return a("set_lock",{new_lock:"unlock"})}}),children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",textAlign:"center",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"lock",size:"5",mb:3}),(0,o.createVNode)(1,"br"),"Airlock access selection is currently locked."]})})}):(0,o.createComponentVNode)(2,l.AccessList,{sectionFlexGrow:"1",sectionButtons:(0,o.createComponentVNode)(2,i.Button,{icon:"lock",content:"Lock",onClick:function(){return a("set_lock",{new_lock:"lock"})}}),usedByRcd:1,rcdButtons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:u,content:"One",onClick:function(){return a("set_one_access",{access:"one"})}}),(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:!u,width:4,content:"All",onClick:function(){return a("set_one_access",{access:"all"})}})],4),accesses:m,selectedList:p,accessMod:function(e){return a("set",{access:e})},grantAll:function(){return a("grant_all")},denyAll:function(){return a("clear_all")},grantDep:function(e){return a("grant_region",{region:e})},denyDep:function(e){return a("deny_region",{region:e})}})],0)},h=function(e,t){for(var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.door_types_ui_list,s=c.door_type,d=e.check_number,u=[],p=0;p0?"envelope-open-text":"envelope",onClick:function(){return c("setScreen",{setScreen:6})}})}),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:[(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Request Assistance",icon:"hand-paper",onClick:function(){return c("setScreen",{setScreen:1})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Request Supplies",icon:"box",onClick:function(){return c("setScreen",{setScreen:2})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Relay Anonymous Information",icon:"comment",onClick:function(){return c("setScreen",{setScreen:3})}})})]}),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:[(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Print Shipping Label",icon:"tag",onClick:function(){return c("setScreen",{setScreen:9})}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"View Shipping Logs",icon:"clipboard-list",onClick:function(){return c("setScreen",{setScreen:10})}})})]}),!!d&&(0,o.createComponentVNode)(2,i.Box,{mt:2,children:(0,o.createComponentVNode)(2,i.Button,{content:"Send Station-Wide Announcement",icon:"bullhorn",onClick:function(){return c("setScreen",{setScreen:8})}})}),(0,o.createComponentVNode)(2,i.Box,{mt:2,children:(0,o.createComponentVNode)(2,i.Button,{content:u?"Speaker Off":"Speaker On",selected:!u,icon:u?"volume-mute":"volume-up",onClick:function(){return c("toggleSilent")}})})]})},l=function(e,t){var n,a,c=(0,r.useBackend)(t),l=c.act,s=c.data,d=s.department;switch(e.purpose){case"ASSISTANCE":n=s.assist_dept,a="Request assistance from another department";break;case"SUPPLIES":n=s.supply_dept,a="Request supplies from another department";break;case"INFO":n=s.info_dept,a="Relay information to another department"}return(0,o.createComponentVNode)(2,i.Section,{title:a,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return l("setScreen",{setScreen:0})}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:n.filter((function(e){return e!==d})).map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e,children:[(0,o.createComponentVNode)(2,i.Button,{content:"Message",icon:"envelope",onClick:function(){return l("writeInput",{write:e,priority:1})}}),(0,o.createComponentVNode)(2,i.Button,{content:"High Priority",icon:"exclamation-circle",onClick:function(){return l("writeInput",{write:e,priority:2})}})]},e)}))})})},s=function(e,t){var n,a=(0,r.useBackend)(t),c=a.act;a.data;switch(e.type){case"SUCCESS":n="Message sent successfully";break;case"FAIL":n="Request supplies from another department"}return(0,o.createComponentVNode)(2,i.Section,{title:n,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return c("setScreen",{setScreen:0})}})})},d=function(e,t){var n,a,c=(0,r.useBackend)(t),l=c.act,s=c.data;switch(e.type){case"MESSAGES":n=s.message_log,a="Message Log";break;case"SHIPPING":n=s.shipping_log,a="Shipping label print log"}return(0,o.createComponentVNode)(2,i.Section,{title:a,buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return l("setScreen",{setScreen:0})}}),children:n.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{className:"RequestConsole__message",children:e},e)}))})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.recipient,s=c.message,d=c.msgVerified,u=c.msgStamped;return(0,o.createComponentVNode)(2,i.Section,{title:"Message Authentication",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return a("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Recipient",children:l}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Message",children:s}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Validated by",color:"green",children:d}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Stamped by",color:"blue",children:u})]}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,mt:1,textAlign:"center",content:"Send Message",icon:"envelope",onClick:function(){return a("department",{department:l})}})]})},p=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.message,s=c.announceAuth;return(0,o.createComponentVNode)(2,i.Section,{title:"Station-Wide Announcement",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return a("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,i.Button,{content:l||"Edit Message",icon:"edit",onClick:function(){return a("writeAnnouncement")}}),s?(0,o.createComponentVNode)(2,i.Box,{mt:1,color:"green",children:"ID verified. Authentication accepted."}):(0,o.createComponentVNode)(2,i.Box,{mt:1,children:"Swipe your ID card to authenticate yourself."}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,mt:1,textAlign:"center",content:"Send Announcement",icon:"bullhorn",disabled:!(s&&l),onClick:function(){return a("sendAnnouncement")}})]})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.shipDest,s=c.msgVerified,d=c.ship_dept;return(0,o.createComponentVNode)(2,i.Section,{title:"Print Shipping Label",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Back",icon:"arrow-left",onClick:function(){return a("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Destination",children:l}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Validated by",children:s})]}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,mt:1,textAlign:"center",content:"Print Label",icon:"print",disabled:!(l&&s),onClick:function(){return a("printLabel")}}),(0,o.createComponentVNode)(2,i.Section,{title:"Destinations",mt:1,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:d.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e,children:(0,o.createComponentVNode)(2,i.Button,{content:l===e?"Selected":"Select",selected:l===e,onClick:function(){return a("shipSelect",{shipSelect:e})}})},e)}))})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RequestManager=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(3);t.RequestManager=function(e,t){var n=(0,i.useBackend)(t),u=(n.act,n.data.requests),p=(0,i.useLocalState)(t,"filteredTypes",Object.fromEntries(Object.entries(l).map((function(e){var t=e[0];e[1];return[t,!0]})))),m=p[0],h=(p[1],(0,i.useLocalState)(t,"searchText")),f=h[0],C=h[1],g=u.filter((function(e){return m[e.req_type]}));if(f){var N=f.toLowerCase();g=g.filter((function(e){return(0,r.decodeHtmlEntities)(e.message).toLowerCase().includes(N)||e.owner_name.toLowerCase().includes(N)}))}return(0,o.createComponentVNode)(2,c.Window,{title:"Request Manager",width:575,height:600,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Requests",buttons:(0,o.createComponentVNode)(2,a.Input,{value:f,onInput:function(e,t){return C(t)},placeholder:"Search...",mr:1}),children:g.map((function(e){return(0,o.createVNode)(1,"div","RequestManager__row",[(0,o.createVNode)(1,"div","RequestManager__rowContents",[(0,o.createVNode)(1,"h2","RequestManager__header",[(0,o.createVNode)(1,"span","RequestManager__headerText",[e.owner_name,null===e.owner&&" [DC]"],0),(0,o.createVNode)(1,"span","RequestManager__timestamp",e.timestamp_str,0)],4),(0,o.createVNode)(1,"div","RequestManager__message",[(0,o.createComponentVNode)(2,s,{requestType:e.req_type}),(0,r.decodeHtmlEntities)(e.message)],0)],4),null!==e.owner&&(0,o.createComponentVNode)(2,d,{request:e})],0,null,e.id)}))})})})};var l={request_prayer:"PRAYER",request_centcom:"CENTCOM",request_syndicate:"SYNDICATE",request_honk:"HONK",request_ert:"ERT",request_nuke:"NUKE CODE"},s=function(e){var t=e.requestType;return(0,o.createVNode)(1,"b","RequestManager__"+t,[l[t],(0,o.createTextVNode)(":")],0)},d=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=(n._,e.request);return(0,o.createVNode)(1,"div","RequestManager__controlsContainer",[(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("pp",{id:c.id})},children:"PP"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("vv",{id:c.id})},children:"VV"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("sm",{id:c.id})},children:"SM"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("tp",{id:c.id})},children:"TP"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("logs",{id:c.id})},children:"LOGS"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("bless",{id:c.id})},children:"BLESS"}),(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("smite",{id:c.id})},children:"SMITE"}),"request_prayer"!==c.req_type&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("rply",{id:c.id})},children:"RPLY"}),"request_ert"===c.req_type&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("ertreply",{id:c.id})},children:"ERTREPLY"}),"request_nuke"===c.req_type&&(0,o.createComponentVNode)(2,a.Button,{onClick:function(){return r("getcode",{id:c.id})},children:"GETCODE"})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.CurrentLevels=void 0;var o=n(0),r=n(1),i=n(2);t.CurrentLevels=function(e,t){var n=(0,r.useBackend)(t).data.tech_levels;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createVNode)(1,"h3",null,"Current Research Levels:",16),n.map((function(e,t){var n=e.name,r=e.level,a=e.desc;return(0,o.createComponentVNode)(2,i.Box,{children:[t>0?(0,o.createComponentVNode)(2,i.Divider):null,(0,o.createComponentVNode)(2,i.Box,{children:n}),(0,o.createComponentVNode)(2,i.Box,{children:["* Level: ",r]}),(0,o.createComponentVNode)(2,i.Box,{children:["* Summary: ",a]})]},n)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.DataDiskMenu=void 0;var o=n(0),r=n(1),i=n(2),a=n(53),c=n(67),l=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.disk_data;return l?(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:l.name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Level",children:l.level}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:l.desc})]}),(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Upload to Database",icon:"arrow-up",onClick:function(){return c("updt_tech")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Clear Disk",icon:"trash",onClick:function(){return c("clear_tech")}}),(0,o.createComponentVNode)(2,u)]})]}):null},s=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.disk_data;if(!l)return null;var s=l.name,d=l.lathe_types,p=l.materials,m=d.join(", ");return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:s}),m?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Lathe Types",children:m}):null,(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Required Materials"})]}),p.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:["- ",(0,o.createVNode)(1,"span",null,e.name,0,{style:{"text-transform":"capitalize"}})," x ",e.amount]},e.name)})),(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Upload to Database",icon:"arrow-up",onClick:function(){return c("updt_design")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Clear Disk",icon:"trash",onClick:function(){return c("clear_design")}}),(0,o.createComponentVNode)(2,u)]})]})},d=function(e,t){var n=(0,r.useBackend)(t).data.disk_type;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{children:"This disk is empty."}),(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,a.RndNavButton,{submenu:c.SUBMENU.DISK_COPY,icon:"arrow-down",content:"tech"===n?"Load Tech to Disk":"Load Design to Disk"}),(0,o.createComponentVNode)(2,u)]})]})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.disk_type;return l?(0,o.createComponentVNode)(2,i.Button,{content:"Eject Disk",icon:"eject",onClick:function(){c("tech"===l?"eject_tech":"eject_design")}}):null},p=function(e,t){var n=(0,r.useBackend)(t).data,a=n.disk_data,c=n.disk_type;return(0,o.createComponentVNode)(2,i.Section,{title:"Data Disk Contents",children:function(){if(!a)return(0,o.createComponentVNode)(2,d);switch(c){case"design":return(0,o.createComponentVNode)(2,s);case"tech":return(0,o.createComponentVNode)(2,l);default:return null}}()})},m=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.disk_type,s=a.to_copy;return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Box,{overflowY:"auto",overflowX:"hidden",maxHeight:"450px",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:s.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,i.LabeledList.Item,{noColon:!0,label:t,children:(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",content:"Copy to Disk",onClick:function(){c("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,a.RndRoute,{submenu:c.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,p)}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:c.SUBMENU.DISK_COPY,render:function(){return(0,o.createComponentVNode)(2,m)}})],4):null}},function(e,t,n){"use strict";t.__esModule=!0,t.DeconstructionMenu=void 0;var o=n(0),r=n(1),i=n(2);t.DeconstructionMenu=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.loaded_item;return a.linked_destroy?l?(0,o.createComponentVNode)(2,i.Section,{noTopPadding:!0,title:"Deconstruction Menu",children:[(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:["Name: ",l.name]}),(0,o.createComponentVNode)(2,i.Box,{mt:"10px",children:(0,o.createVNode)(1,"h3",null,"Origin Tech:",16)}),(0,o.createComponentVNode)(2,i.LabeledList,{children:l.origin_tech.map((function(e){return(0,o.createComponentVNode)(2,i.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,i.Box,{mt:"10px",children:(0,o.createVNode)(1,"h3",null,"Options:",16)}),(0,o.createComponentVNode)(2,i.Button,{content:"Deconstruct Item",icon:"unlink",onClick:function(){c("deconstruct")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Eject Item",icon:"eject",onClick:function(){c("eject_item")}})]}):(0,o.createComponentVNode)(2,i.Section,{title:"Deconstruction Menu",children:"No item loaded. Standing by..."}):(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(53);t.LatheCategory=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,s=c.category,d=c.matching_designs,u=4===c.menu?"build":"imprint";return(0,o.createComponentVNode)(2,i.Section,{title:s,children:[(0,o.createComponentVNode)(2,a.LatheMaterials),(0,o.createComponentVNode)(2,i.Table,{className:"RndConsole__LatheCategory__MatchingDesigns",children:d.map((function(e){var t=e.id,n=e.name,r=e.can_build,a=e.materials;return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"print",content:n,disabled:r<1,onClick:function(){return l(u,{id:t,amount:1})}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:r>=5?(0,o.createComponentVNode)(2,i.Button,{content:"x5",onClick:function(){return l(u,{id:t,amount:5})}}):null}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:r>=10?(0,o.createComponentVNode)(2,i.Button,{content:"x10",onClick:function(){return l(u,{id:t,amount:10})}}):null}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:a.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),i=n(2);t.LatheChemicalStorage=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.loaded_chemicals,s=4===a.menu;return(0,o.createComponentVNode)(2,i.Section,{title:"Chemical Storage",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Purge All",icon:"trash",onClick:function(){c(s?"disposeallP":"disposeallI")}}),(0,o.createComponentVNode)(2,i.LabeledList,{children:l.map((function(e){var t=e.volume,n=e.name,r=e.id;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"* "+t+" of "+n,children:(0,o.createComponentVNode)(2,i.Button,{content:"Purge",icon:"trash",onClick:function(){c(s?"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),i=n(2),a=n(53);t.LatheMainMenu=function(e,t){var n=(0,r.useBackend)(t),c=n.data,l=n.act,s=c.menu,d=c.categories,u=4===s?"Protolathe":"Circuit Imprinter";return(0,o.createComponentVNode)(2,i.Section,{title:u+" Menu",children:[(0,o.createComponentVNode)(2,a.LatheMaterials),(0,o.createComponentVNode)(2,a.LatheSearch),(0,o.createComponentVNode)(2,i.Divider),(0,o.createComponentVNode)(2,i.Flex,{wrap:"wrap",children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Flex,{style:{"flex-basis":"50%","margin-bottom":"6px"},children:(0,o.createComponentVNode)(2,i.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),i=n(2);t.LatheMaterials=function(e,t){var n=(0,r.useBackend)(t).data,a=n.total_materials,c=n.max_materials,l=n.max_chemicals,s=n.total_chemicals;return(0,o.createComponentVNode)(2,i.Box,{className:"RndConsole__LatheMaterials",mb:"10px",children:(0,o.createComponentVNode)(2,i.Table,{width:"auto",children:[(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Material Amount:"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:a}),c?(0,o.createComponentVNode)(2,i.Table.Cell,{children:" / "+c}):null]}),(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:"Chemical Amount:"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:s}),l?(0,o.createComponentVNode)(2,i.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),i=n(2);t.LatheMaterialStorage=function(e,t){var n=(0,r.useBackend)(t),a=n.data,c=n.act,l=a.loaded_materials;return(0,o.createComponentVNode)(2,i.Section,{className:"RndConsole__LatheMaterialStorage",title:"Material Storage",children:(0,o.createComponentVNode)(2,i.Table,{children:l.map((function(e){var t=e.id,n=e.amount,r=e.name,l=function(e){var n=4===a.menu?"lathe_ejectsheet":"imprinter_ejectsheet";c(n,{id:t,amount:e})},s=Math.floor(n/2e3),d=n<1,u=1===s?"":"s";return(0,o.createComponentVNode)(2,i.Table.Row,{className:d?"color-grey":"color-yellow",children:[(0,o.createComponentVNode)(2,i.Table.Cell,{minWidth:"210px",children:["* ",n," of ",r]}),(0,o.createComponentVNode)(2,i.Table.Cell,{minWidth:"110px",children:["(",s," sheet",u,")"]}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:n>=2e3?(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:"1x",icon:"eject",onClick:function(){return l(1)}}),(0,o.createComponentVNode)(2,i.Button,{content:"C",icon:"eject",onClick:function(){return l("custom")}}),n>=1e4?(0,o.createComponentVNode)(2,i.Button,{content:"5x",icon:"eject",onClick:function(){return l(5)}}):null,(0,o.createComponentVNode)(2,i.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),i=n(199),a=n(53),c=n(2),l=n(67);t.LatheMenu=function(e,t){var n=(0,r.useBackend)(t).data,s=n.menu,d=n.linked_lathe,u=n.linked_imprinter;return 4!==s||d?5!==s||u?(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,i.RndRoute,{submenu:l.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,a.LatheMainMenu)}}),(0,o.createComponentVNode)(2,i.RndRoute,{submenu:l.SUBMENU.LATHE_CATEGORY,render:function(){return(0,o.createComponentVNode)(2,a.LatheCategory)}}),(0,o.createComponentVNode)(2,i.RndRoute,{submenu:l.SUBMENU.LATHE_MAT_STORAGE,render:function(){return(0,o.createComponentVNode)(2,a.LatheMaterialStorage)}}),(0,o.createComponentVNode)(2,i.RndRoute,{submenu:l.SUBMENU.LATHE_CHEM_STORAGE,render:function(){return(0,o.createComponentVNode)(2,a.LatheChemicalStorage)}})]}):(0,o.createComponentVNode)(2,c.Box,{children:"NO CIRCUIT IMPRITER LINKED TO CONSOLE"}):(0,o.createComponentVNode)(2,c.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),i=n(2);t.LatheSearch=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(53),c=n(67);t.MainMenu=function(e,t){var n=(0,r.useBackend)(t).data,l=n.disk_type,s=n.linked_destroy,d=n.linked_lathe,u=n.linked_imprinter,p=n.tech_levels;return(0,o.createComponentVNode)(2,i.Section,{title:"Main Menu",children:[(0,o.createComponentVNode)(2,i.Flex,{className:"RndConsole__MainMenu__Buttons",direction:"column",align:"flex-start",children:[(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!l,menu:c.MENU.DISK,submenu:c.SUBMENU.MAIN,icon:"save",content:"Disk Operations"}),(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!s,menu:c.MENU.DESTROY,submenu:c.SUBMENU.MAIN,icon:"unlink",content:"Destructive Analyzer Menu"}),(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!d,menu:c.MENU.LATHE,submenu:c.SUBMENU.MAIN,icon:"print",content:"Protolathe Menu"}),(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!u,menu:c.MENU.IMPRINTER,submenu:c.SUBMENU.MAIN,icon:"print",content:"Circuit Imprinter Menu"}),(0,o.createComponentVNode)(2,a.RndNavButton,{menu:c.MENU.SETTINGS,submenu:c.SUBMENU.MAIN,icon:"cog",content:"Settings"})]}),(0,o.createComponentVNode)(2,i.Box,{mt:"12px"}),(0,o.createVNode)(1,"h3",null,"Current Research Levels:",16),(0,o.createComponentVNode)(2,i.LabeledList,{children:p.map((function(e){var t=e.name,n=e.level;return(0,o.createComponentVNode)(2,i.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(53),i=n(2),a=n(67);t.RndNavbar=function(){return(0,o.createComponentVNode)(2,i.Box,{className:"RndConsole__RndNavbar",children:[(0,o.createComponentVNode)(2,r.RndRoute,{menu:function(e){return e!==a.MENU.MAIN},render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{menu:a.MENU.MAIN,submenu:a.SUBMENU.MAIN,icon:"reply",content:"Main Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{submenu:function(e){return e!==a.SUBMENU.MAIN},render:function(){return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,r.RndRoute,{menu:a.MENU.DISK,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.MAIN,icon:"reply",content:"Disk Operations Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:a.MENU.LATHE,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.MAIN,icon:"reply",content:"Protolathe Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:a.MENU.IMPRINTER,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.MAIN,icon:"reply",content:"Circuit Imprinter Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:a.MENU.SETTINGS,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.MAIN,icon:"reply",content:"Settings Menu"})}})]})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:function(e){return e===a.MENU.LATHE||e===a.MENU.IMPRINTER},submenu:a.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.SUBMENU.LATHE_MAT_STORAGE,icon:"arrow-up",content:"Material Storage"}),(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:a.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),i=n(2);t.RndNavButton=function(e,t){var n=e.icon,a=e.children,c=e.disabled,l=e.content,s=(0,r.useBackend)(t),d=s.data,u=s.act,p=d.menu,m=d.submenu,h=p,f=m;return null!==e.menu&&e.menu!==undefined&&(h=e.menu),null!==e.submenu&&e.submenu!==undefined&&(f=e.submenu),(0,o.createComponentVNode)(2,i.Button,{content:l,icon:n,disabled:c,onClick:function(){u("nav",{menu:h,submenu:f})},children:a})}},function(e,t,n){"use strict";t.__esModule=!0,t.SettingsMenu=void 0;var o=n(0),r=n(1),i=n(2),a=n(53),c=n(67);t.SettingsMenu=function(e,t){var n=(0,r.useBackend)(t),l=n.data,s=n.act,d=l.sync,u=l.admin,p=l.linked_destroy,m=l.linked_lathe,h=l.linked_imprinter;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,a.RndRoute,{submenu:c.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Settings",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",align:"flex-start",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Sync Database with Network",icon:"sync",disabled:!d,onClick:function(){s("sync")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Connect to Research Network",icon:"plug",disabled:d,onClick:function(){s("togglesync")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:!d,icon:"unlink",content:"Disconnect from Research Network",onClick:function(){s("togglesync")}}),(0,o.createComponentVNode)(2,a.RndNavButton,{disabled:!d,content:"Device Linkage Menu",icon:"link",menu:c.MENU.SETTINGS,submenu:c.SUBMENU.SETTINGS_DEVICES}),1===u?(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation",content:"[ADMIN] Maximize Research Levels",onClick:function(){return s("maxresearch")}}):null]})})}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:c.SUBMENU.SETTINGS_DEVICES,render:function(){return(0,o.createComponentVNode)(2,i.Section,{title:"Device Linkage Menu",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"link",content:"Re-sync with Nearby Devices",onClick:function(){return s("find_device")}}),(0,o.createComponentVNode)(2,i.Box,{mt:"5px",children:(0,o.createVNode)(1,"h3",null,"Linked Devices:",16)}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[p?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"* Destructive Analyzer",children:(0,o.createComponentVNode)(2,i.Button,{icon:"unlink",content:"Unlink",onClick:function(){return s("disconnect",{item:"destroy"})}})}):(0,o.createComponentVNode)(2,i.LabeledList.Item,{noColon:!0,label:"* No Destructive Analyzer Linked"}),m?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"* Protolathe",children:(0,o.createComponentVNode)(2,i.Button,{icon:"unlink",content:"Unlink",onClick:function(){s("disconnect",{item:"lathe"})}})}):(0,o.createComponentVNode)(2,i.LabeledList.Item,{noColon:!0,label:"* No Protolathe Linked"}),h?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"* Circuit Imprinter",children:(0,o.createComponentVNode)(2,i.Button,{icon:"unlink",content:"Unlink",onClick:function(){return s("disconnect",{item:"imprinter"})}})}):(0,o.createComponentVNode)(2,i.LabeledList.Item,{noColon:!0,label:"* No Circuit Imprinter Linked"})]})]})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RobotSelfDiagnosis=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(18),l=function(e,t){var n=e/t;return n<=.2?"good":n<=.5?"average":"bad"};t.RobotSelfDiagnosis=function(e,t){var n=(0,r.useBackend)(t).data.component_data;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:n.map((function(e,t){return(0,o.createComponentVNode)(2,i.Section,{title:(0,c.capitalize)(e.name),children:e.installed<=0?(0,o.createComponentVNode)(2,i.NoticeBox,{m:-.5,height:3.5,color:"red",style:{"font-style":"normal"},children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,textAlign:"center",align:"center",color:"#e8e8e8",children:-1===e.installed?"Destroyed":"Missing"})})}):(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"72%",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Brute Damage",color:l(e.brute_damage,e.max_damage),children:e.brute_damage}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Burn Damage",color:l(e.electronic_damage,e.max_damage),children:e.electronic_damage})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Powered",color:e.powered?"good":"bad",children:e.powered?"Yes":"No"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Enabled",color:e.status?"good":"bad",children:e.status?"Yes":"No"})]})})]})},t)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.RoboticsControlConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.RoboticsControlConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.can_hack,u=s.safety,p=s.show_detonate_all,m=s.cyborgs,h=void 0===m?[]:m;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!!p&&(0,o.createComponentVNode)(2,i.Section,{title:"Emergency Self Destruct",children:[(0,o.createComponentVNode)(2,i.Button,{icon:u?"lock":"unlock",content:u?"Disable Safety":"Enable Safety",selected:u,onClick:function(){return l("arm",{})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"bomb",disabled:u,content:"Destroy ALL Cyborgs",color:"bad",onClick:function(){return l("nuke",{})}})]}),(0,o.createComponentVNode)(2,c,{cyborgs:h,can_hack:d})]})})};var c=function(e,t){var n=e.cyborgs,a=(e.can_hack,(0,r.useBackend)(t)),c=a.act,l=a.data;return n.length?n.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,buttons:(0,o.createFragment)([!!e.hackable&&!e.emagged&&(0,o.createComponentVNode)(2,i.Button,{icon:"terminal",content:"Hack",color:"bad",onClick:function(){return c("hackbot",{uid:e.uid})}}),(0,o.createComponentVNode)(2,i.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 c("stopbot",{uid:e.uid})}}),(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"bomb",content:"Detonate",disabled:!l.auth,color:"bad",onClick:function(){return c("killbot",{uid:e.uid})}})],0),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,i.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,i.LabeledList.Item,{label:"Location",children:(0,o.createComponentVNode)(2,i.Box,{children:e.locstring})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:e.health>50?"good":"bad",value:e.health/100})}),"number"==typeof e.charge&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cell Charge",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:e.charge>30?"good":"bad",value:e.charge/100})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cell Capacity",children:(0,o.createComponentVNode)(2,i.Box,{color:e.cell_capacity<3e4?"average":"good",children:e.cell_capacity})})],4)||(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Cell",children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"No Power Cell"})}),!!e.is_hacked&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Safeties",children:(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"DISABLED"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Module",children:e.module}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Master AI",children:(0,o.createComponentVNode)(2,i.Box,{color:e.synchronization?"default":"average",children:e.synchronization||"None"})})]})},e.uid)})):(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3);t.Safe=function(e,t){var n=(0,r.useBackend)(t),d=(n.act,n.data),u=d.dial,p=d.open;d.locked,d.contents;return(0,o.createComponentVNode)(2,a.Window,{theme:"safe",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Box,{className:"Safe--engraving",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Box,{className:"Safe--engraving--hinge",top:"25%"}),(0,o.createComponentVNode)(2,i.Box,{className:"Safe--engraving--hinge",top:"75%"})]}),(0,o.createComponentVNode)(2,i.Icon,{className:"Safe--engraving--arrow",name:"long-arrow-alt-down",size:"3"}),(0,o.createVNode)(1,"br"),p?(0,o.createComponentVNode)(2,l):(0,o.createComponentVNode)(2,i.Box,{as:"img",className:"Safe--dial",src:"safe_dial.png",style:{transform:"rotate(-"+3.6*u+"deg)","z-index":0}})]}),!p&&(0,o.createComponentVNode)(2,s)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.dial,s=c.open,d=c.locked,u=function(e,t){return(0,o.createComponentVNode)(2,i.Button,{disabled:s||t&&!d,icon:"arrow-"+(t?"right":"left"),content:(t?"Right":"Left")+" "+e,iconRight:t,onClick:function(){return a(t?"turnleft":"turnright",{num:e})},style:{"z-index":10}})};return(0,o.createComponentVNode)(2,i.Box,{className:"Safe--dialer",children:[(0,o.createComponentVNode)(2,i.Button,{disabled:d,icon:s?"lock":"lock-open",content:s?"Close":"Open",mb:"0.5rem",onClick:function(){return a("open")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,i.Box,{position:"absolute",children:[u(50),u(10),u(1)]}),(0,o.createComponentVNode)(2,i.Box,{className:"Safe--dialer--right",position:"absolute",right:"5px",children:[u(1,!0),u(10,!0),u(50,!0)]}),(0,o.createComponentVNode)(2,i.Box,{className:"Safe--dialer--number",children:l})]})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.contents;return(0,o.createComponentVNode)(2,i.Box,{className:"Safe--contents",overflow:"auto",children:c.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{mb:"0.5rem",onClick:function(){return a("retrieve",{index:t+1})},children:[(0,o.createComponentVNode)(2,i.Box,{as:"img",src:e.sprite+".png",verticalAlign:"middle",ml:"-6px",mr:"0.5rem"}),e.name]}),(0,o.createVNode)(1,"br")],4,e)}))})},s=function(e,t){return(0,o.createComponentVNode)(2,i.Section,{className:"Safe--help",title:"Safe opening instructions (because you all keep forgetting)",children:[(0,o.createComponentVNode)(2,i.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,i.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),i=n(2),a=n(3);t.SatelliteControl=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.satellites,d=l.notice,u=l.meteor_shield,p=l.meteor_shield_coverage,m=l.meteor_shield_coverage_max,h=l.meteor_shield_coverage_percentage;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[u&&(0,o.createComponentVNode)(2,i.Section,{title:"Station Shield Coverage",children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:h>=100?"good":"average",value:p,maxValue:m,children:[h," %"]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Satellite Network Control",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[d&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Alert",color:"red",children:l.notice}),s.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"#"+e.id,children:[e.mode," ",(0,o.createComponentVNode)(2,i.Button,{content:e.active?"Deactivate":"Activate",icon:"arrow-circle-right",onClick:function(){return c("toggle",{id:e.id})}})]},e.id)}))]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SecureStorage=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.SecureStorage=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.emagged,d=l.locked,u=l.l_set,p=l.l_setshort,m=l.current_code,h=function(e){var t=e.buttonValue,n=e.color;return n||(n="default"),(0,o.createComponentVNode)(2,i.Button,{disabled:s||p,type:"button",color:n,onClick:function(){return c("setnumber",{buttonValue:t})},children:t})};return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,i.Flex,{spacing:"1",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:16,shrink:0,textAlign:"center",children:(0,o.createComponentVNode)(2,i.Section,{title:"Code Panel",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,h,{buttonValue:"1"}),(0,o.createComponentVNode)(2,h,{buttonValue:"2"}),(0,o.createComponentVNode)(2,h,{buttonValue:"3"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,h,{buttonValue:"4"}),(0,o.createComponentVNode)(2,h,{buttonValue:"5"}),(0,o.createComponentVNode)(2,h,{buttonValue:"6"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,h,{buttonValue:"7"}),(0,o.createComponentVNode)(2,h,{buttonValue:"8"}),(0,o.createComponentVNode)(2,h,{buttonValue:"9"})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,h,{buttonValue:"R",color:"red"}),(0,o.createComponentVNode)(2,h,{buttonValue:"0"}),(0,o.createComponentVNode)(2,h,{buttonValue:"E",color:"green"})]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Current Status",children:s||p?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Lock Status",children:(0,o.createComponentVNode)(2,i.Box,{color:"red",children:s?"LOCKING SYSTEM ERROR - 1701":"ALERT: MEMORY SYSTEM ERROR - 6040 201"})}),s?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Input Code",children:(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"NEW INPUT, ASSHOLE"})}):""]}):(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Secure Code",children:(0,o.createComponentVNode)(2,i.Box,{color:u?"red":"green",children:u?"*****":"NOT SET. ENTER NEW."})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Lock Status",children:(0,o.createComponentVNode)(2,i.Box,{color:d?"red":"green",children:d?"Locked":"Unlocked"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Input Code",children:(0,o.createComponentVNode)(2,i.Box,{children:m||"Waiting for input"})}),(0,o.createComponentVNode)(2,i.Button,{top:".35em",left:".5em",disabled:d,color:"red",content:"Lock",icon:"lock",onClick:function(){return c("close")}})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SecurityRecords=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(51),l=n(3),s=n(44),d=n(100),u=n(101),p=n(145),m={"*Execute*":"execute","*Arrest*":"arrest",Incarcerated:"incarcerated",Parolled:"parolled",Released:"released",Demote:"demote",Search:"search",Monitor:"monitor"},h=function(e,t){(0,s.modalOpen)(e,"edit",{field:t.edit,value:t.value})};t.SecurityRecords=function(e,t){var n,r=(0,i.useBackend)(t),c=(r.act,r.data),m=c.loginState,h=c.currentPage;return m.logged_in?(1===h?n=(0,o.createComponentVNode)(2,C):2===h?n=(0,o.createComponentVNode)(2,b):3===h&&(n=(0,o.createComponentVNode)(2,V)),(0,o.createComponentVNode)(2,l.Window,{theme:"security",resizable:!0,children:[(0,o.createComponentVNode)(2,s.ComplexModal),(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,d.LoginInfo),(0,o.createComponentVNode)(2,p.TemporaryNotice),(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,a.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,u.LoginScreen)})})};var f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.currentPage,s=c.general;return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===l,onClick:function(){return r("page",{page:1})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"list"}),"List Records"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===l,onClick:function(){return r("page",{page:2})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"wrench"}),"Record Maintenance"]}),3===l&&s&&!s.empty&&(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:3===l,children:[(0,o.createComponentVNode)(2,a.Icon,{name:"file"}),"Record: ",s.fields[0].value]})]})},C=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data.records,s=(0,i.useLocalState)(t,"searchText",""),d=s[0],u=(s[1],(0,i.useLocalState)(t,"sortId","name")),p=u[0],h=(u[1],(0,i.useLocalState)(t,"sortOrder",!0)),f=h[0];h[1];return(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,N),(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",mt:"0.5rem",children:(0,o.createComponentVNode)(2,a.Table,{className:"SecurityRecords__list",children:[(0,o.createComponentVNode)(2,a.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,g,{id:"name",children:"Name"}),(0,o.createComponentVNode)(2,g,{id:"id",children:"ID"}),(0,o.createComponentVNode)(2,g,{id:"rank",children:"Assignment"}),(0,o.createComponentVNode)(2,g,{id:"fingerprint",children:"Fingerprint"}),(0,o.createComponentVNode)(2,g,{id:"status",children:"Criminal Status"})]}),l.filter((0,r.createSearch)(d,(function(e){return e.name+"|"+e.id+"|"+e.rank+"|"+e.fingerprint+"|"+e.status}))).sort((function(e,t){var n=f?1:-1;return e[p].localeCompare(t[p])*n})).map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{className:"SecurityRecords__listRow--"+m[e.status],onClick:function(){return c("view",{uid_gen:e.uid_gen,uid_sec:e.uid_sec})},children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user"})," ",e.name]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.id}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.rank}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.fingerprint}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.status})]},e.id)}))]})})]})},g=function(e,t){var n=(0,i.useLocalState)(t,"sortId","name"),r=n[0],c=n[1],l=(0,i.useLocalState)(t,"sortOrder",!0),s=l[0],d=l[1],u=e.id,p=e.children;return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{color:r!==u&&"transparent",width:"100%",onClick:function(){r===u?d(!s):(c(u),d(!0))},children:[p,r===u&&(0,o.createComponentVNode)(2,a.Icon,{name:s?"sort-up":"sort-down",ml:"0.25rem;"})]})})},N=function(e,t){var n=(0,i.useBackend)(t),r=n.act,l=n.data.isPrinting,d=(0,i.useLocalState)(t,"searchText",""),u=(d[0],d[1]);return(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,c.FlexItem,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"New Record",icon:"plus",onClick:function(){return r("new_general")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:l,icon:l?"spinner":"print",iconSpin:!!l,content:"Print Cell Log",ml:"0.25rem",onClick:function(){return(0,s.modalOpen)(t,"print_cell_log")}})]}),(0,o.createComponentVNode)(2,c.FlexItem,{grow:"1",ml:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search by Name, ID, Assignment, Fingerprint, Status",width:"100%",onInput:function(e,t){return u(t)}})})]})},b=function(e,t){var n=(0,i.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.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,a.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,a.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,a.Button.Confirm,{icon:"trash",content:"Delete All Cell Logs",onClick:function(){return n("delete_cell_logs")}})]})},V=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.isPrinting,s=c.general,d=c.security;return s&&s.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"General Data",level:2,mt:"-6px",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:l,icon:l?"spinner":"print",iconSpin:!!l,content:"Print Record",onClick:function(){return r("print_record")}}),(0,o.createComponentVNode)(2,a.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,a.Section,{title:"Security Data",level:2,mt:"-12px",buttons:(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",disabled:d.empty,content:"Delete Record",onClick:function(){return r("delete_security")}}),children:(0,o.createComponentVNode)(2,x)})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"General records lost!"})},v=function(e,t){var n=(0,i.useBackend)(t).data.general;return n&&n.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{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,prewrap:!0,children:[(0,r.decodeHtmlEntities)(""+e.value),!!e.edit&&(0,o.createComponentVNode)(2,a.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return h(t,e)}})]},n)}))})}),(0,o.createComponentVNode)(2,a.Box,{position:"absolute",right:"0",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!"})},x=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data.security;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,prewrap:!0,children:[(0,r.decodeHtmlEntities)(e.value),!!e.edit&&(0,o.createComponentVNode)(2,a.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return h(t,e)}})]},n)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Comments/Log",level:2,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"comment",content:"Add Entry",onClick:function(){return(0,s.modalOpen)(t,"comment_add")}}),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,{prewrap:!0,children:[(0,o.createComponentVNode)(2,a.Box,{color:"label",display:"inline",children:e.header||"Auto-generated"}),(0,o.createVNode)(1,"br"),e.text||e,(0,o.createComponentVNode)(2,a.Button,{icon:"comment-slash",color:"bad",ml:"0.5rem",onClick:function(){return c("comment_delete",{id:t+1})}})]},t)}))})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["Security records lost!",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"pen",content:"Create New Record",mt:"0.5rem",onClick:function(){return c("new_security")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.SeedExtractor=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(3),l={title:"Seeds",plantName:"Plant",lifespan:"Lifespan",endurance:"Endurance",maturation:"Maturation",production:"Production",yield:"Yield",potency:"Potency",searchTooltip:"Search..",sortByTooltip:"Sort by",dispOneTooltip:"Dispense one",dispAllTooltip:"Dispense all",inStock:"in stock",noContents:"No seeds loaded.",emptySearchResult:"No items matching your criteria was found!"},s={plantName:function(e,t){return e.display_name!==t.display_name?e.display_name>t.display_name?1:-1:0},lifespan:function(e,t){return e.life-t.life},endurance:function(e,t){return e.endr-t.endr},maturation:function(e,t){return e.matr-t.matr},production:function(e,t){return e.prod-t.prod},yield:function(e,t){return e.yld-t.yld},potency:function(e,t){return e.potn-t.potn}};t.SeedExtractor=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.data),s=r.total,d=r.capacity,h=r.contents;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,a.Section,{title:l.title,buttons:(0,o.createComponentVNode)(2,u),m:0,p:0,children:(0,o.createComponentVNode)(2,p,{seedsTotal:s,seedsCapacity:d})}),h?(0,o.createVNode)(1,"div","Divider Divider__noMargin"):(0,o.createComponentVNode)(2,a.NoticeBox,{m:0,children:[" ",l.noContents," "]}),(0,o.createComponentVNode)(2,a.Section,{flexGrow:1,stretchContents:!0,mt:0,children:!!h&&(0,o.createComponentVNode)(2,m)})]})})};var d=function(e,t){var n=e.name,r=e.alpha,c=(0,i.useLocalState)(t,"sort",{field:"plantName",desc:!1}),s=c[0],d=c[1];return(0,o.createComponentVNode)(2,a.Button,{fluid:!0,iconRight:!0,icon:s.field!==n?"":s.desc?r?"sort-alpha-down":"sort-amount-down":r?"sort-alpha-up":"sort-amount-up",color:"transparent",textColor:"white",content:l[n],tooltip:l.sortByTooltip+" "+n.toLowerCase(),tooltipPosition:"bottom",onClick:function(){s.field!==e.name?d({field:n,desc:!1}):d({field:n,desc:!s.desc})}})},u=function(e,t){var n=(0,i.useLocalState)(t,"search",""),r=(n[0],n[1]);return(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",width:"50vw",style:{display:"block"},children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mx:1,align:"center",children:(0,o.createComponentVNode)(2,a.Icon,{name:"filter"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",mr:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:l.searchTooltip,width:"100%",onInput:function(e,t){return r(t)}})})]})})},p=function(e,t){var n=e.seedsTotal,r=e.seedsCapacity;return(0,o.createComponentVNode)(2,a.Flex,{direction:"row",textAlign:"center",bold:!0,align:"baseline",mt:0,children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"15vw",children:(0,o.createComponentVNode)(2,d,{name:"plantName",alpha:!0})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"65vw",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"lifespan"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"endurance"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"maturation"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"production"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"yield"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:(0,o.createComponentVNode)(2,d,{name:"potency"})})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,color:"average",children:[n,"/",r]})]})},m=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data.contents),d=(0,i.useLocalState)(t,"search",""),u=d[0],p=(d[1],(0,i.useLocalState)(t,"sort",{field:"plantName",desc:!1})),m=p[0],f=(p[1],(0,r.createSearch)(u,(function(e){return e.display_name+e.strain_text}))),C=c.filter(f).sort(s[m.field]);m.desc&&(C=C.reverse());var g=0===C.length;return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,children:[!!g&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:[" ",l.emptySearchResult," "]}),!g&&(0,o.createComponentVNode)(2,a.Box,{className:"SeedExtractor__Contents",children:C.map((function(e){return(0,o.createComponentVNode)(2,h,{displayName:e.display_name,descriptionText:e.strain_text,lifespanVal:e.life,enduranceVal:e.endr,maturationVal:e.life,productionVal:e.prod,yieldVal:e.yld,potencyVal:e.potn,vendIdx:e.vend,pileStock:e.quantity},e.vend)}))})]})},h=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=(n.data,e.key,e.displayName),s=e.descriptionText,d=e.lifespanVal,u=e.enduranceVal,p=e.maturationVal,m=e.productionVal,h=e.yieldVal,f=e.potencyVal,C=e.vendIdx,g=e.pileStock;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex,{direction:"row",textAlign:"center",className:"SeedExtractor__contents--row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"15vw",textAlign:"left",bold:!0,children:(0,o.createComponentVNode)(2,a.Box,{m:1,children:c})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"65vw",py:1,children:(0,o.createVNode)(1,"table",null,[(0,o.createVNode)(1,"tr",null,(0,o.createVNode)(1,"td",null,(0,o.createComponentVNode)(2,a.Flex,{direction:"row",textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:d}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:u}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:p}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:m}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:h}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,children:f})]}),2),2),(0,o.createVNode)(1,"tr",null,(0,o.createVNode)(1,"td",null,s,0,{style:{"font-size":"90%","padding-top":"0.5em"}}),2)],4,{style:{width:"100%",border:"0"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:0,grow:1,shrink:1,py:1,children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{color:"good",children:[g," ",l.inStock]}),(0,o.createComponentVNode)(2,a.Flex.Item,{minHeight:"25px",pt:1,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",content:"1",tooltip:"Dispense one",tooltipPosition:"bottom-left",onClick:function(){return r("vend",{index:C,amount:1})}}),(0,o.createComponentVNode)(2,a.NumberInput,{width:"40px",minValue:0,value:0,maxValue:g,step:1,stepPixelSize:3,onChange:function(e,t){return r("vend",{index:C,amount:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",content:"All",tooltip:"Dispense all",tooltipPosition:"bottom-left",onClick:function(){return r("vend",{index:C,amount:g})}})]})]})})]}),(0,o.createComponentVNode)(2,a.Divider)],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleConsoleContent=t.ShuttleConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ShuttleConsole=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=e.type,u=void 0===s?"shuttle":s,p=e.blind_drop,m=l.authorization_required;return(0,o.createComponentVNode)(2,a.Window,{width:350,height:240,children:[!!m&&(0,o.createComponentVNode)(2,i.Modal,{ml:1,mt:1,width:26,height:12,fontSize:"28px",fontFamily:"monospace",textAlign:"center",children:[(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{mt:2,children:(0,o.createComponentVNode)(2,i.Icon,{name:"minus-circle"})}),(0,o.createComponentVNode)(2,i.Flex.Item,{mt:2,ml:2,color:"bad",children:"shuttle"===u?"SHUTTLE LOCKED":"BASE LOCKED"})]}),(0,o.createComponentVNode)(2,i.Box,{fontSize:"18px",mt:4,children:(0,o.createComponentVNode)(2,i.Button,{lineHeight:"40px",icon:"arrow-circle-right",content:"Request Authorization",color:"bad",onClick:function(){return c("request")}})})]}),(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,d,{type:u,blind_drop:p})})]})};var c=function(e,t){var n;return null==e||null==(n=e.find((function(e){return e.id===t})))?void 0:n.name},l=function(e,t){var n;return null==e||null==(n=e.find((function(e){return e.name===t})))?void 0:n.id},s={"In Transit":"good",Idle:"average",Igniting:"average",Recharging:"average",Missing:"bad","Unauthorized Access":"bad",Locked:"bad"},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,d=n.data,u=e.type,p=e.blind_drop,m=d.status,h=d.locked,f=d.authorization_required,C=d.destination,g=d.docked_location,N=d.timer_str,b=d.locations,V=void 0===b?[]:b;return(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,fontSize:"26px",textAlign:"center",fontFamily:"monospace",children:N||"00:00"}),(0,o.createComponentVNode)(2,i.Box,{textAlign:"center",fontSize:"14px",mb:1,children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,bold:!0,children:"STATUS:"}),(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:s[m]||"bad",ml:1,children:m||"Not Available"})]}),(0,o.createComponentVNode)(2,i.Section,{title:"shuttle"===u?"Shuttle Controls":"Base Launch Controls",level:2,children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Location",children:g||"Not Available"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Destination",buttons:"shuttle"!==u&&0===V.length&&!!p&&(0,o.createComponentVNode)(2,i.Button,{color:"bad",icon:"exclamation-triangle",disabled:f||!p,content:"Blind Drop",onClick:function(){return a("random")}}),children:0===V.length&&(0,o.createComponentVNode)(2,i.Box,{mb:1.7,color:"bad",children:"Not Available"})||1===V.length&&(0,o.createComponentVNode)(2,i.Box,{mb:1.7,color:"average",children:c(V,C)})||(0,o.createComponentVNode)(2,i.Dropdown,{mb:1.7,over:!0,width:"240px",options:V.map((function(e){return e.name})),disabled:h||f,selected:c(V,C)||"Select a Destination",onSelected:function(e){return a("set_destination",{destination:l(V,e)})}})})]}),(0,o.createComponentVNode)(2,i.Button,{fluid:!0,content:"Depart",disabled:!c(V,C)||h||f||"Idle"!==m,icon:"arrow-up",textAlign:"center",onClick:function(){return a("move",{shuttle_id:C})}})]})]})};t.ShuttleConsoleContent=d},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleManipulator=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ShuttleManipulator=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),d=n[0],u=n[1];return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,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===d,onClick:function(){return u(0)},icon:"info-circle",content:"Status"},"Status"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===d,onClick:function(){return u(1)},icon:"file-import",content:"Templates"},"Templates"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===d,onClick:function(){return u(2)},icon:"tools",content:"Modification"},"Modification")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,c);case 1:return(0,o.createComponentVNode)(2,l);case 2:return(0,o.createComponentVNode)(2,s);default:return"WE SHOULDN'T BE HERE!"}}(d)]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.shuttles;return(0,o.createComponentVNode)(2,i.Box,{children:c.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"ID",children:e.id}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Timer",children:e.timeleft}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Mode",children:e.mode}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Status",children:e.status}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Jump To",icon:"location-arrow",onClick:function(){return a("jump_to",{type:"mobile",id:e.id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Fast Travel",icon:"fast-forward",onClick:function(){return a("fast_travel",{id:e.id})}})]})]})},e.name)}))})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.templates_tabs,s=c.existing_shuttle,d=c.templates;return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Tabs,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:e===s.id,icon:"file",content:e,onClick:function(){return a("select_template_category",{cat:e})}},e)}))}),!!s&&d[s.id].templates.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[e.description&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:e.description}),e.admin_notes&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Admin Notes",children:e.admin_notes}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,i.Button,{content:"Load Template",icon:"download",onClick:function(){return a("select_template",{shuttle_id:e.shuttle_id})}})})]})},e.name)}))]})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.existing_shuttle,s=c.selected;return(0,o.createComponentVNode)(2,i.Box,{children:[l?(0,o.createComponentVNode)(2,i.Section,{title:"Selected Shuttle: "+l.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",children:l.status}),l.timer&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Timer",children:l.timeleft}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,i.Button,{content:"Jump To",icon:"location-arrow",onClick:function(){return a("jump_to",{type:"mobile",id:l.id})}})})]})}):(0,o.createComponentVNode)(2,i.Section,{title:"Selected Shuttle: None"}),s?(0,o.createComponentVNode)(2,i.Section,{title:"Selected Template: "+s.name,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[s.description&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Description",children:s.description}),s.admin_notes&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Admin Notes",children:s.admin_notes}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Preview",icon:"eye",onClick:function(){return a("preview",{shuttle_id:s.shuttle_id})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Load",icon:"download",onClick:function(){return a("load",{shuttle_id:s.shuttle_id})}})]})]})}):(0,o.createComponentVNode)(2,i.Section,{title:"Selected Template: None"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Sleeper=void 0;var o=n(0),r=n(15),i=n(1),a=n(2),c=n(3),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],s=[["Resp.","oxyLoss"],["Toxin","toxLoss"],["Brute","bruteLoss"],["Burn","fireLoss"]],d={average:[.25,.5],bad:[.5,Infinity]},u=["bad","average","average","good","average","average","bad"];t.Sleeper=function(e,t){var n=(0,i.useBackend)(t),r=(n.act,n.data.hasOccupant?(0,o.createComponentVNode)(2,p):(0,o.createComponentVNode)(2,g));return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[r,(0,o.createComponentVNode)(2,f)]})})};var p=function(e,t){var n=(0,i.useBackend)(t);n.act,n.data.occupant;return(0,o.createFragment)([(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,C)],4)},m=function(e,t){var n=(0,i.useBackend)(t),c=n.act,s=n.data,d=s.occupant,p=s.auto_eject_dead;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:"label",display:"inline",children:"Auto-eject if dead:\xa0"}),(0,o.createComponentVNode)(2,a.Button,{icon:p?"toggle-on":"toggle-off",selected:p,content:p?"On":"Off",onClick:function(){return c("auto_eject_dead_"+(p?"off":"on"))}}),(0,o.createComponentVNode)(2,a.Button,{icon:"user-slash",content:"Eject",onClick:function(){return c("ejectify")}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:d.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d.maxHealth,value:d.health/d.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]},children:(0,r.round)(d.health,0)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:l[d.stat][0],children:l[d.stat][1]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d.maxTemp,value:d.bodyTemperature/d.maxTemp,color:u[d.temperatureSuitability+3],children:[(0,r.round)(d.btCelsius,0),"\xb0C,",(0,r.round)(d.btFaren,0),"\xb0F"]})}),!!d.hasBlood&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood Level",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d.bloodMax,value:d.bloodLevel/d.bloodMax,ranges:{bad:[-Infinity,.6],average:[.6,.9],good:[.6,Infinity]},children:[d.bloodPercent,"%, ",d.bloodLevel,"cl"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pulse",verticalAlign:"middle",children:[d.pulse," BPM"]})],4)]})})},h=function(e,t){var n=(0,i.useBackend)(t).data.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant Damage",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:s.map((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e[0],children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:"100",value:n[e[1]]/100,ranges:d,children:(0,r.round)(n[e[1]],0)},t)},t)}))})})},f=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.hasOccupant,s=c.isBeakerLoaded,d=c.beakerMaxSpace,u=c.beakerFreeSpace,p=c.dialysis&&u>0;return(0,o.createComponentVNode)(2,a.Section,{title:"Dialysis",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{disabled:!s||u<=0||!l,selected:p,icon:p?"toggle-on":"toggle-off",content:p?"Active":"Inactive",onClick:function(){return r("togglefilter")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!s,icon:"eject",content:"Eject",onClick:function(){return r("removebeaker")}})],4),children:s?(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remaining Space",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d,value:u/d,ranges:{good:[.5,Infinity],average:[.25,.5],bad:[-Infinity,.25]},children:[u,"u"]})})}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No beaker loaded."})})},C=function(e,t){var n=(0,i.useBackend)(t),r=n.act,c=n.data,l=c.occupant,s=c.chemicals,d=c.maxchem,u=c.amounts;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant Chemicals",flexGrow:"1",children:s.map((function(e,t){var n,i="";return e.overdosing?(i="bad",n=(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-circle"}),"\xa0 Overdosing!"]})):e.od_warning&&(i="average",n=(0,o.createComponentVNode)(2,a.Box,{color:"average",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle"}),"\xa0 Close to overdosing"]})),(0,o.createComponentVNode)(2,a.Box,{backgroundColor:"rgba(0, 0, 0, 0.33)",mb:"0.5rem",children:(0,o.createComponentVNode)(2,a.Section,{title:e.title,level:"3",mx:"0",lineHeight:"18px",buttons:n,children:(0,o.createComponentVNode)(2,a.Flex,{align:"flex-start",children:[(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:d,value:e.occ_amount/d,color:i,title:"Amount of chemicals currently inside the occupant / Total amount injectable by this machine",mr:"0.5rem",children:[e.pretty_amount,"/",d,"u"]}),u.map((function(t,n){return(0,o.createComponentVNode)(2,a.Button,{disabled:!e.injectable||e.occ_amount+t>d||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)}))})},g=function(e,t){return(0,o.createComponentVNode)(2,a.Section,{textAlign:"center",flexGrow:"1",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:"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),i=n(2),a=n(3);t.SlotMachine=function(e,t){var n,c=(0,r.useBackend)(t),l=c.act,s=c.data;return null===s.money?(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{children:"Could not scan your card or could not find account!"}),(0,o.createComponentVNode)(2,i.Box,{children:"Please wear or hold your ID and try again."})]})})}):(n=1===s.plays?s.plays+" player has tried their luck today!":s.plays+" players have tried their luck today!",(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Box,{lineHeight:2,children:n}),(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Credits Remaining",children:(0,o.createComponentVNode)(2,i.AnimatedNumber,{value:s.money})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"50 credits to spin",children:(0,o.createComponentVNode)(2,i.Button,{icon:"coins",disabled:s.working,content:s.working?"Spinning...":"Spin",onClick:function(){return l("spin")}})})]}),(0,o.createComponentVNode)(2,i.Box,{bold:!0,lineHeight:2,color:s.resultlvl,children:s.result})]})})}))}},function(e,t,n){"use strict";t.__esModule=!0,t.Smartfridge=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.Smartfridge=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.secure,d=l.can_dry,u=l.drying,p=l.contents;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[!!s&&(0,o.createComponentVNode)(2,i.Section,{title:"Secure",children:(0,o.createComponentVNode)(2,i.NoticeBox,{children:"Secure Access: Please have your identification ready."})}),!!d&&(0,o.createComponentVNode)(2,i.Section,{title:"Drying rack",children:(0,o.createComponentVNode)(2,i.Button,{icon:u?"power-off":"times",content:u?"On":"Off",selected:u,onClick:function(){return c("drying")}})}),(0,o.createComponentVNode)(2,i.Section,{title:"Contents",children:[!p&&(0,o.createComponentVNode)(2,i.Box,{color:"average",children:" No products loaded. "}),!!p&&p.map((function(e){return(0,o.createComponentVNode)(2,i.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"45%",children:e.display_name}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"25%",children:["(",e.quantity," in stock)"]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"30%",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",tooltip:"Dispense one.",content:"1",onClick:function(){return c("vend",{index:e.vend,amount:1})}}),(0,o.createComponentVNode)(2,i.NumberInput,{width:"40px",minValue:0,value:0,maxValue:e.quantity,step:1,stepPixelSize:3,onChange:function(t,n){return c("vend",{index:e.vend,amount:n})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-down",content:"All",tooltip:"Dispense all. ",onClick:function(){return c("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),i=n(2),a=n(103),c=n(3);t.Smes=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.capacityPercent,u=(s.capacity,s.charge),p=s.inputAttempt,m=s.inputting,h=s.inputLevel,f=s.inputLevelMax,C=s.inputAvailable,g=s.outputAttempt,N=s.outputting,b=s.outputLevel,V=s.outputLevelMax,v=s.outputUsed,x=(d>=100?"good":m&&"average")||"bad",y=(N?"good":u>0&&"average")||"bad";return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Stored Energy",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:.01*d,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]}})}),(0,o.createComponentVNode)(2,i.Section,{title:"Input",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Charge Mode",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:p?"sync-alt":"times",selected:p,onClick:function(){return l("tryinput")},children:p?"Auto":"Off"}),children:(0,o.createComponentVNode)(2,i.Box,{color:x,children:(d>=100?"Fully Charged":m&&"Charging")||"Not Charging"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target Input",children:(0,o.createComponentVNode)(2,i.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:0===h,onClick:function(){return l("input",{target:"min"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"backward",disabled:0===h,onClick:function(){return l("input",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,i.Slider,{value:h/1e3,fillValue:C/1e3,minValue:0,maxValue:f/1e3,step:5,stepPixelSize:4,format:function(e){return(0,a.formatPower)(1e3*e,1)},onChange:function(e,t){return l("input",{target:1e3*t})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"forward",disabled:h===f,onClick:function(){return l("input",{adjust:1e4})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:h===f,onClick:function(){return l("input",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Available",children:(0,a.formatPower)(C)})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Output",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Output Mode",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:g?"power-off":"times",selected:g,onClick:function(){return l("tryoutput")},children:g?"On":"Off"}),children:(0,o.createComponentVNode)(2,i.Box,{color:y,children:N?"Sending":u>0?"Not Sending":"No Charge"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Target Output",children:(0,o.createComponentVNode)(2,i.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:0===b,onClick:function(){return l("output",{target:"min"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"backward",disabled:0===b,onClick:function(){return l("output",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,i.Slider,{value:b/1e3,minValue:0,maxValue:V/1e3,step:5,stepPixelSize:4,format:function(e){return(0,a.formatPower)(1e3*e,1)},onChange:function(e,t){return l("output",{target:1e3*t})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"forward",disabled:b===V,onClick:function(){return l("output",{adjust:1e4})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:b===V,onClick:function(){return l("output",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Outputting",children:(0,a.formatPower)(v)})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SolarControl=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.SolarControl=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.generated,d=l.generated_ratio,u=l.tracking_state,p=l.tracking_rate,m=l.connected_panels,h=l.connected_tracker,f=l.cdir,C=l.direction,g=l.rotating_direction;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Scan for new hardware",onClick:function(){return c("refresh")}}),children:(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,i.Grid.Column,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Solar tracker",color:h?"good":"bad",children:h?"OK":"N/A"}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Solar panels",color:m>0?"good":"bad",children:m})]})}),(0,o.createComponentVNode)(2,i.Grid.Column,{size:2,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Power output",children:(0,o.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[.66,Infinity],average:[.33,.66],bad:[-Infinity,.33]},minValue:0,maxValue:1,value:d,children:s+" W"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Panel orientation",children:[f,"\xb0 (",C,")"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tracker rotation",children:[2===u&&(0,o.createComponentVNode)(2,i.Box,{children:" Automated "}),1===u&&(0,o.createComponentVNode)(2,i.Box,{children:[" ",p,"\xb0/h (",g,") "]}),0===u&&(0,o.createComponentVNode)(2,i.Box,{children:" Tracker offline "})]})]})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Controls",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Panel orientation",children:[2!==u&&(0,o.createComponentVNode)(2,i.NumberInput,{unit:"\xb0",step:1,stepPixelSize:1,minValue:0,maxValue:359,value:f,onDrag:function(e,t){return c("cdir",{cdir:t})}}),2===u&&(0,o.createComponentVNode)(2,i.Box,{lineHeight:"19px",children:" Automated "})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tracker status",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Off",selected:0===u,onClick:function(){return c("track",{track:0})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"clock-o",content:"Timed",selected:1===u,onClick:function(){return c("track",{track:1})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Auto",selected:2===u,disabled:!h,onClick:function(){return c("track",{track:2})}})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tracker rotation",children:[1===u&&(0,o.createComponentVNode)(2,i.NumberInput,{unit:"\xb0/h",step:1,stepPixelSize:1,minValue:-7200,maxValue:7200,value:p,format:function(e){return(Math.sign(e)>0?"+":"-")+Math.abs(e)},onDrag:function(e,t){return c("tdir",{tdir:t})}}),0===u&&(0,o.createComponentVNode)(2,i.Box,{lineHeight:"19px",children:" Tracker offline "}),2===u&&(0,o.createComponentVNode)(2,i.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),i=n(2),a=n(3);t.SpawnersMenu=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.spawners||[];return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{mb:.5,title:e.name+" ("+e.amount_left+" left)",level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-circle-right",content:"Jump",onClick:function(){return c("jump",{ID:e.uids})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-circle-right",content:"Spawn",onClick:function(){return c("spawn",{ID:e.uids})}})],4),children:[(0,o.createComponentVNode)(2,i.Box,{style:{"white-space":"pre-wrap"},mb:1,fontSize:"16px",children:e.desc}),!!e.fluff&&(0,o.createComponentVNode)(2,i.Box,{style:{"white-space":"pre-wrap"},textColor:"#878787",fontSize:"14px",children:e.fluff}),!!e.important_info&&(0,o.createComponentVNode)(2,i.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.ShuttleConsole=t.SpiderOS=void 0;var o=n(0),r=n(1),i=n(2),a=n(52),c=n(3);t.SpiderOS=function(e,t){var n,a=(0,r.useBackend)(t),f=a.act,C=a.data;return 0===C.suit_tgui_state?n=(0,o.createComponentVNode)(2,i.Flex,{direction:"row",spacing:1,children:[(0,o.createComponentVNode)(2,i.Flex,{direction:"column",width:"60%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{backgroundColor:"rgba(0, 0, 0, 0)",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,i.Flex.Item,{mt:2.2,backgroundColor:"rgba(0, 0, 0, 0)",children:(0,o.createComponentVNode)(2,p)})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"40%",height:"190px",grow:1,backgroundColor:"rgba(0, 0, 0, 0)",children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s)]})]}):1===C.suit_tgui_state&&(n=(0,o.createComponentVNode)(2,i.Flex,{width:"100%",height:"100%",direction:"column",shrink:1,spacing:1,children:(0,o.createComponentVNode)(2,i.Flex.Item,{backgroundColor:"rgba(0, 0, 0, 0.8)",height:"100%",children:[(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,h,{allMessages:C.current_load_text,finishedTimeout:3e3,current_initialisation_phase:C.current_initialisation_phase,end_terminal:C.end_terminal,onFinished:function(){return f("set_UI_state",{suit_tgui_state:0})}})]})})),(0,o.createComponentVNode)(2,c.Window,{theme:"spider_clan",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",spacing:1,children:n})})})};var l=function(e,t){var n=(0,r.useBackend)(t).data,a=n.allStylesPreview,c=n.style_preview_icon_state;return(0,o.createComponentVNode)(2,i.Section,{title:"\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u0441\u0442\u044e\u043c\u0430",style:{"text-align":"center"},buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0441\u0442\u044e\u043c\u0430! \u041d\u0430\u0448\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u0430\u043c \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u0441\u0442\u044e\u043c \u043f\u043e\u0434 \u0441\u0435\u0431\u044f, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0442\u0435\u0440\u044f\u044f \u043e\u0431\u043e\u0440\u043e\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0430\u0447\u0435\u0441\u0442\u0432. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043f\u0440\u0438 \u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u043a\u043e\u0441\u0442\u044e\u043c\u0430, \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0443\u0431\u0438\u0439\u0446\u044b.",tooltipPosition:"bottom-left"}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",grow:1,alignContent:"center",children:(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_blue",success:0,danger:0,align:"center",children:(0,o.createComponentVNode)(2,i.Section,{style:{background:"rgba(4, 74, 27, 0.75)"},mr:10,ml:10,children:(0,o.createVNode)(1,"img",null,null,1,{height:"128px",width:"128px",src:"data:image/jpeg;base64,"+a[c],style:{"margin-left":"0px","-ms-interpolation-mode":"nearest-neighbor"}})})})})})},s=function(e,t){var n,a,c,l,s=(0,r.useBackend)(t),d=s.act,u=s.data,p=u.designs,m=u.design_choice,h=u.scarf_design_choice,f=u.colors,C=u.color_choice,g=u.genders,N=u.preferred_clothes_gender,b=u.suit_state,V=u.preferred_scarf_over_hood,v=u.show_charge_UI,x=u.has_martial_art,y=u.show_concentration_UI;return n=0===b?"\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044e\u043c":"\u0414\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044e\u043c",a=0===V?"\u041a\u0430\u043f\u044e\u0448\u043e\u043d":"\u0428\u0430\u0440\u0444",c=1===V?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0421\u0442\u0438\u043b\u044c \u0448\u0430\u0440\u0444\u0430",content:(0,o.createComponentVNode)(2,i.Dropdown,{options:p,selected:h,onSelected:function(e){return d("set_scarf_design",{scarf_design_choice:e})}})}):null,l=x?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u044f",content:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{selected:y,width:"78px",textAlign:"left",content:y?"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c":"\u0421\u043a\u0440\u044b\u0442\u044c",onClick:function(){return d("toggle_ui_concentration")}}),(0,o.createComponentVNode)(2,i.Button,{textAlign:"center",content:"?",tooltip:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043b\u0438 \u0432\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u0435\u0432\u043e\u0433\u043e \u0438\u0441\u0441\u043a\u0443\u0441\u0442\u0432\u0430.",tooltipPosition:"top-left"})]})}):null,(0,o.createComponentVNode)(2,i.Flex,{direction:"row",grow:1,alignContent:"center",ml:.5,children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,width:"100%",children:[(0,o.createComponentVNode)(2,i.NoticeBox,{success:0,danger:0,align:"center",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0421\u0442\u0438\u043b\u044c",children:(0,o.createComponentVNode)(2,i.Dropdown,{options:p,selected:m,onSelected:function(e){return d("set_design",{design_choice:e})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0426\u0432\u0435\u0442",children:(0,o.createComponentVNode)(2,i.Dropdown,{options:f,selected:C,onSelected:function(e){return d("set_color",{color_choice:e})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0416\u0435\u043d\u0441\u043a\u0438\u0439/\u041c\u0443\u0436\u0441\u043a\u043e\u0439",children:(0,o.createComponentVNode)(2,i.Dropdown,{options:g,selected:N,onSelected:function(e){return d("set_gender",{preferred_clothes_gender:e})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0428\u0430\u0440\u0444/\u041a\u0430\u043f\u044e\u0448\u043e\u043d",children:[(0,o.createComponentVNode)(2,i.Button,{className:0===b?"":"Button_disabled",width:"78px",selected:V,disabled:b,textAlign:"left",content:a,onClick:function(){return d("toggle_scarf")}}),(0,o.createComponentVNode)(2,i.Button,{textAlign:"center",content:"?",tooltip:'\u0421 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 "\u0428\u0430\u0440\u0444" \u0432\u0430\u0448 \u043a\u0430\u043f\u044e\u0448\u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u043e\u043b\u043e\u0441\u044b. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u0430\u0448\u0430 \u0433\u043e\u043b\u043e\u0432\u0430 \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u0430! \u0410\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0435 \u043d\u0430\u043d\u043e-\u0432\u043e\u043b\u043e\u043a\u043d\u0430 \u043a\u043e\u0441\u0442\u044e\u043c\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u044e\u0442 \u043d\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0433\u0440\u043e\u0437\u044b \u043f\u0440\u0438\u043a\u0440\u044b\u0432\u0430\u044f \u0432\u0430\u0448\u0443 \u0433\u043e\u043b\u043e\u0432\u0443! \u0423\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435: \u043d\u0430\u043d\u043e\u0432\u043e\u043b\u043e\u043a\u043d\u0430 \u0442\u0430\u043a \u0436\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0443 \u0433\u043e\u043b\u043e\u0432\u0443 \u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0433\u043e\u043b\u043e\u0432\u043d\u044b\u0445 \u0443\u0431\u043e\u0440\u043e\u0432 \u0441 \u0446\u0435\u043b\u044c\u044e \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u043c\u0435\u0445 \u0432 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0435.',tooltipPosition:"top-left"})]}),c,(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0417\u0430\u0440\u044f\u0434 \u043a\u043e\u0441\u0442\u044e\u043c\u0430",children:[(0,o.createComponentVNode)(2,i.Button,{selected:v,width:"78px",textAlign:"left",content:v?"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c":"\u0421\u043a\u0440\u044b\u0442\u044c",onClick:function(){return d("toggle_ui_charge")}}),(0,o.createComponentVNode)(2,i.Button,{textAlign:"center",content:"?",tooltip:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430\u0440\u044f\u0434 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0441\u0442\u044e\u043c\u0430.",tooltipPosition:"top-left"})]}),l]})}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_"+C,success:0,danger:0,mt:-1.2,align:"center",children:(0,o.createComponentVNode)(2,i.Button,{width:"80%",icon:"power-off",mt:.5,textAlign:"center",content:n,tooltip:"\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u0441\u0442\u044e\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043d\u0451\u043c \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445. \n\u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0441\u0442\u0438 \u043b\u044e\u0431\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0441\u0442\u044e\u043c \u0431\u0443\u0434\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d. \n\u0422\u0430\u043a \u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0441\u0442\u044e\u043c \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0437\u0430\u0440\u044f\u0434 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \n\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0441\u0442\u044e\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043d\u044f\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d. \n\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u043e\u0432\u043d\u043e \u043a\u0430\u043a \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0441\u0442\u044e\u043c\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435 \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u0432\u0440\u0430\u0433\u0430!",tooltipPosition:"top-left",onClick:function(){return d("initialise_suit")}})})]})})},d=function(e,t){var n=(0,r.useBackend)(t).data.allActionsPreview;return(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u043e\u0432\u0435\u0442\u044b \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438",style:{"text-align":"center"},buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u041c\u043e\u043b\u043e\u0434\u044b\u043c \u0443\u0431\u0438\u0439\u0446\u0430\u043c \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u043b\u0435\u0433\u043a\u043e \u043e\u0441\u0432\u043e\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435\u0432\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u044b\u0445 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u043a. \n\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u0440\u0438\u0437\u0432\u0430\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u0441\u043e\u0432\u0435\u0442\u0430\u043c\u0438 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043c\u0438\u0441\u0441\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0432\u044b\u0434\u0430\u0434\u0443\u0442 \u0438\u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u0441\u0432\u043e\u044e \u043f\u043e\u043b\u044c\u0437\u0443.",tooltipPosition:"bottom-left"}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",grow:1,alignContent:"center",children:(0,o.createComponentVNode)(2,i.Flex.Item,{direction:"row",children:[(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.ninja_teleport,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044f \u0438 \u0448\u0430\u0442\u0442\u043b",content:"\u0412 \u0432\u0430\u0448\u0435\u043c \u0414\u043e\u0434\u0437\u0451 \u0435\u0441\u0442\u044c \u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \u0422\u043e\u0447\u043a\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0430\u044f, \u043d\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u043e\u043d\u043d\u0435\u043b\u0438 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0438\u043b\u0438 \u043c\u0430\u043b\u043e\u043f\u043e\u0441\u0435\u0449\u0430\u0435\u043c\u044b\u0435 \u043c\u0435\u0441\u0442\u0430. \n\u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \n\u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u0448\u0430\u0442\u0442\u043b\u0430, \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u0437\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a \u0441\u0435\u0431\u0435 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430\u0437\u0430\u0434. \n\u0422\u0430\u043a \u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u043e\u043b\u0435\u0442\u0435\u0442\u044c \u043d\u0430 \u0448\u0430\u0442\u0442\u043b\u0435, \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0432\u0430\u043c, \u0447\u0442\u043e \u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043a\u0440\u0430\u0436\u0438 \u0448\u0430\u0442\u0442\u043b\u0430 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u0430 \u0432\u0430\u0448\u0443 \u0431\u0430\u0437\u0443 \u043f\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u043b\u0438\u0446, \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0437\u0432\u0430\u0442\u044c \u0435\u0433\u043e.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.headset_green,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0430\u0448 \u043d\u0430\u0443\u0448\u043d\u0438\u043a",content:"\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0439, \u043d\u0430\u0448 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043c\u043e\u0449\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0438. \u0412 \u043d\u0435\u0433\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0432\u0430\u0448\u0438\u043c \u0431\u043e\u0440\u0433\u043e\u043c \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0447\u043b\u0435\u043d\u0430\u043c\u0438 \u043a\u043b\u0430\u043d\u0430. \n\u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043e\u043d \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438 \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u043a\u0438 \u0438/\u0438\u043b\u0438 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u043a\u0430\u043d\u0430\u043b\u044b \u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0432\u0430\u043c \u043c\u0435\u0441\u0442\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0441\u0432\u044f\u0437\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \n\u0422\u0430\u043a \u0436\u0435 \u0432\u0430\u0448 \u043d\u0430\u0443\u0448\u043d\u0438\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438- \u0447\u0435\u0441\u043a\u0438 \u0443\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u0440\u0438 \u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0432\u0430\u043c \u0441\u0430\u043c\u0438\u043c \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u0438\u043c\u0438.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.ninja_sleeper,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041f\u043e\u0445\u0438\u0449\u0435\u043d\u0438\u0435 \u044d\u043a\u0438\u043f\u0430\u0436\u0430",content:"\u041f\u043e\u0440\u043e\u0439 \u043a\u043b\u0430\u043d\u0443 \u043d\u0443\u0436\u043d\u044b \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u043b\u044e\u0434\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442\u0435 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \u0412 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432\u0430\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043e\u0441\u043e\u0431\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0443\u0436\u043e\u0433\u043e \u0440\u0430\u0437\u0443\u043c\u0430. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u0440\u0443\u043f\u0438\u0446\u0430\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044f \u043f\u043e\u0445\u0438\u0449\u0430\u0442\u044c \u043b\u044e\u0434\u0435\u0439. \n\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e\u0445\u0438- \u0442\u0438\u0442\u044c \u043b\u044e\u0434\u0435\u0439. \u0423 \u0432\u0430\u0441 \u043d\u0430 \u0448\u0430\u0442\u0442\u043b\u0435 \u0435\u0441\u0442\u044c \u0441\u043a\u0430\u0444\u0430\u043d\u0434\u0440\u044b, \u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0437\u0430\u043f\u0430\u0441 \u043d\u0430- \u0440\u0443\u0447\u043d\u0438\u043a\u043e\u0432, \u043a\u0438\u0441\u043b\u043e\u0440\u043e\u0434\u0430 \u0438 \u0431\u0430\u043b\u043b\u043e- \u043d\u043e\u0432. \n\u0422\u0430\u043a \u0436\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0430\u0448\u0438 \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043b\u044e\u0434\u0435\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043c\u043f\u0443\u043b\u044c\u0441, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0441\u0442\u0430\u043d\u044f \u0438\u0445 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. ",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.ai_face,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0421\u0430\u0431\u043e\u0442\u0430\u0436 \u0418\u0418",content:"\u0418\u043d\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u0430\u0431\u043e- \u0442\u0430\u0436 \u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442\u0430\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u042d\u0442\u043e \u043f\u0440\u043e- \u0446\u0435\u0441\u0441 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u043e\u0442 \u043d\u0430\u0441 \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438. \n\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043b\u0430\u043d\u043e\u043c \u043c\u0435\u0442\u043e\u0434 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439 \u0434\u043b\u044f \u0437\u0430\u043a\u043e\u043d\u043e\u0432 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0418\u0418 \u0438\u0437 \u0441\u0442\u0440\u043e\u044f. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0418\u0418 \u0430\u0431\u0441\u0443\u0440\u0434\u043d\u044b\u043c\u0438 \u0437\u0430\u043a\u043e\u043d\u0430\u043c\u0438, \u043d\u043e \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0432 \u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u0432\u0437\u043b\u043e\u043c\u0430 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432 \u0441\u0430\u043c\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0439. \u0422\u0430\u043a \u0436\u0435 \u0432\u0437\u043b\u043e\u043c \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435\u043b\u0451\u0433\u043a\u0430\u044f - \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u0435\u0441\u0442\u044c \u0432\u0435\u0437\u0434\u0435. \u0410 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f. \u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c \u0435\u0441\u043b\u0438 \u0418\u0418 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442- \u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438\u043c \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c \u0435\u0433\u043e \u0441\u043b\u043e\u043c\u0430\u0442\u044c.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.ninja_borg,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0421\u0430\u0431\u043e\u0442\u0430\u0436 \u0440\u043e\u0431\u043e\u0442\u043e\u0432",content:'\u0418\u043d\u043e\u0433\u0434\u0430 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044f \u0432\u0430\u0448\u0438 \u0448\u0430\u043d\u0441\u044b \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0438\u0441\u0441\u0438\u0438 \u0434\u043b\u044f \u0438\u0445 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442\u0430\u0445, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u043e\u0431\u043e\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u0435\u0439, \u043c\u044b \u0434\u0430\u0451\u043c \u0432\u0430\u043c \u043e\u0441\u043e\u0431\u044b\u0439 "\u0423\u043b\u0443\u0447\u0448\u0430\u044e\u0449\u0438\u0439" \u0438\u0445 \u043f\u0440\u0438\u0431\u043e\u0440, \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u0432\u0430\u0448\u0438 \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0438. \n\u041f\u0440\u0438 \u0432\u0437\u043b\u043e\u043c\u0435 \u043a\u0438\u0431\u043e\u0440\u0433\u0430 \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u0438\u0431\u043e\u0440\u043e\u043c(\u0412\u0437\u043b\u043e\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f) \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043b\u043e\u044f\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u043d\u0443 \u0438 \u0432\u0430\u043c \u043b\u0438\u0447\u043d\u043e \u0441\u043b\u0443\u0433\u0443 \u0441\u043f\u043e\u0441\u043e\u0431- \u043d\u043e\u0433\u043e \u043d\u0430 \u043e\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u0430\u043a \u0432 \u0441\u0430\u0431\u043e\u0442\u0430\u0436\u0435 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0442\u0430\u043a \u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043b\u0435\u0447\u0435\u043d\u0438\u0438. \n\u0422\u0430\u043a \u0436\u0435 \u0440\u043e\u0431\u043e\u0442 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u0430\u0449\u0451\u043d \u043b\u0438\u0447\u043d\u043e\u0439 \u043a\u0430\u0442\u0430\u043d\u043e\u0439, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u043f\u0438\u043d\u043f\u043e\u0438\u043d\u0442\u0435\u0440\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0435\u043c\u0443 \u043d\u0430 \u0432\u0430\u0441 \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u044e\u0440\u0438\u043a\u0435\u043d\u043e\u0432. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u043a\u0430\u0442\u0430\u043d\u0430 \u0440\u043e\u0431\u043e\u0442\u0430 \u043d\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0431\u043b\u044e\u0441\u043f\u0435\u0439\u0441 \u0442\u0440\u0430\u043d\u0441\u043b\u043e\u043a\u0430\u0446\u0438\u044e!',position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.server,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0421\u0430\u0431\u043e\u0442\u0430\u0436 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439",content:"\u041d\u0430 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u043e\u0431\u044c\u0435\u043a\u0442\u0430\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0443\u0447\u0451\u043d\u044b\u0445 \u0438 \u043c\u043d\u043e- \u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0445\u043e- \u0434\u0438\u0442\u0441\u044f \u0433\u0434\u0435 \u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044c\u0435\u043a\u0442\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0441\u0442\u0443- \u043f\u0430\u044e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0410 \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0446\u0438\u0438 \u0432\u0435\u0447\u043d\u043e \u0433\u0440\u044b\u0437\u0443\u0442\u0441\u044f \u0437\u0430 \u0437\u043d\u0430\u043d\u0438\u044f. \u0427\u0442\u043e \u043d\u0430\u043c \u043d\u0430 \u0440\u0443\u043a\u0443. \n\u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0440\u0443\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0432\u0430\u0448\u0438 \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u043c\u0438\u0441\u0441\u0438\u0435\u0439 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430. \u0412\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0448\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0430 \u0438\u0445 \u043d\u0430\u0443\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0432\u0441\u0435 \u0438\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b. \n\u041d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u0438\u0440\u0443\u0441\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0437\u0430\u0449\u0438\u0442\u044b \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0431\u044c\u0435\u043a\u0442\u043e\u0432 \u043d\u0435 \u0434\u0440\u0435\u043c\u043b\u044e\u0442. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e \u0432\u0430\u0448\u0435\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u0437\u043b\u043e\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u043e\u0432\u0435\u0449\u0451\u043d \u043c\u0435\u0441\u0442\u043d\u044b\u0439 \u0418\u0418. \u0411\u0443\u0434\u044c\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u044d\u0442\u043e\u043c\u0443.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.buckler,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0417\u0430\u0449\u0438\u0442\u0430 \u0446\u0435\u043b\u0438",content:'\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u043e\u0433\u0430\u0442\u044b\u0435 \u0448\u0438\u0448\u043a\u0438 \u043f\u043b\u0430\u0442\u044f\u0442 \u0437\u0430 \u0443\u0441\u043b\u0443\u0433\u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u0446\u0435\u043b\u044c \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \n * \u0417\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044f\u0437\u0430\u043d \u0434\u043e\u0436\u0438\u0442\u044c \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0441\u043c\u0435\u043d\u044b! \n * \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u044b\u0439 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u043e \u0432\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435. \u0418 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u043d\u0430\u043b! \n * \u041d\u0435 \u0432\u0430\u0436\u043d\u043e \u043a\u0442\u043e \u0438\u043b\u0438 \u0447\u0442\u043e \u043e\u0445\u043e\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u0437\u0430\u0449\u0438\u0442\u043d\u043e\u0433\u043e, \u043d\u043e \u0434\u043b\u044f \u043e\u0431\u044c\u0435\u043a\u0442\u0430 \u0433\u0434\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043c\u0438\u0441\u0441\u0438\u044f \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u0436\u0435\u043b\u0430\u043d\u043d\u043e\u0435 \u043b\u0438\u0446\u043e. \u041d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u0441\u0435\u0431\u044f \u0431\u0435\u0437 \u043d\u0443\u0436\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438 \u043d\u0430 \u0432\u0430\u0441 \u0441\u0430\u043c\u0438\u0445 \u043d\u0435 \u0432\u0435\u043b\u0438 \u043e\u0445\u043e\u0442\u0443! \n\u0422\u0430\u043a \u0436\u0435 \u043c\u044b \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043a\u043b\u0430\u043d \u043d\u0435 \u043e\u0434\u043e\u0431\u0440\u044f\u0435\u0442 \u0432\u0430\u0440\u0432\u0430\u0440\u0441\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b "\u0417\u0430\u0449\u0438\u0442\u044b" \u0446\u0435\u043b\u0438. \u041d\u0435\u0442 \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u0430\u0434\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0432 \u043a\u043b\u0435\u0442\u043a\u0443 \u0438 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043d\u0438\u043c \u0442\u0430\u043c! \u041d\u0435 \u043f\u043e\u0440\u0442\u0438\u0442\u0435 \u043d\u0430\u0448\u0443 \u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u044e \u0432 \u0433\u043b\u0430\u0437\u0430\u0445 \u043d\u0430\u0448\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432!',position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.cash,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041a\u0440\u0430\u0436\u0430 \u0434\u0435\u043d\u0435\u0433",content:"\u041a\u0430\u043a \u0431\u044b \u044d\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u0418\u043d\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u043d \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u043d\u044c- \u0433\u0430\u0445. \u0418\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u044b \u0437\u0430\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u043d\u0430\u043c. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u0430\u0434\u0438\u043c \u0432\u0430\u043c \u0437\u0430\u0434\u0430\u0447\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0430\u0441 \u044d\u0442\u0438 \u0434\u0435\u043d\u044c\u0433\u0438 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \n\u0414\u043b\u044f \u0432\u0430\u0441 \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0442\u0440\u0443\u0434\u043d\u0430\u044f, \u043d\u043e \u0432\u0440\u0435\u043c\u044f\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u0430\u044f. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u043d\u0430\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u043a\u0430\u0440\u043c\u0430\u043d\u043d\u044b\u0445 \u043a\u0440\u0430\u0436. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0440\u0430\u0436\u0438 \u0447\u0443\u0436\u0438\u0445 \u043a\u0430\u0440\u0442 \u0438 \u043e\u0431\u043d\u0430\u043b\u0438\u0447\u0438- \u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0441\u0447\u0435\u0442\u043e\u0432. \u041b\u0438\u0431\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043c\u0435\u0442\u0438\u0442\u044c \u0432\u044b\u0448\u0435 \u0438 \u043e\u0433\u0440\u0430\u0431\u0438\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438\u043b\u0438 \u0441\u0447\u0435\u0442\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u044c\u0435\u043a\u0442\u0430 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435. \u0414\u043e\u0441\u0442\u0430\u043d\u044c\u0442\u0435 \u044d\u0442\u0438 \u0434\u0435\u043d\u044c\u0433\u0438!",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.handcuff,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430",content:"\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0447\u0443\u0436\u043e\u0439 \u043f\u043e\u0437\u043e\u0440 \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0447\u0435\u043c \u0441\u043c\u0435\u0440\u0442\u044c. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u0430\u043c \u043f\u0440\u0438\u0439\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u044c \u043a\u0440\u0435\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0430\u0448\u0443 \u0436\u0435\u0440\u0442\u0432\u0443 \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u043d\u044b\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0443\u043f\u0435\u043a\u043b\u0438 \u0437\u0430 \u0440\u0435\u0448\u0451\u0442\u043a\u0443 \u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0446\u0435\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0441\u043b\u0435\u0434. \u041d\u043e \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0439\u0442\u0438 \u0438 \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0435\u043b\u0438 \u0441\u0440\u043e\u043a \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 - \u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043c\u0435\u0442\u043e\u0434. \u0426\u0435\u043b\u044c \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u044e\u0442 \u0432 \u0441\u0443\u0434\u0435, \u0447\u0442\u043e \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \n \u0423 \u0432\u0430\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u043b\u0438\u0447\u0438\u043d\u043e\u0439 \u0446\u0435\u043b\u0438. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0439\u0442\u0435\u0441\u044c \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0441\u043b\u0438\u0448- \u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439. \u041b\u0438\u0448\u043d\u044f\u044f \u0434\u044b\u0440\u0430 \u0432 \u043e\u0431\u0448\u0438\u0432\u043a\u0435 \u0441\u0442\u0430\u043d\u0446\u0438\u0438 \u0438\u043b\u0438 \u0442\u0440\u0443\u043f\u044b - \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u0448\u0430\u043d\u0441\u044b \u043f\u0440\u043e\u0432\u0430\u043b\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u043b\u0430\u043d\u0430.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.spider_charge,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041f\u043e\u0434\u0440\u044b\u0432 \u043e\u0442\u0434\u0435\u043b\u0430",content:"\u0421\u0442\u0430\u0440\u044b\u0435 \u0434\u043e\u0431\u0440\u044b\u0435 \u0431\u043e\u043c\u0431\u044b. \u042d\u0444\u0444\u0435\u043a- \u0442\u0438\u0432\u043d\u044b\u0435 \u043e\u0440\u0443\u0434\u0438\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0436\u0438\u0432\u043e\u0433\u043e \u0438 \u043d\u0435\u0436\u0438\u0432\u043e\u0433\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0440\u0430\u0434\u0438\u0443\u0441\u0435. \u041a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043f\u0440\u043e\u0441\u044f\u0442 \u043f\u043e\u0434\u043e\u0440\u0432\u0430\u0442\u044c \u043e\u0431\u044c\u0435\u043a\u0442, \u043e\u043d\u0438 \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f. \u041d\u043e \u0440\u0435\u0434\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u044b \u0441\u0434\u0430\u0442\u044c\u0441\u044f. \u041a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u044b \u043d\u0430 \u043f\u043e\u0434\u0440\u044b\u0432 \u043e\u0434\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u0430. \n\u0411\u0443\u0434\u044c\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u0437\u0440\u044b\u0432\u0430 \u043d\u0430 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u043e\u0445\u043e\u0442\u0430. \n \u041d\u0430\u0448\u0438 \u0431\u043e\u043c\u0431\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u044b \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u0435\u043b\u044f\u043c\u0438. \u041d\u0438\u043a\u0442\u043e \u043a\u0440\u043e\u043c\u0435 \u0432\u0430\u0441 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u043f\u043e\u0434\u043e\u0440\u0432\u0430\u0442\u044c \u0438 \u0434\u0430\u0436\u0435 \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043b\u0438\u0448\u044c \u0432 \u0437\u043e\u043d\u0435 \u0437\u0430\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c. \u0421\u043e\u0432\u0435\u0442\u0443\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u0425\u043e\u0442\u044f \u044d\u0442\u043e \u0438 \u0442\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043b\u044f \u0432\u0430\u0441 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e.",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.BSM,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0410\u043d\u0430\u043b\u0438\u0437 \u043a\u0440\u043e\u0432\u0438",content:'"\u0417\u043d\u0430\u0439 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0440\u0430\u0433\u0430" - \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438\u0441\u0442\u0438\u043d\u0430. \n\u0417\u0430 \u0433\u043e\u0434\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u043d\u0430 \u043c\u044b \u0438\u0437\u0443\u0447\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u0442\u0432\u0430\u0440\u0435\u0439. \u0418 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e- \u0442\u043e\u0440\u044b\u0445. \u0410 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e, \u0447\u0442\u043e \u0438\u0437\u0443\u0447\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u0446\u044b. \u041a\u0440\u043e\u0432\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043d\u0430\u0448\u0438\u043c \u0443\u0447\u0451\u043d\u044b\u043c. \n\u0418\u043c\u0435\u044e\u0449\u0430\u044f\u0441\u044f \u0443 \u0432\u0430\u0441 \u043d\u0430 \u0431\u0430\u0437\u0435 \u0446\u0435\u043d\u0442\u0440\u0438\u0444\u0443\u0433\u0430 \u0434\u043b\u044f \u043a\u0440\u043e\u0432\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437\u0446\u044b \u043d\u0435 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0432 \u0438\u0445 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430\u043c. \n\u0414\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u0440\u043e\u0432\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c 3 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u0446\u0430. \u0418 \u043f\u043e\u043c\u0435- \u0441\u0442\u0438\u0442\u044c \u0438\u0445 \u0432 \u043f\u0440\u043e\u0431\u0438\u0440\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \n\u041f\u0440\u0438\u043c\u0435\u0441\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442!',position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.changeling,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0413\u0435\u043d\u043e\u043a\u0440\u0430\u0434\u044b",content:"\u0427\u0435\u0440\u0432\u0438 \u0432\u043e\u0437\u043e\u043c\u043d\u0438\u0432\u0448\u0438\u0435 \u0441\u0435\u0431\u044f \u0432\u044b\u0448\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0438\u0434\u043e\u0432 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443\u043c\u0435\u044e\u0442 \u043a\u0440\u0430\u0441\u0442\u044c \u0433\u0435\u043d\u044b \u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \n\u0421\u0432\u043e\u0438\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0431- \u043b\u0435\u043c, \u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u044b. \n\u042d\u0442\u0438 \u0442\u0432\u0430\u0440\u0438 \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u0445\u0438\u0442\u0440\u044b \u0441\u043a\u043e\u043b\u044c \u0438 \u0441\u043a\u0440\u044b\u0442\u043d\u044b. \u041d\u0435 \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0441 \u043d\u0438\u043c\u0438 \u043d\u0438 \u043e \u0447\u0451\u043c! \n\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0434\u0430\u0436\u0435 \u043d\u0430\u043c \u0441\u043b\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0433\u0435\u043d\u043e\u043a\u0440\u0430\u0434\u0430 \u043d\u0435 \u0437\u0430\u043f\u0438\u0445- \u043d\u0443\u0432 \u0435\u0433\u043e \u0432 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u044e \u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0441\u0442\u043e\u0432. \u041d\u043e \u043e\u043d\u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u044b\u0434\u0430\u044e\u0442 \u0441\u0435\u0431\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438. \u0418 \u0442\u0430\u043a \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043b\u043e\u0436\u0430\u0442\u0441\u044f \u043d\u0430 \u0434\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043b\u0435\u0433\u0447\u0435 \u0438\u0445 \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0434\u0430\u0439\u0442\u0435 \u0438\u043c \u043f\u043e\u043f\u043b\u044f\u0441\u0430\u0442\u044c, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0441\u0446\u0435\u043d\u0443. \u0418 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0443\u0448\u0430\u0439\u0442\u0435 \u0440\u0430\u0434\u0438\u043e \u043d\u0430 \u043e\u0431\u044c\u0435\u043a\u0442\u0435. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043c\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0445\u0440\u0430\u043d\u0430 \u0443\u0436\u0435 \u043e\u0445\u043e\u0442\u0438\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0438\u0445. \n\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c \u0441 \u044d\u0442\u0438\u043c...",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.vampire,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0430\u043c\u043f\u0438\u0440\u044b",content:"\u0414\u0435\u0448\u0451\u0432\u044b\u0435 \u0440\u043e\u043c\u0430\u043d\u044b, \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438 \u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438 \u0432\u0430\u043c\u043f\u0438\u0440\u043e\u0432 \u043a\u0430\u043a \u0445\u0438\u0449\u043d\u0438\u043a\u043e\u0432 \u043f\u044c\u044e\u0449\u0438\u0445 \u043a\u0440\u043e\u0432\u044c \u043b\u044e\u0434\u0435\u0439 \u0432 \u043d\u043e\u0447\u0438 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e- \u0449\u0438\u0445 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e- \u0441\u0442\u044f\u043c\u0438. \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u0435\u0435 \u0440\u043e\u043c\u0430\u043d\u0442\u0438\u0447\u043d\u044b... \n\u041c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043d\u043e \u043d\u0430\u0448\u0438 \u043f\u043e\u0434\u043e\u0437\u0440\u0435- \u043d\u0438\u044f \u043f\u0430\u0434\u0430\u044e\u0442 \u043d\u0430 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0439 \u0431\u043b\u044e\u0441\u043f\u0435\u0439\u0441 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u043a\u0430 \u0432\u0430\u043c\u043f\u0438\u0440 \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438 \u0438\u043b\u0438 \u0443\u0433\u0440\u043e\u0436\u0430\u0435\u0442 \u0432\u0430\u0448\u0435\u0439 \u0436\u0438\u0437\u043d\u0438. \u0412\u044b \u0432\u043e\u043b\u044c\u043d\u044b \u0435\u0433\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \n\u0412\u0430\u043c\u043f\u0438\u0440\u044b \u043e\u0447\u0435\u043d\u044c \u043e\u043f\u0430\u0441\u043d\u044b \u0432 \u043f\u0440\u044f\u043c\u043e\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438, \u043e\u043d\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043e\u0433\u043b\u0443\u0448\u0430\u0442\u044c \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u0438 \u043f\u043e\u0440\u0430\u0431\u043e\u0449\u0430\u0442\u044c \u0440\u0430\u0437\u0443\u043c \u0441\u0432\u043e\u0438\u0445 \u0436\u0435\u0440\u0442\u0432. \u041d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0438\u043c, \u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u0435 - \u043e\u043d\u0438 \u043b\u0438\u0448\u044c \u0436\u0435\u0440\u0442\u0432\u044b \u0441\u0442\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432. \u0418 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u044e \u043f\u043e\u043b\u044c\u0437\u0443...",position:"bottom-left"})]}),(0,o.createComponentVNode)(2,i.Button,{className:"Button_green",height:"32px",width:"32px",children:[(0,o.createVNode)(1,"img",null,null,1,{height:"32px",width:"32px",src:"data:image/jpeg;base64,"+n.syndicate,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0421\u0438\u043d\u0434\u0438\u043a\u0430\u0442",content:"\u041d\u0430\u0448\u0438 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0435. \u0421\u0431\u043e\u0440\u0438\u0449\u0435 \u043c\u043e\u0433\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0444\u0438\u0433\u0443\u0440 \u0432 \u043f\u043e\u0434\u043f\u043e\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043c\u0430\u043b\u043e... \n\u0421\u0438\u043d\u0434\u0438\u043a\u0430\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043a\u0430\u0437\u043e\u0432. \u041d\u043e \u0441\u0430\u043c\u043e\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439, \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u0442\u043e \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0445 \u0438\u0437\u0443\u0447\u0438\u0442, \u0447\u0435\u0440\u0442\u043e\u0439 \u044d\u0442\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b - \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u0430\u044f \u043d\u0435\u043d\u0430\u0432\u0438\u0441\u0442\u044c \u043a \u041d\u0422. \n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0441 \u0430\u0433\u0435\u043d\u0442\u0430\u043c\u0438 \u0421\u0438\u043d\u0434\u0438\u043a\u0430\u0442\u0430 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u043d\u0430\u0448\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u0430. \n\u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u043c\u0435\u0448\u0430\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u043d\u0438\u044f. \u041c\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u043c \u0438\u043c.",position:"bottom-left"})]})]})})})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.allActionsPreview,s=c.blocked_TGUI_rows,d=[{blue:"Button_blue",green:"Button_green",red:"Button_red",disabled:"Button_disabled"}];return(0,o.createComponentVNode)(2,i.Section,{title:"\u041c\u043e\u0434\u0443\u043b\u0438 \u043a\u043e\u0441\u0442\u044e\u043c\u0430",style:{"text-align":"center"},buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0441\u0442\u044e\u043c\u0430! \u0414\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 3 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438. \u0418\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0441\u0442\u044e\u043c\u0430, \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432",tooltipPosition:"bottom"}),children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",alignContent:"center",ml:1.5,children:[(0,o.createComponentVNode)(2,i.Flex.Item,{width:"33%",shrink:1,children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u041f\u0440\u0438\u0437\u0440\u0430\u043a",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u0421\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0441\u0440\u0435\u0434\u0438 \u0432\u0440\u0430\u0433\u043e\u0432, \u043d\u0430\u043f\u0430\u0434\u0430\u0439\u0442\u0435 \u0438\u0437 \u0442\u0435\u043d\u0438 \u0438 \u0431\u0443\u0434\u044c\u0442\u0435 \u043d\u0435\u0437\u0440\u0438\u043c\u043e\u0439 \u0443\u0433\u0440\u043e\u0437\u043e\u0439, \u0432\u0441\u0451 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e \u0432\u0430\u0441 \u0438 \u0432\u0430\u0448\u0435\u0439 \u043c\u0438\u0441\u0441\u0438\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0443\u0437\u043d\u0430\u043b! \u0411\u0443\u0434\u044c\u0442\u0435 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b \u043a\u0430\u043a \u043f\u0440\u0438\u0437\u0440\u0430\u043a!",tooltipPosition:"bottom"}),style:{"text-align":"center",background:"rgba(53, 94, 163, 0.8)"}}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_blue",success:0,danger:0,align:"center",children:[(0,o.createComponentVNode)(2,i.Button,{className:s[0]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[0],onClick:function(){return a("give_ability",{style:"smoke",row:"1"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.smoke,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0414\u042b\u041c\u041e\u0412\u0410\u042f \u0417\u0410\u0412\u0415\u0421\u0410",content:"\u0412\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0431\u043b\u0430\u043a\u043e \u0434\u044b\u043c\u0430 \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u0432\u0440\u0430\u0433\u043e\u0432. \n\u042d\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 \u0432\u0430\u0448\u0438\u043c \u0432\u0438\u0437\u043e\u0440\u043e\u043c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0442\u0435\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430. \n\u0410 \u0442\u0430\u043a \u0436\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0433\u043e \u043f\u043e\u0436\u0435\u043b\u0430\u0435\u0442\u0435. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 1000 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 250 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[1]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[1],onClick:function(){return a("give_ability",{style:"ninja_cloak",row:"2"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.ninja_cloak,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u041d\u0415\u0412\u0418\u0414\u0418\u041c\u041e\u0421\u0422\u042c",content:"\u0412\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0435\u0431\u044f \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0441\u043a\u0440\u044b\u0432\u0430- \u044e\u0449\u0435\u0435 \u0432\u0430\u0441 \u0438\u0437 \u0432\u0438\u0434\u0443 \u0438 \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0430- \u044e\u0449\u0435\u0435 \u0432\u0430\u0448\u0438 \u0448\u0430\u0433\u0438. \n\u041f\u043e\u043b\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u0440\u0443\u043f\u043a\u043e\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043b\u0435\u0442\u0435\u0442\u044c\u0441\u044f \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0435\u0437\u043a\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u043b\u0438 \u0443\u0434\u0430\u0440\u0430. \n\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0425\u043e\u0442\u044c \u043f\u043e\u043b\u0435 \u0438 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0441 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0443\u0431\u0438\u0439\u0446\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0445\u043b\u0430\u0434\u043d\u043e\u043a\u0440\u043e\u0432\u0435\u043d. \n\u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0435\u0434\u043e\u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445 \u043b\u044e\u0434\u0435\u0439. \n\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043b\u0430\u0431\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 15 \u0441\u0435\u043a\u0443\u043d\u0434.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[2]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[2],onClick:function(){return a("give_ability",{style:"ninja_clones",row:"3"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.ninja_clones,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041d\u0415\u0420\u0413\u0415\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0415 \u041a\u041b\u041e\u041d\u042b",content:"\u0421\u043e\u0437\u0434\u0430\u0451\u0442 \u0434\u0432\u0443\u0445 \u043a\u043b\u043e\u043d\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u0431\u0438\u0442\u0432\u0435 \u0438 \u0434\u0435\u0437\u043e\u0440\u0438\u0435\u043d\u0442\u0438- \u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \n\u0422\u0430\u043a \u0436\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u0430\u0441 \u0438 \u0432\u0430\u0448\u0438\u0445 \u043a\u043b\u043e\u043d\u043e\u0432 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 \u043f\u0430\u0440\u044b \u043c\u0435\u0442\u0440\u043e\u0432. \n\u041f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e. \u0421\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0435\u0440\u0435\u0442\u044c \u0432\u0430\u0441 \u0437\u0430 4-\u043c\u044f \u0441\u0442\u0435\u043d\u0430\u043c\u0438. \u0411\u0443\u0434\u044c\u0442\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0433\u043e\u0442\u043e\u0432\u044b. \n\u041a\u043b\u043e\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 20 \u0441\u0435\u043a\u0443\u043d\u0434. \u041a\u043b\u043e\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u0448\u0430\u043d\u0441 \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u0442\u0441\u044f \u0430\u0442\u0430\u043a\u0443\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 4000 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 8 \u0441\u0435\u043a\u0443\u043d\u0434.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[3]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[3],onClick:function(){return a("give_ability",{style:"chameleon",row:"4"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.chameleon,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0425\u0410\u041c\u0415\u041b\u0415\u041e\u041d",content:"\u0412\u044b \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0435\u0431\u044f \u0433\u043e\u043b\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u0438\u0441\u043a\u0430\u0436\u0430\u044e\u0449\u0435\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u0441\u043b\u0443\u0445\u043e\u0432\u043e\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432. \n\u0412\u0430\u0441 \u0431\u0443\u0434\u0443\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0438 \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043a\u0430\u043a \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c. \n\u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0432\u0430\u043c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0440 \u043f\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e \u0438 \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0447\u043b\u0435\u043d\u0430 \u044d\u043a\u0438\u043f\u0430\u0436\u0430. \n\u041f\u043e\u043b\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0445\u0440\u0443\u043f\u043a\u043e\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043b\u0435\u0442\u0435\u0442\u044c\u0441\u044f \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0435\u0437\u043a\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u043b\u0438 \u0443\u0434\u0430\u0440\u0430. \n\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \n\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0445\u0430\u043c\u0435\u043b\u0435\u043e\u043d \u0441\u043b\u0430\u0431\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[4]?d[0].disabled:d[0].blue,height:"64px",width:"100%",disabled:s[4],onClick:function(){return a("give_ability",{style:"ninja_spirit_form",row:"5"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.ninja_spirit_form,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0424\u041e\u0420\u041c\u0410 \u0414\u0423\u0425\u0410",content:"\u0412\u044b \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442\u0435 \u043d\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0430 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u044d\u0442\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \n\u0414\u0435\u043b\u0430\u044f \u0432\u0430\u0448\u0435 \u0442\u0435\u043b\u043e \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u044d\u0442\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u0440\u0443\u0435\u0442 \u0432\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u0441\u0442\u0435\u043d\u044b. \n\u042d\u0442\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0430\u0441 \u043d\u0435\u0443\u044f\u0437\u0432\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u043f\u0443\u043b\u044c \u0438 \u043b\u0435\u0437\u0432\u0438\u0439! \n\u041d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0441\u043d\u044f\u0442\u044c \u0441 \u0441\u0435\u0431\u044f \u043d\u0430\u0440\u0443\u0447\u043d\u0438\u043a\u0438, \u0431\u043e\u043b\u044b \u0438 \u0434\u0430\u0436\u0435 \u0432\u044b\u043b\u0435\u0437\u0442\u0438 \u0438\u0437 \u0433\u0440\u043e\u0431\u0430 \u0438\u043b\u0438 \u044f\u0449\u0438\u043a\u0430, \u043e\u043a\u0430\u0436\u0438\u0441\u044c \u0432\u044b \u0442\u0430\u043c \u0437\u0430\u043f\u0435\u0440\u0442\u044b... \n\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u0430. \n\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0434\u0443\u0445\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u044d\u043d\u0435\u0440\u0433\u0438\u0438! \u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u0431\u044a\u0451\u043c\u0430 \u0431\u0430\u0442\u0430\u0440\u0435\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 25 \u0441\u0435\u043a\u0443\u043d\u0434.",position:"right"})]})]})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"33%",shrink:1,children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u0417\u043c\u0435\u0439",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u0423\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435! \u0422\u0440\u044e\u043a\u0438, \u043b\u043e\u0432\u0443\u0448\u043a\u0438, \u0449\u0438\u0442\u044b. \u041f\u043e\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0431\u043e\u0439 \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0443\u0431\u0438\u0439\u0446\u0435\u0439. \u0418\u0437\u0432\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0438 \u0438\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430\u0445\u043e\u0434\u044f \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0412\u0440\u0430\u0433\u0438 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0433\u0440\u044b\u0437\u0443\u043d\u044b, \u0447\u044c\u0451 \u043b\u043e\u0433\u043e\u0432\u043e \u043d\u0430\u0432\u0435\u0441\u0442\u0438\u043b \u0437\u043c\u0435\u0439!",tooltipPosition:"bottom"}),style:{"text-align":"center",background:"rgba(0, 174, 208, 0.15)"}}),(0,o.createComponentVNode)(2,i.NoticeBox,{success:0,danger:0,align:"center",children:[(0,o.createComponentVNode)(2,i.Button,{className:s[0]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[0],onClick:function(){return a("give_ability",{style:"kunai",row:"1"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.kunai,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0421\u0422\u0420\u041e\u0415\u041d\u041d\u041e\u0415 \u0414\u0416\u041e\u0425\u042c\u0401",content:"\u0422\u0430\u043a \u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u0430\u043a \u0428\u044d\u043d\u0431\u044f\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u041a\u0438\u043d\u0436\u0430\u043b \u043d\u0430 \u0446\u0435\u043f\u0438. \n\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0432 \u043a\u043e\u0441\u0442\u044e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u0442\u044f\u043d\u0443\u0442\u044c \u043a \u0441\u0435\u0431\u0435 \u0436\u0435\u0440\u0442\u0432\u0443 \u0437\u0430 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \n\u041e\u0440\u0443\u0436\u0438\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u043e\u043b\u0433\u0438\u0445 \u0431\u043e\u0451\u0432, \u043d\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0432\u044b\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0436\u0435\u0440\u0442\u0432\u044b - \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u0434\u0430\u0440\u0430! \n\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043d\u0435 \u043f\u0440\u043e\u043c\u0430\u0445\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u0435. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0430: 500 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 5 \u0441\u0435\u043a\u0443\u043d\u0434.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[1]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[1],onClick:function(){return a("give_ability",{style:"chem_injector",row:"2"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.chem_injector,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0418\u0421\u0426\u0415\u041b\u042f\u042e\u0429\u0418\u0419 \u041a\u041e\u041a\u0422\u0415\u0419\u041b\u042c",content:"\u0412\u0432\u043e\u0434\u0438\u0442 \u0432 \u0432\u0430\u0441 \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0435\u0447\u0435\u0431\u043d\u0443\u044e \u0441\u043c\u0435\u0441\u044c. \u0421\u043f\u043e\u0441\u043e\u0431\u043d\u0443\u044e \u0437\u0430\u043b\u0435\u0447\u0438\u0442\u044c \u0434\u0430\u0436\u0435 \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0441\u0442\u0438 \u0438 \u043e\u0442\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438. \n\u041f\u0440\u0435\u043f\u0430\u0440\u0430\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442- \n\u0432\u0435\u043d\u043d\u043e-\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u0434\u043e\u043a\u0441\u044b \u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u0430! \n\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u043e\u0437\u0438\u0440\u043e\u0432\u043a\u0435 \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u043f\u0430\u0441\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041d\u0435 \u0432\u0432\u043e\u0434\u0438\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 30 \u0435\u0434. \u043f\u0440\u0435\u043f\u0430\u0440\u0430\u0442\u0430 \u0432 \u0432\u0430\u0448 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c! \n\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u0430\u0442\u044b \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0438\u043c\u0435\u0435\u0442 3 \u0437\u0430\u0440\u044f\u0434\u0430. \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u043e\u0432 \u0431\u043b\u044e\u0441\u043f\u0435\u0439\u0441 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u043e\u0432 \u043f\u043e\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u0441\u0442\u044e\u043c.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[2]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[2],onClick:function(){return a("give_ability",{style:"emergency_blink",row:"3"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.emergency_blink,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041a\u0421\u0422\u0420\u0415\u041d\u041d\u0410\u042f \u0422\u0415\u041b\u0415\u041f\u041e\u0420\u0422\u0410\u0426\u0418\u042f",content:"\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u0437\u043e\u043d\u0443 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 \u043e\u043a\u043e\u043b\u043e \u0434\u0432\u0443\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043c\u0435\u0442\u0440\u043e\u0432. \n\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043c\u043e\u0437\u0433\u043e\u0432\u044b\u0435 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0432\u043e\u0438\u043d\u044b \u043a\u043b\u0430\u043d\u0430, \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0434\u0430\u0436\u0435 \u0432\u043e \u0441\u043d\u0435. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 1500 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[3]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[3],onClick:function(){return a("give_ability",{style:"caltrop",row:"4"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.caltrop,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041b\u0415\u041a\u0422\u0420\u041e-\u0427\u0415\u0421\u041d\u041e\u041a",content:"\u0427\u0430\u0449\u0435 \u0438\u0445 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043b\u0442\u0440\u043e\u043f\u044b, \u0438\u0437-\u0437\u0430 \u0437\u0430\u043f\u0443\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0439 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0441\u044a\u0435\u0441\u0442\u043d\u044b\u043c \u0447\u0435\u0441\u043d\u043e\u043a\u043e\u043c. \n\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0437\u0430\u0434\u0438 \u0432\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u043f\u0440\u0435\u0441\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u043b\u043e\u0432\u0443\u0448\u043a\u0438. \n\u041b\u043e\u0432\u0443\u0448\u043a\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10 \u0441\u0435\u043a\u0443\u043d\u0434. \u0422\u0430\u043a \u0436\u0435 \u043e\u043d\u0438 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0442 - \u0435\u0441\u043b\u0438 \u043d\u0430 \u043d\u0438\u0445 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0442\u044c. \n\u0411\u043e\u043b\u044c \u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u043d\u0430 \u043d\u0438\u0445 \u043d\u0430\u0441\u0442\u0438\u0433\u043d\u0435\u0442 \u0434\u0430\u0436\u0435 \u0440\u043e\u0431\u043e\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d- \u043d\u044b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438. \n\u0412\u044b \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b \u043e\u0442 \u043d\u0438\u0445. \u041d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0439\u0442\u0435 \u043d\u0430 \u0441\u0432\u043e\u0438 \u0436\u0435 \u043b\u043e\u0432\u0443\u0448\u043a\u0438! \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 1500 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0430.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[4]?d[0].disabled:d[0].green,height:"64px",width:"100%",disabled:s[4],onClick:function(){return a("give_ability",{style:"cloning",row:"5"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.cloning,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0422\u041e\u0420\u041e\u0419 \u0428\u0410\u041d\u0421",content:"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043c\u043d\u043e\u0433\u0438\u0435 \u0443\u0431\u0438\u0439\u0446\u044b \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u0432\u0430\u044f \u0441\u0432\u043e\u0438 \u043c\u0438\u0441\u0441\u0438\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u043b\u0438 \u0441\u0430\u043c\u043e\u0443\u0431\u0438\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043b\u0430\u043f\u0430\u0445 \u0432\u0440\u0430\u0433\u0430. \n\u0421\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430. \u041c\u043e\u0449\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0432\u0430\u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441 \u0442\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u0430. \n\u042d\u0442\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u0448\u0430\u043d\u0441, \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0432\u0430\u0441 \u043a \u0441\u0435\u0431\u0435 \u0438 \u0438\u0437\u043b\u0435\u0447\u0438\u0432 \u043b\u044e\u0431\u044b\u0435 \u0442\u0440\u0430\u0432\u043c\u044b. \n\u041c\u044b \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u043f\u0440\u043e \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0438\u0434\u0435\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u043b\u0435\u043d\u043e\u0432 \u043a\u043b\u0430\u043d\u0430. \u041d\u043e \u0443\u0432\u0435\u0440\u044f\u0435\u043c \u0432\u0430\u0441, \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \n\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0438 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044e. \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043f\u0430\u0441\u0451\u0442 \u0432\u0430\u0441 \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \n\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0440\u0438 \u0441\u043c\u0435\u0440\u0442\u0438.",position:"right"})]})]})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"33%",shrink:1,children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u0421\u0442\u0430\u043b\u044c",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u042f\u0440\u043e\u0441\u0442\u044c \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043b\u044e\u0434\u044f\u043c. \u0421\u0438\u043b\u0430, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043e\u0440\u0443\u0434\u0438\u044f \u0432\u044b\u0448\u0435 \u0438\u0445 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0420\u0430\u0437\u0438\u0442\u0435 \u0438\u0445 \u043a\u0430\u043a \u0445\u0438\u0449\u043d\u0438\u043a \u0447\u0442\u043e \u0440\u0430\u0437\u0438\u0442 \u0441\u0432\u043e\u044e \u0434\u043e\u0431\u044b\u0447\u0443. \u041f\u043e\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0432\u043a\u0443\u0441 \u0441\u0442\u0430\u043b\u0438!",tooltipPosition:"bottom"}),style:{"text-align":"center",background:"rgba(80, 20, 20, 1)"}}),(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_red",success:0,danger:0,align:"center",children:[(0,o.createComponentVNode)(2,i.Button,{className:s[0]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[0],onClick:function(){return a("give_ability",{style:"shuriken",row:"1"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.shuriken,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041d\u0415\u0420\u0413\u0415\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0415 \u0421\u042e\u0420\u0418\u041a\u0415\u041d\u042b",content:"\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u0441\u043a\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043a\u0440\u044b\u0442\u043e\u0435 \u0432 \u043f\u0435\u0440\u0447\u0430\u0442\u043a\u0430\u0445 \u043a\u043e\u0441\u0442\u044e\u043c\u0430. \n\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u043e \u0442\u0440\u0438 \u0441\u044e\u0440\u0438\u043a\u0435\u043d\u0430, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0436\u0430\u0442\u043e\u0439 \u044d\u043d\u0435\u0440\u0433\u0438\u0438, \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e. \n\u0421\u044e\u0440\u0438\u043a\u0435\u043d\u044b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0438\u0437\u043d\u0443\u0440\u044f\u044e\u0442 \u0432\u0440\u0430\u0433\u043e\u0432 \u0438 \u043d\u0430\u043d\u043e\u0441\u044f\u0442 \u0441\u043b\u0430\u0431\u044b\u0439 \u043e\u0436\u043e\u0433\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u043d. \n\u0422\u0430\u043a \u0436\u0435 \u043e\u043d\u0438 \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0435\u043a\u043b\u043e, \u043a\u0430\u043a \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043b\u0430\u0437\u0435\u0440\u043d\u044b\u0435 \u0441\u043d\u0430\u0440\u044f\u0434\u044b. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0430: 300 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[1]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[1],onClick:function(){return a("give_ability",{style:"adrenal",row:"2"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.adrenal,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0412\u0421\u041f\u041b\u0415\u0421\u041a \u0410\u0414\u0420\u0415\u041d\u0410\u041b\u0418\u041d\u0410",content:"\u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442 \u0432 \u0432\u0430\u0441 \u043c\u043e\u0449\u043d\u0443\u044e \u044d\u043a\u0441\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u044b\u0432\u043e\u0440\u043e\u0442\u043a\u0443 \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0449\u0443\u044e \u0432\u0430\u0441 \u0432 \u0431\u043e\u044e \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0443\u044e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u043a\u043b\u0435\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0433\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432. \n\u041a\u043e\u0441\u0442\u044e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0441\u044b\u0432\u043e\u0440\u043e\u0442\u043a\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0440\u0430\u043d\u0430. \u0427\u0442\u043e \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0434\u0430\u0451\u0442 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u0432 \u0432\u0438\u0434\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0434\u0438\u044f \u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \n\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u0440\u0430\u0442\u044b \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0436\u0435\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u043e\u0432 \u0443\u0440\u0430\u043d\u0430 \u043f\u043e\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u0441\u0442\u044e\u043c.",position:"bottom-right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[2]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[2],onClick:function(){return a("give_ability",{style:"emp",row:"3"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.emp,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041b\u0415\u041a\u0422\u0420\u041e\u041c\u0410\u0413\u041d\u0418\u0422\u041d\u042b\u0419 \u0412\u0417\u0420\u042b\u0412",content:"\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043c\u0430\u0433\u043d\u0438\u0442\u043d\u044b\u0435 \u0432\u043e\u043b\u043d\u044b \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0442, \u043f\u043e\u0434\u0440\u044b\u0432\u0430\u044e\u0442 \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0430\u044e\u0442 - \u043a\u0438\u0431\u043e\u0440\u0433\u043e\u0432, \u0434\u0440\u043e\u043d\u043e\u0432, \u041a\u041f\u0411, \u044d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435, \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0421\u0432\u0435\u0442\u043e\u0448\u0443\u043c\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0432\u044f\u0437\u0438 \u0438 \u0442.\u0434. \n\u042d\u0442\u043e\u0442 \u0432\u0437\u0440\u044b\u0432 \u043c\u043e\u0436\u0435\u0442 \u043a\u0430\u043a \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u0430\u043c \u0432 \u0431\u043e\u044e, \u0442\u0430\u043a \u0438 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043d\u0430\u0432\u0440\u0435\u0434\u0438\u0442\u044c. \u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0439\u0442\u0435 \u043c\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c. \n\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u043e \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0449\u0435\u043c \u043e\u0442 \u0441\u0432\u0435\u0442\u0430 \u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u0438\u0437\u043e\u0440\u0430. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u0435 \u043e\u0441\u043b\u0435\u043f\u043d\u0443\u0442\u044c, \u043f\u0440\u0438 \u043f\u043e\u0434\u0440\u044b\u0432\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \n\u0412\u0437\u0440\u044b\u0432 - \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0430\u0441. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 5000 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u041f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430: 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[3]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[3],onClick:function(){return a("give_ability",{style:"energynet",row:"4"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.energynet,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u042d\u041d\u0415\u0420\u0413\u0415\u0422\u0418\u0427\u0415\u0421\u041a\u0410\u042f \u0421\u0415\u0422\u042c",content:"\u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043b\u043e\u0432\u0438\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u0432\u0430\u043c\u0438 \u0446\u0435\u043b\u044c \u0432 \u043e\u0431\u0435\u0437\u0434\u0432\u0438\u0436\u0438\u0432\u0430\u044e\u0449\u0443\u044e \u043b\u043e\u0432\u0443\u0448\u043a\u0443. \n\u0418\u0437 \u043b\u043e\u0432\u0443\u0448\u043a\u0438 \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0432 \u0435\u0451 \u043b\u044e\u0431\u044b\u043c \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u043c. \n\u041e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0435\u0439\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0430\u0433\u0430. \n\u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0432 \u043d\u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0439\u043c\u0430\u0442\u044c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u044b\u0445 \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0430\u0434\u043e\u0435\u0434\u043b\u0438\u0432\u044b\u0445 \u043e\u0445\u0440\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u0442\u043e\u0432. \n\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0441\u0435\u0442\u044c \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0436\u0435\u0440\u0442\u0432\u0435 \u043e\u0442\u0441\u0442\u0440\u0435\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0432\u0430\u0441. \n\u0422\u0430\u043a \u0436\u0435 \u0441\u0435\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043a\u0438\u043d\u0443\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0451\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u0435\u0439. \n\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0441\u0435\u0442\u0438 - \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0430\u0441. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \n\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438: 4000 \u0435\u0434. \u044d\u043d\u0435\u0440\u0433\u0438\u0438.",position:"right"})]}),(0,o.createComponentVNode)(2,i.Button,{className:s[4]?d[0].disabled:d[0].red,height:"64px",width:"100%",disabled:s[4],onClick:function(){return a("give_ability",{style:"spider_red",row:"5"})},children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+l.spider_red,style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Tooltip,{title:"\u0411\u041e\u0415\u0412\u041e\u0415 \u0418\u0421\u041a\u0423\u0421\u0421\u0422\u0412\u041e \n\u041f\u041e\u041b\u0417\u0423\u0427\u0415\u0419 \u0412\u0414\u041e\u0412\u042b",content:"\u0411\u043e\u0435\u0432\u043e\u0435 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e \u043d\u0438\u043d\u0434\u0437\u044f \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0446\u0435\u043d\u0442\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0451\u043c\u043e\u0432. \n\u0412 \u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0438\u0451\u043c\u044b: \n\u0412\u044b\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0440\u0443\u043a\u0438 - \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0435\u0440\u0442\u0432\u0443 \u0432\u044b\u0440\u043e\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0451 \u043e\u0440\u0443\u0436\u0438\u0435. \n\u0423\u0434\u0430\u0440 \u043b\u0430\u0434\u043e\u043d\u044c\u044e - \u043e\u0442\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0436\u0435\u0440\u0442\u0432\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u0442 \u0432\u0430\u0441, \u043b\u0438\u0448\u0430\u044f \u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0441\u0438\u044f. \n\u041f\u0435\u0440\u0435\u0440\u0435\u0437\u0430\u043d\u0438\u0435 \u0448\u0435\u0438 - \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u0435\u0437\u0433\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043b\u0435\u0436\u0430\u0447\u0443\u044e \u0436\u0435\u0440\u0442\u0432\u0443 \u043a\u0430\u0442\u0430\u043d\u043e\u0439 \u0432\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0443\u043a\u0435. \n\u042d\u043d\u0435\u0440\u0433\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0442\u043e\u0440\u043d\u0430\u0434\u043e - \u0440\u0430\u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0432\u0440\u0430\u0433\u043e\u0432 \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0430\u0441 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0431\u043b\u0430\u043a\u043e \u0434\u044b\u043c\u0430 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0434\u044b\u043c\u043e\u0432\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u044d\u043d\u0435\u0440\u0433\u0438\u0438. \n\u0422\u0430\u043a \u0436\u0435 \u0432\u044b \u043e\u0431\u0443\u0447\u0430\u0435\u0442\u0435\u0441\u044c \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0448\u0430\u043d\u0441\u043e\u043c \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u043d\u044f\u0440\u044f\u0434\u044b \u0432\u0440\u0430\u0433\u043e\u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.",position:"right"})]})]})]})]})})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,i.Section,{title:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0448\u0430\u0442\u0442\u043b\u043e\u043c",style:{"text-align":"center"},buttons:(0,o.createComponentVNode)(2,i.Button,{content:"?",tooltip:"\u041f\u0430\u043d\u0435\u043b\u044c \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0430\u0448\u0438\u043c \u043b\u0438\u0447\u043d\u044b\u043c \u0448\u0430\u0442\u0442\u043b\u043e\u043c. \u0422\u0430\u043a \u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0443 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0441\u0430\u043c\u043e\u0433\u043e \u0448\u0430\u0442\u0442\u043b\u0430!",tooltipPosition:"right"}),children:(0,o.createComponentVNode)(2,i.Flex,{ml:2,children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041f\u043e\u0437\u0438\u0446\u0438\u044f",children:l.status?l.status:(0,o.createComponentVNode)(2,i.NoticeBox,{color:"red",children:"Shuttle Missing"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0412\u0430\u0448\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f",children:l.player_pos}),!!l.shuttle&&(!!l.docking_ports_len&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0442\u0442\u043b",children:l.docking_ports.map((function(e){return(0,o.createComponentVNode)(2,i.Button,{icon:"chevron-right",content:e.name,onClick:function(){return c("move",{move:e.id})}},e.name)}))})||(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"Status",color:"red",children:(0,o.createComponentVNode)(2,i.NoticeBox,{color:"red",children:"Shuttle Locked"})}),!!l.admin_controlled&&(0,o.createComponentVNode)(2,a.LabeledListItem,{label:"\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f",children:(0,o.createComponentVNode)(2,i.Button,{icon:"exclamation-circle",content:"\u0417\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e",disabled:!l.status,onClick:function(){return c("request")}})})],0))]})})})};t.ShuttleConsole=p;var m=function(e,t){var n=(0,r.useBackend)(t).data,a=n.randomPercent,c=n.allActionsPreview,l=n.color_choice;return(0,o.createComponentVNode)(2,i.Section,{stretchContents:!0,children:(0,o.createComponentVNode)(2,i.ProgressBar,{color:l,value:a,minValue:0,maxValue:100,children:(0,o.createVNode)(1,"center",null,(0,o.createComponentVNode)(2,i.NoticeBox,{className:"NoticeBox_"+l,mt:1,children:[(0,o.createVNode)(1,"img",null,null,1,{height:"64px",width:"64px",src:"data:image/jpeg;base64,"+c["spider_"+l],style:{"margin-left":"-6px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createVNode)(1,"br"),"Loading ",a+"%"]}),2)})})},h=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.state={lastText:"text do be there",currentDisplay:[]},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=r.prototype;return a.tick=function(){var e=this.props,t=this.state;e.allMessages===t.lastText||e.end_terminal?e.end_terminal&&(clearTimeout(this.timer),setTimeout(e.onFinished,e.finishedTimeout)):(t.currentDisplay.push(e.allMessages),t.lastText=e.allMessages)},a.componentDidMount=function(){var e=this,t=this.props.linesPerSecond,n=void 0===t?2.5:t;this.timer=setInterval((function(){return e.tick()}),1e3/n)},a.componentWillUnmount=function(){clearTimeout(this.timer)},a.render=function(){return(0,o.createComponentVNode)(2,i.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)},function(e,t,n){"use strict";t.__esModule=!0,t.StationAlertConsoleContent=t.StationAlertConsole=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.StationAlertConsole=function(){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,c)})})};var c=function(e,t){var n=(0,r.useBackend)(t).data.alarms||[];return Object.keys(n).map((function(e){var t,r;return(0,o.createComponentVNode)(2,i.Section,{title:e+" Alarms",children:(0,o.createVNode)(1,"ul",null,0===(null==(t=n[e])?void 0:t.length)?(0,o.createVNode)(1,"li","color-good","Systems Nominal",16):null==(r=n[e])?void 0:r.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)})),0)},e)}))};t.StationAlertConsoleContent=c},function(e,t,n){"use strict";t.__esModule=!0,t.SuitStorage=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.SuitStorage=function(e,t){var n=(0,r.useBackend)(t).data.uv;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{display:"flex",className:"Layout__content--flexColumn",children:[!!n&&(0,o.createComponentVNode)(2,i.Dimmer,{backgroundColor:"black",opacity:.85,children:(0,o.createComponentVNode)(2,i.Flex,{children:(0,o.createComponentVNode)(2,i.Flex.Item,{bold:!0,textAlign:"center",mb:2,children:[(0,o.createComponentVNode)(2,i.Icon,{name:"spinner",spin:1,size:4,mb:4}),(0,o.createVNode)(1,"br"),"Disinfection of contents in progress..."]})})}),(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,s)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,s=c.helmet,d=c.suit,u=c.magboots,p=c.mask,m=c.storage,h=c.open,f=c.locked;return(0,o.createComponentVNode)(2,i.Section,{title:"Stored Items",flexGrow:"1",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:f?"Unlock":"Lock",icon:f?"unlock":"lock",disabled:h,onClick:function(){return a("toggle_lock")}}),(0,o.createComponentVNode)(2,i.Button,{content:h?"Close unit":"Open unit",icon:h?"times-circle":"expand",color:h?"red":"green",disabled:f,onClick:function(){return a("toggle_open")}})],4),children:h&&!f?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,l,{object:s,label:"Helmet",missingText:"helmet",eject:"dispense_helmet"}),(0,o.createComponentVNode)(2,l,{object:d,label:"Suit",missingText:"suit",eject:"dispense_suit"}),(0,o.createComponentVNode)(2,l,{object:u,label:"Magboots",missingText:"magboots",eject:"dispense_magboots"}),(0,o.createComponentVNode)(2,l,{object:p,label:"Breathmask",missingText:"mask",eject:"dispense_mask"}),(0,o.createComponentVNode)(2,l,{object:m,label:"Storage",missingText:"storage item",eject:"dispense_storage"})]}):(0,o.createComponentVNode)(2,i.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{bold:!0,grow:"1",textAlign:"center",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:f?"lock":"exclamation-circle",size:"5",mb:3}),(0,o.createVNode)(1,"br"),f?"The unit is locked.":"The unit is closed."]})})})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=(n.data,e.object),l=e.label,s=e.missingText,d=e.eject;return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:l,children:(0,o.createComponentVNode)(2,i.Box,{my:.5,children:c?(0,o.createComponentVNode)(2,i.Button,{my:-1,icon:"eject",content:c,onClick:function(){return a(d)}}):(0,o.createComponentVNode)(2,i.Box,{color:"silver",bold:!0,children:["No ",s," found."]})})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data;return(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"cog",textAlign:"center",content:"Start Disinfection Cycle",disabled:c.locked,onClick:function(){return a("cook")}})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SupermatterMonitor=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=n(80);t.SupermatterMonitor=function(e,t){var n=(0,r.useBackend)(t);n.act;return 0===n.data.active?(0,o.createComponentVNode)(2,l):(0,o.createComponentVNode)(2,s)};var l=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:"Detected Supermatter Shards",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"sync",content:"Refresh",onClick:function(){return l("refresh")}}),children:(0,o.createComponentVNode)(2,i.Box,{m:1,children:0===s.supermatters.length?(0,o.createVNode)(1,"h3",null,"No shards detected",16):(0,o.createComponentVNode)(2,i.Table,{children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,c.TableCell,{children:"Area"}),(0,o.createComponentVNode)(2,c.TableCell,{children:"Integrity"}),(0,o.createComponentVNode)(2,c.TableCell,{children:"Details"})]}),s.supermatters.map((function(e){return(0,o.createComponentVNode)(2,c.TableRow,{children:[(0,o.createComponentVNode)(2,c.TableCell,{children:e.area_name}),(0,o.createComponentVNode)(2,c.TableCell,{children:[e.integrity,"%"]}),(0,o.createComponentVNode)(2,c.TableCell,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"sign-in-alt",content:"View",onClick:function(){return l("view",{view:e.uid})}})})]},e)}))]})})})})})},s=function(e,t){var n,c,l,s=(0,r.useBackend)(t),d=s.act,u=s.data;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{title:"Crystal Status",buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"caret-square-left",content:"Back",onClick:function(){return d("back")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Core Integrity",children:(0,o.createComponentVNode)(2,i.ProgressBar,{ranges:{good:[95,Infinity],average:[80,94],bad:[-Infinity,79]},minValue:"0",maxValue:"100",value:u.SM_integrity,children:[u.SM_integrity,"%"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Relative EER",children:(0,o.createComponentVNode)(2,i.Box,{color:(l=u.SM_power,l>300?"bad":l>150?"average":"good"),children:[u.SM_power," MeV/cm3"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,i.Box,{color:(c=u.SM_ambienttemp,c>5e3?"bad":c>4e3?"average":"good"),children:[u.SM_ambienttemp," K"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,i.Box,{color:(n=u.SM_ambientpressure,n>1e4?"bad":n>5e3?"average":"good"),children:[u.SM_ambientpressure," kPa"]})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Gas Composition",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen",children:[u.SM_gas_O2,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Carbon Dioxide",children:[u.SM_gas_CO2,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Nitrogen",children:[u.SM_gas_N2,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Plasma",children:[u.SM_gas_PL,"%"]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Other",children:[u.SM_gas_OTHER,"%"]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SyndicateComputerSimple=void 0;var o=n(0),r=n(1),i=n(2),a=(n(52),n(3));t.SyndicateComputerSimple=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data;return(0,o.createComponentVNode)(2,a.Window,{theme:"syndicate",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:l.rows.map((function(e){return(0,o.createComponentVNode)(2,i.Section,{title:e.title,buttons:(0,o.createComponentVNode)(2,i.Button,{content:e.buttontitle,disabled:e.buttondisabled,tooltip:e.buttontooltip,tooltipPosition:"left",onClick:function(){return c(e.buttonact)}}),children:[e.status,!!e.bullets&&(0,o.createComponentVNode)(2,i.Box,{children:e.bullets.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:e},e)}))})]},e.title)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SyndieCargoConsole=void 0;var o=n(0),r=n(43),i=n(24),a=n(1),c=n(2),l=n(3),s=(n(52),n(18));t.SyndieCargoConsole=function(e,t){return(0,o.createComponentVNode)(2,l.Window,{theme:"syndicate",children:(0,o.createComponentVNode)(2,l.Window.Content,{children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m)]})})};var d=function(e,t){var n=(0,a.useLocalState)(t,"contentsModal",null),r=n[0],i=n[1],l=(0,a.useLocalState)(t,"contentsModalTitle",null),s=l[0],d=l[1];return null!==r&&null!==s?(0,o.createComponentVNode)(2,c.Modal,{maxWidth:"75%",width:window.innerWidth+"px",maxHeight:.75*window.innerHeight+"px",mx:"auto",children:[(0,o.createComponentVNode)(2,c.Box,{width:"100%",bold:!0,children:(0,o.createVNode)(1,"h1",null,[s,(0,o.createTextVNode)(" contents:")],0)}),(0,o.createComponentVNode)(2,c.Box,{children:r.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:["- ",e]},e)}))}),(0,o.createComponentVNode)(2,c.Box,{m:2,children:(0,o.createComponentVNode)(2,c.Button,{content:"Close",onClick:function(){i(null),d(null)}})})]}):void 0},u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.is_public,s=void 0===l?0:l,d=i.cash,u=i.wait_time,p=i.is_cooldown,m=i.telepads_status,h=i.adminAddCash,f=m,C="",g=0,N="";return"Pads not linked!"===m?(g=0,C="Attempts to link telepads to the console.",N="Link pads"):p?p&&(N="Cooldown...",C="Pads are cooling off...",g=1,f=1!==u?m+" (ETA: "+u+" seconds)":m+" (ETA: "+u+" second)"):(g=0,C="Teleports your crates to the market. A reminder, some of the crates are directly stolen from NT trading routes. That means they can be locked. We are NOT sorry for the inconvenience",N="Teleport"),(0,o.createComponentVNode)(2,c.Section,{title:"Status",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[0===s&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Money Available",children:[d,(0,o.createComponentVNode)(2,c.Button,{tooltip:"Withdraw money from the console",content:"Withdraw",onClick:function(){return r("withdraw",d)}}),(0,o.createComponentVNode)(2,c.Button,{content:h,tooltip:"Bless the players with da money!",onClick:function(){return r("add_money",d)}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Telepads Status",children:f}),0===s&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,c.Button,{content:N,tooltip:C,disabled:g,onClick:function(){return r("teleport")}}),(0,o.createComponentVNode)(2,c.Button,{content:"View Syndicate Black Market Log",onClick:function(){return r("showMessages")}})]})]})})},p=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data,u=d.categories,p=d.supply_packs,m=(0,a.useSharedState)(t,"category","Emergency"),h=m[0],f=m[1],C=(0,a.useSharedState)(t,"search_text",""),g=C[0],N=C[1],b=(0,a.useLocalState)(t,"contentsModal",null),V=(b[0],b[1]),v=(0,a.useLocalState)(t,"contentsModalTitle",null),x=(v[0],v[1]),y=(0,s.createSearch)(g,(function(e){return e.name})),k=(0,r.flow)([(0,i.filter)((function(e){return e.cat===u.filter((function(e){return e.name===h}))[0].category||g})),g&&(0,i.filter)(y),(0,i.sortBy)((function(e){return e.name.toLowerCase()}))])(p),w="Crate Catalogue";return g?w="Results for '"+g+"':":h&&(w="Browsing "+h),(0,o.createComponentVNode)(2,c.Section,{title:w,buttons:(0,o.createComponentVNode)(2,c.Dropdown,{width:"190px",options:u.map((function(e){return e.name})),selected:h,onSelected:function(e){return f(e)}}),children:[(0,o.createComponentVNode)(2,c.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return N(t)},mb:1}),(0,o.createComponentVNode)(2,c.Box,{maxHeight:25,overflowY:"auto",overflowX:"hidden",children:(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:k.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{bold:!0,children:[e.name," (",e.cost," Credits)"]}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,c.Button,{content:"Order 1",icon:"shopping-cart",onClick:function(){return l("order",{crate:e.ref,multiple:0})}}),(0,o.createComponentVNode)(2,c.Button,{content:"Order Multiple",icon:"cart-plus",onClick:function(){return l("order",{crate:e.ref,multiple:1})}}),(0,o.createComponentVNode)(2,c.Button,{content:"View Contents",icon:"search",onClick:function(){V(e.contents),x(e.name)}})]})]},e.name)}))})})]})},m=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.requests,s=i.canapprove,d=i.orders;return(0,o.createComponentVNode)(2,c.Section,{title:"Details",children:(0,o.createComponentVNode)(2,c.Box,{maxHeight:15,overflowY:"auto",overflowX:"hidden",children:[(0,o.createComponentVNode)(2,c.Box,{bold:!0,children:"Requests"}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:l.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Reason: ",e.comment]})]}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,c.Button,{content:"Approve",color:"green",disabled:!s,onClick:function(){return r("approve",{ordernum:e.ordernum})}}),(0,o.createComponentVNode)(2,c.Button,{content:"Deny",color:"red",onClick:function(){return r("deny",{ordernum:e.ordernum})}})]})]},e.ordernum)}))}),(0,o.createComponentVNode)(2,c.Box,{bold:!0,children:"Confirmed Orders"}),(0,o.createComponentVNode)(2,c.Table,{m:"0.5rem",children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,c.Box,{italic:!0,children:["Reason: ",e.comment]})]})},e.ordernum)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TTSSeedsExplorerContent=t.TTSSeedsExplorer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c={0:"\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435",1:"Tier I",2:"Tier II",3:"Tier III",4:"Tier IV"},l={"\u041c\u0443\u0436\u0441\u043a\u043e\u0439":{icon:"mars",color:"blue"},"\u0416\u0435\u043d\u0441\u043a\u0438\u0439":{icon:"venus",color:"purple"},"\u041b\u044e\u0431\u043e\u0439":{icon:"venus-mars",color:"white"}},s=function(e,t,n,r){return void 0===r&&(r=null),e.map((function(e){var a,c=null!=(a=e[r])?a:e;return(0,o.createComponentVNode)(2,i.Button.Checkbox,{checked:t.includes(e),content:c,onClick:function(){t.includes(e)?n(t.filter((function(t){var n;return(null!=(n=t[r])?n:t)!==e}))):n([e].concat(t))}},c)}))};t.TTSSeedsExplorer=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{className:"Layout__content--flexColumn",children:(0,o.createComponentVNode)(2,d)})})};var d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,d=n.data,u=d.providers,p=d.seeds,m=d.selected_seed,h=d.phrases,f=d.donator_level,C=p.map((function(e){return e.category})).filter((function(e,t,n){return n.indexOf(e)===t})),g=p.map((function(e){return e.gender})).filter((function(e,t,n){return n.indexOf(e)===t})),N=p.map((function(e){return e.donator_level})).filter((function(e,t,n){return n.indexOf(e)===t})).map((function(e){return c[e]})),b=(0,r.useLocalState)(t,"selectedProviders",u),V=b[0],v=b[1],x=(0,r.useLocalState)(t,"selectedGenders",g),y=x[0],k=x[1],w=(0,r.useLocalState)(t,"selectedCategories",C),_=w[0],B=w[1],S=(0,r.useLocalState)(t,"selectedDonatorLevels",N),L=S[0],A=S[1],I=(0,r.useLocalState)(t,"selectedPhrase",h[0]),E=I[0],D=I[1],T=(0,r.useLocalState)(t,"searchtext",""),F=T[0],M=T[1],P=s(u,V,v,"name"),O=s(g,y,k),R=s(C,_,B),j=s(N,L,A),U=(0,o.createComponentVNode)(2,i.Dropdown,{options:h,selected:E.replace(/(.{25})..+/,"$1..."),width:"220px",onSelected:function(e){return D(e)}}),z=(0,o.createComponentVNode)(2,i.Input,{placeholder:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435...",fluid:!0,onInput:function(e,t){return M(t)}}),W=p.sort((function(e,t){var n=e.name.toLowerCase(),o=t.name.toLowerCase();return n>o?1:n0&&m!==e.name?"orange":"white",children:e.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,opacity:m===e.name?.5:.25,textAlign:"left",children:e.category}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,opacity:.5,textColor:m===e.name?"white":l[e.gender].color,textAlign:"left",children:(0,o.createComponentVNode)(2,i.Icon,{mx:1,size:1.2,name:l[e.gender].icon})}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,opacity:.5,textColor:"white",textAlign:"right",children:e.donator_level>0&&(0,o.createFragment)([c[e.donator_level],(0,o.createComponentVNode)(2,i.Icon,{ml:1,mr:2,name:"coins"})],0)})]},e.name)}));return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"\u0424\u0438\u043b\u044c\u0442\u0440\u044b",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b",children:P}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041f\u043e\u043b",children:O}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438",children:R}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438",children:j}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u0424\u0440\u0430\u0437\u0430",children:U}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"\u041f\u043e\u0438\u0441\u043a",children:z})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"\u0413\u043e\u043b\u043e\u0441\u0430 ("+W.length+"/"+p.length+")",flexGrow:"1",children:(0,o.createComponentVNode)(2,i.Table,{children:H})}),(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.BlockQuote,{children:[(0,o.createComponentVNode)(2,i.Box,{children:"\u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u0447\u0430\u0441\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043e\u0432 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430."}),(0,o.createComponentVNode)(2,i.Box,{mt:2,italic:!0,children:"\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u043c Discord-\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0435."})]})})],4)};t.TTSSeedsExplorerContent=d},function(e,t,n){"use strict";t.__esModule=!0,t.TachyonArrayContent=t.TachyonArray=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.TachyonArray=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.records,u=void 0===d?[]:d,p=s.explosion_target,m=s.toxins_tech,h=s.printing;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shift's Target",children:p}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Current Toxins Level",children:m}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Administration",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"print",content:"Print All Logs",disabled:!u.length||h,align:"center",onClick:function(){return l("print_logs")}}),(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash",content:"Delete All Logs",disabled:!u.length,color:"bad",align:"center",onClick:function(){return l("delete_logs")}})]})]})}),u.length?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,i.NoticeBox,{children:"No Records"})]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.records,l=void 0===c?[]:c;return(0,o.createComponentVNode)(2,i.Section,{title:"Logged Explosions",children:(0,o.createComponentVNode)(2,i.Flex,{children:(0,o.createComponentVNode)(2,i.Flex.Item,{children:(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:"Time"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Epicenter"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Actual Size"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Theoretical Size"})]}),l.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.logged_time}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.epicenter}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.actual_size_message}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.theoretical_size_message}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button.Confirm,{icon:"trash",content:"Delete",color:"bad",onClick:function(){return a("delete_record",{index:e.index})}})})]},e.index)}))]})})})})};t.TachyonArrayContent=c},function(e,t,n){"use strict";t.__esModule=!0,t.Tank=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.Tank=function(e,t){var n,c=(0,r.useBackend)(t),l=c.act,s=c.data;return n=s.has_mask?(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mask",children:(0,o.createComponentVNode)(2,i.Button,{icon:s.connected?"check":"times",content:s.connected?"Internals On":"Internals Off",selected:s.connected,onClick:function(){return l("internals")}})}):(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Mask",color:"red",children:"No Mask Equipped"}),(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Tank Pressure",children:(0,o.createComponentVNode)(2,i.ProgressBar,{value:s.tankPressure/1013,ranges:{good:[.35,Infinity],average:[.15,.35],bad:[-Infinity,.15]},children:s.tankPressure+" kPa"})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Release Pressure",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"fast-backward",disabled:s.ReleasePressure===s.minReleasePressure,tooltip:"Min",onClick:function(){return l("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,i.NumberInput,{animated:!0,value:parseFloat(s.releasePressure),width:"65px",unit:"kPa",minValue:s.minReleasePressure,maxValue:s.maxReleasePressure,onChange:function(e,t){return l("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"fast-forward",disabled:s.ReleasePressure===s.maxReleasePressure,tooltip:"Max",onClick:function(){return l("pressure",{pressure:"max"})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"undo",content:"",disabled:s.ReleasePressure===s.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),i=n(2),a=n(3);t.TankDispenser=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.o_tanks,d=l.p_tanks;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Dispense Oxygen Tank ("+s+")",disabled:0===s,icon:"arrow-circle-down",onClick:function(){return c("oxygen")}})}),(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Dispense Plasma Tank ("+d+")",disabled:0===d,icon:"arrow-circle-down",onClick:function(){return c("plasma")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TcommsCore=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.TcommsCore=function(e,t){var n=(0,r.useBackend)(t),u=(n.act,n.data.ion),p=(0,r.useLocalState)(t,"tabIndex",0),m=p[0],h=p[1];return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[1===u&&(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===m,onClick:function(){return h(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"wrench"}),"Configuration"]},"ConfigPage"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===m,onClick:function(){return h(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"link"}),"Device Linkage"]},"LinkagePage"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:2===m,onClick:function(){return h(2)},children:[(0,o.createComponentVNode)(2,i.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,s);case 2:return(0,o.createComponentVNode)(2,d);default:return"SOMETHING WENT VERY WRONG PLEASE AHELP"}}(m)]})})};var c=function(){return(0,o.createComponentVNode)(2,i.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),a=n.act,c=n.data,l=c.active,s=c.sectors_available,d=c.nttc_toggle_jobs,u=c.nttc_toggle_job_color,p=c.nttc_toggle_name_color,m=c.nttc_toggle_command_bold,h=c.nttc_job_indicator_type,f=c.nttc_setting_language,C=c.network_id;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Machine Power",children:(0,o.createComponentVNode)(2,i.Button,{content:l?"On":"Off",selected:l,icon:"power-off",onClick:function(){return a("toggle_active")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Sector Coverage",children:s})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Radio Configuration",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Job Announcements",children:(0,o.createComponentVNode)(2,i.Button,{content:d?"On":"Off",selected:d,icon:"user-tag",onClick:function(){return a("nttc_toggle_jobs")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Job Departmentalisation",children:(0,o.createComponentVNode)(2,i.Button,{content:u?"On":"Off",selected:u,icon:"clipboard-list",onClick:function(){return a("nttc_toggle_job_color")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name Departmentalisation",children:(0,o.createComponentVNode)(2,i.Button,{content:p?"On":"Off",selected:p,icon:"user-tag",onClick:function(){return a("nttc_toggle_name_color")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Command Amplification",children:(0,o.createComponentVNode)(2,i.Button,{content:m?"On":"Off",selected:m,icon:"volume-up",onClick:function(){return a("nttc_toggle_command_bold")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Advanced",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Job Announcement Format",children:(0,o.createComponentVNode)(2,i.Button,{content:h||"Unset",selected:h,icon:"pencil-alt",onClick:function(){return a("nttc_job_indicator_type")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Language Conversion",children:(0,o.createComponentVNode)(2,i.Button,{content:f||"Unset",selected:f,icon:"globe",onClick:function(){return a("nttc_setting_language")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Network ID",children:(0,o.createComponentVNode)(2,i.Button,{content:C||"Unset",selected:C,icon:"server",onClick:function(){return a("network_id")}})})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Maintenance",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Import Configuration",icon:"file-import",onClick:function(){return a("import")}}),(0,o.createComponentVNode)(2,i.Button,{content:"Export Configuration",icon:"file-export",onClick:function(){return a("export")}})]})],4)},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.link_password,s=c.relay_entries;return(0,o.createComponentVNode)(2,i.Section,{title:"Device Linkage",children:[(0,o.createComponentVNode)(2,i.LabeledList,{children:(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Linkage Password",children:(0,o.createComponentVNode)(2,i.Button,{content:l||"Unset",selected:l,icon:"lock",onClick:function(){return a("change_password")}})})}),(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:"Network Address"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Network ID"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Sector"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Unlink"})]}),s.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.addr}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.net_id}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.sector}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:1===e.status?(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Online"}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Offline"})}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Unlink",icon:"unlink",onClick:function(){return a("unlink",{addr:e.addr})}})})]},e.addr)}))]})]})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.filtered_users;return(0,o.createComponentVNode)(2,i.Section,{title:"User Filtering",buttons:(0,o.createComponentVNode)(2,i.Button,{content:"Add User",icon:"user-plus",onClick:function(){return a("add_filter")}}),children:(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,{style:{width:"90%"},children:"User"}),(0,o.createComponentVNode)(2,i.Table.Cell,{style:{width:"10%"},children:"Actions"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Remove",icon:"user-times",onClick:function(){return a("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),i=n(2),a=n(3);t.TcommsRelay=function(e,t){var n=(0,r.useBackend)(t),s=n.act,d=n.data,u=d.linked,p=d.active,m=d.network_id;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Section,{title:"Relay Configuration",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Machine Power",children:(0,o.createComponentVNode)(2,i.Button,{content:p?"On":"Off",selected:p,icon:"power-off",onClick:function(){return s("toggle_active")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Network ID",children:(0,o.createComponentVNode)(2,i.Button,{content:m||"Unset",selected:m,icon:"server",onClick:function(){return s("network_id")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Link Status",children:1===u?(0,o.createComponentVNode)(2,i.Box,{color:"green",children:"Linked"}):(0,o.createComponentVNode)(2,i.Box,{color:"red",children:"Unlinked"})})]})}),1===u?(0,o.createComponentVNode)(2,c):(0,o.createComponentVNode)(2,l)]})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data,l=c.linked_core_id,s=c.linked_core_addr,d=c.hidden_link;return(0,o.createComponentVNode)(2,i.Section,{title:"Link Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Linked Core ID",children:l}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Linked Core Address",children:s}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Hidden Link",children:(0,o.createComponentVNode)(2,i.Button,{content:d?"Yes":"No",icon:d?"eye-slash":"eye",selected:d,onClick:function(){return a("toggle_hidden_link")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Unlink",children:(0,o.createComponentVNode)(2,i.Button,{content:"Unlink",icon:"unlink",color:"red",onClick:function(){return a("unlink")}})})]})})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act,c=n.data.cores;return(0,o.createComponentVNode)(2,i.Section,{title:"Detected Cores",children:(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:"Network Address"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Network ID"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Sector"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Link"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.addr}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.net_id}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:e.sector}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Link",icon:"link",onClick:function(){return a("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),i=n(2),a=n(3),c=n(188);t.Teleporter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,s=n.data,d=s.targetsTeleport?s.targetsTeleport:{},u=s.calibrated,p=s.calibrating,m=s.powerstation,h=s.regime,f=s.teleporterhub,C=s.target,g=s.locked,N=s.accuracy;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(!m||!f)&&(0,o.createComponentVNode)(2,i.Section,{title:"Error",children:[f,!m&&(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:" Powerstation not linked "}),m&&!f&&(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:" Teleporter hub not linked "})]}),m&&f&&(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Regime",children:[(0,o.createComponentVNode)(2,i.Button,{tooltip:"Teleport to another teleport hub. ",color:1===h?"good":null,onClick:function(){return l("setregime",{regime:1})},children:"Gate"}),(0,o.createComponentVNode)(2,i.Button,{tooltip:"One-way teleport. ",color:0===h?"good":null,onClick:function(){return l("setregime",{regime:0})},children:"Teleporter"}),(0,o.createComponentVNode)(2,i.Button,{tooltip:"Teleport to a location stored in a GPS device. ",color:2===h?"good":null,disabled:!g,onClick:function(){return l("setregime",{regime:2})},children:"GPS"})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Teleport target",children:[0===h&&(0,o.createComponentVNode)(2,i.Dropdown,{width:"220px",selected:C,options:Object.keys(d),color:"None"!==C?"default":"bad",onSelected:function(e){return l("settarget",{x:d[e].x,y:d[e].y,z:d[e].z})}}),1===h&&(0,o.createComponentVNode)(2,i.Dropdown,{width:"220px",selected:C,options:Object.keys(d),color:"None"!==C?"default":"bad",onSelected:function(e){return l("settarget",{x:d[e].x,y:d[e].y,z:d[e].z})}}),2===h&&(0,o.createComponentVNode)(2,i.Box,{children:C})]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Calibration",children:["None"!==C&&(0,o.createComponentVNode)(2,i.Grid,{children:[(0,o.createComponentVNode)(2,c.GridColumn,{size:"2",children:p&&(0,o.createComponentVNode)(2,i.Box,{color:"average",children:"In Progress"})||(u||N>=3)&&(0,o.createComponentVNode)(2,i.Box,{color:"good",children:"Optimal"})||(0,o.createComponentVNode)(2,i.Box,{color:"bad",children:"Sub-Optimal"})}),(0,o.createComponentVNode)(2,c.GridColumn,{size:"3",children:(0,o.createComponentVNode)(2,i.Box,{"class":"ml-1",children:(0,o.createComponentVNode)(2,i.Button,{icon:"sync-alt",tooltip:"Calibrates the hub. Accidents may occur when the calibration is not optimal.",disabled:!(!u&&!p),onClick:function(){return l("calibrate")}})})})]}),"None"===C&&(0,o.createComponentVNode)(2,i.Box,{lineHeight:"21px",children:"No target set"})]})]})}),!!(g&&m&&f&&2===h)&&(0,o.createComponentVNode)(2,i.Section,{title:"GPS",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"row",justify:"space-around",children:[(0,o.createComponentVNode)(2,i.Button,{content:"Upload GPS data",tooltip:"Loads the GPS data from the device.",icon:"upload",onClick:function(){return l("load")}}),(0,o.createComponentVNode)(2,i.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.ThiefKit=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.ThiefKit=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.uses,d=l.possible_uses,u=l.multi_uses,p=l.kits,m=l.choosen_kits;return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i.Section,{title:"\u041d\u0430\u0431\u043e\u0440 \u0413\u0438\u043b\u044c\u0434\u0438\u0438 \u0412\u043e\u0440\u043e\u0432:",children:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:[(0,o.createVNode)(1,"i",null,"\u0423\u0432\u0435\u0441\u0438\u0441\u0442\u0430\u044f \u043a\u043e\u0440\u043e\u0431\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0441\u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0433\u0438\u043b\u044c\u0434\u0438\u0438 \u0432\u043e\u0440\u043e\u0432.",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"i",null,"\u041d\u0430\u0431\u043e\u0440 \u0432\u043e\u0440\u0430-\u0448\u0440\u0435\u0434\u0438\u043d\u0433\u0435\u0440\u0430. \u041d\u0435\u043b\u044c\u0437\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0447\u0442\u043e \u0432 \u043d\u0451\u043c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u0448\u044c \u0432\u043d\u0443\u0442\u0440\u044c.",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"p",null,(0,o.createVNode)(1,"b",null,"\u041a\u0430\u043a\u043e\u0435 \u0441\u043d\u0430\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0451\u043c \u043b\u0435\u0436\u0438\u0442?:",16),2),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430\u0431\u043e\u0440\u043e\u0432:"),(0,o.createComponentVNode)(2,i.Box,{as:"span",color:s<=0?"good":s=d,onClick:function(){return c("randomKit")}}),children:(0,o.createComponentVNode)(2,i.LabeledList,{children:p&&p.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Button,{icon:"upload",content:"\u0412\u044b\u0431\u0440\u0430\u0442\u044c",disabled:e.was_taken||s>=d,onClick:function(){return c("takeKit",{item:e.type})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"undo",disabled:!e.was_taken,onClick:function(){return c("undoKit",{item:e.type})}})]}),children:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:e.desc})},e.type)}))})}),(0,o.createComponentVNode)(2,i.Section,{title:"\u0412\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b:",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:m&&m.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e.name,buttons:(0,o.createComponentVNode)(2,i.Button,{icon:"undo",content:"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440",onClick:function(){return c("undoKit",{item:e.type})}}),children:(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:" "})},e.type)}))})}),(0,o.createComponentVNode)(2,i.Section,{children:[(0,o.createComponentVNode)(2,i.Button,{content:"\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440",color:sp}),children:(0,o.createComponentVNode)(2,l.Box,{italic:!0,children:(0,a.decodeHtmlEntities)(e.desc)})},(0,a.decodeHtmlEntities)(e.name))}))})]})]})},f=function(e,t){var n=(0,c.useBackend)(t),s=(n.act,n.data.exploitable),u=(0,c.useLocalState)(t,"selectedRecord",s[0]),p=u[0],m=u[1],h=(0,c.useLocalState)(t,"searchText",""),f=h[0],C=h[1],g=function(e,t){void 0===t&&(t="");var n=(0,a.createSearch)(t,(function(e){return e.name}));return(0,i.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)}(s,f);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:g.map((function(e){return(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:e===p,onClick:function(){return m(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: "+p.name,children:[(0,o.createComponentVNode)(2,l.Box,{children:["Age: ",p.age]}),(0,o.createComponentVNode)(2,l.Box,{children:["Fingerprint: ",p.fingerprint]}),(0,o.createComponentVNode)(2,l.Box,{children:["Rank: ",p.rank]}),(0,o.createComponentVNode)(2,l.Box,{children:["Sex: ",p.sex]}),(0,o.createComponentVNode)(2,l.Box,{children:["Species: ",p.species]})]}),(0,o.createComponentVNode)(2,l.Section,{title:"Exploitable Records",children:(0,o.createComponentVNode)(2,l.Box,{prewrap:!0,children:p.exploit_record})})]})]})})};(0,p.modalRegisterBodyOverride)("become_contractor",(function(e,t){var n,r,i,a=(0,c.useBackend)(t).data,d=(a.contractor||{}).time_left,u=!!(null==a||null==(n=a.contractor)?void 0:n.available),m=!!(null==a||null==(r=a.contractor)?void 0:r.affordable),h=!!(null==a||null==(i=a.contractor)?void 0:i.accepted);return(0,o.createComponentVNode)(2,l.Section,{level:"2",m:"-1rem",pb:"1rem",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Icon,{name:"suitcase"}),(0,o.createTextVNode)("\xa0 Contracting Opportunity")],4),children:[(0,o.createComponentVNode)(2,l.Box,{mx:"0.5rem",mb:"0.5rem",children:[(0,o.createVNode)(1,"b",null,"Your achievements for the Syndicate have not gone unnoticed, agent. We have decided to give you the rare opportunity of becoming a Contractor.",16),(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"br"),"For the small price of 20 telecrystals, we will upgrade your rank to that of a Contractor, allowing you to undertake kidnapping contracts for TC and credits.",(0,o.createVNode)(1,"br"),"In addition, you will be supplied with a Contractor Kit which contains a Contractor Uplink, standard issue contractor gear and three random low cost items.",(0,o.createVNode)(1,"br"),(0,o.createVNode)(1,"br"),"More detailed instructions can be found within your kit, should you accept this offer."]}),(0,o.createComponentVNode)(2,l.Button.Confirm,{disabled:!u||h,italic:!u,bold:u,icon:u&&!h&&"check",color:"good",content:h?"Accepted":u?["Accept Offer",(0,o.createComponentVNode)(2,s.Countdown,{timeLeft:d,format:function(e,t){return" ("+t+")"}},"countdown")]:m?"Offer expired":"Insufficient TC",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){return(0,p.modalAnswer)(t,e.id,1)}})]})}))},function(e,t,n){"use strict";t.__esModule=!0,t.VampireSpecMenu=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.VampireSpecMenu=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"nologo",children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Flex,{justify:"space-around",children:[(0,o.createComponentVNode)(2,c),(0,o.createComponentVNode)(2,i.Divider,{vertical:1}),(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,i.Divider,{vertical:1}),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,i.Divider,{vertical:1}),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,i.Divider,{vertical:1}),(0,o.createComponentVNode)(2,u)]})})})};var c=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Hemomancer",children:[(0,o.createVNode)(1,"h3",null,"Focuses on blood magic and the manipulation of blood around you.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Vampiric claws",16),(0,o.createTextVNode)(": Unlocked at 150 blood, allows you to summon a robust pair of claws that attack rapidly, drain a targets blood, and heal you.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood Barrier",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to select two turfs and create a wall between them.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood tendrils",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to slow everyone in a targeted 3x3 area after a short delay.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Sanguine pool",16),(0,o.createTextVNode)(": Unlocked at 400 blood, allows you to travel at high speeds for a short duration. Doing this leaves behind blood splatters. You can move through anything but walls and space when doing this.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Predator senses",16),(0,o.createTextVNode)(": Unlocked at 600 blood, allows you to sniff out anyone within the same sector as you.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood eruption",16),(0,o.createTextVNode)(": Unlocked at 800 blood, allows you to manipulate all nearby blood splatters, in 4 tiles around you, into spikes that impale anyone stood ontop of them.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"The blood bringers rite",16),(0,o.createTextVNode)(": When toggled you will rapidly drain the blood of everyone who is nearby and use it to heal yourself slightly and remove any incapacitating effects rapidly.")],4),(0,o.createComponentVNode)(2,i.Button,{content:"Hemomancer",onClick:function(){return a("hemomancer")}})]})})},l=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Umbrae",children:[(0,o.createVNode)(1,"h3",null,"Focuses on darkness, stealth ambushing and mobility.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Cloak of darkness",16),(0,o.createTextVNode)(": Unlocked at 150 blood, when toggled, allows you to become nearly invisible and move rapidly when in dark regions. While active, burn damage is more effective against you.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Shadow anchor",16),(0,o.createTextVNode)(": Unlocked at 250 blood, casting it will create an anchor at the cast location after a short delay. If you then cast the ability again, you are teleported back to the anchor. If you do not cast again within 2 minutes, you are forced back to the anchor. It will not teleport you between Z levels.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Shadow snare",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to summon a trap that when crossed blinds and ensares the victim. This trap is hard to see, but withers in the light.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Dark passage",16),(0,o.createTextVNode)(": Unlocked at 400 blood, allows you to target a turf on screen, you will then teleport to that turf.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Extinguish",16),(0,o.createTextVNode)(": Unlocked at 600 blood, allows you to snuff out nearby electronic light sources and glowshrooms.")],4),(0,o.createVNode)(1,"b",null,"Shadow boxing",16),": Unlocked at 800 blood, sends out shadow clones towards a target, damaging them while you remain in range.",(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"Eternal darkness",16),(0,o.createTextVNode)(": When toggled, you consume yourself in unholy darkness, only the strongest of lights will be able to see through it. It will also cause nearby creatures to freeze.")],4),(0,o.createVNode)(1,"p",null,"In addition, you also gain permament X-ray vision.",16),(0,o.createComponentVNode)(2,i.Button,{content:"Umbrae",onClick:function(){return a("umbrae")}})]})})},s=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Gargantua",children:[(0,o.createVNode)(1,"h3",null,"Focuses on tenacity and melee damage.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Rejuvenate",16),(0,o.createTextVNode)(": Will heal you at an increased rate based on how much damage you have taken.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood swell",16),(0,o.createTextVNode)(": Unlocked at 150 blood, increases your resistance to physical damage, stuns and stamina for 30 seconds. While it is active you cannot fire guns.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Seismic stomp",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to stomp the ground to send out a shockwave, knocking people back.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood rush",16),(0,o.createTextVNode)(": Unlocked at 250 blood, gives you a short speed boost when cast.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood swell II",16),(0,o.createTextVNode)(": Unlocked at 400 blood, increases all melee damage by 10.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Overwhelming force",16),(0,o.createTextVNode)(": Unlocked at 600 blood, when toggled, if you bump into a door that you dont have access to, it will force it open. In addition, you cannot be pushed or pulled while it is active.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Demonic grasp",16),(0,o.createTextVNode)(": Unlocked at 800 blood, allows you to send out a demonic hand to snare someone. If you are on disarm/grab intent you will push/pull the target, respectively.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full Power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"Charge",16),(0,o.createTextVNode)(": You gain the ability to charge at a target. Destroying and knocking back pretty much anything you collide with.")],4),(0,o.createComponentVNode)(2,i.Button,{content:"Gargantua",onClick:function(){return a("gargantua")}})]})})},d=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Dantalion",children:[(0,o.createVNode)(1,"h3",null,"Focuses on thralling and illusions.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Enthrall",16),(0,o.createTextVNode)(": Unlocked at 150 blood, Thralls your target to your will, requires you to stand still. Does not work on mindshielded or already enthralled/mindslaved people.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Thrall cap",16),(0,o.createTextVNode)(": You can only thrall a max of 1 person at a time. This can be increased at 400 blood, 600 blood and at full power to a max of 4 thralls.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Thrall commune",16),(0,o.createTextVNode)(": Unlocked at 150 blood, Allows you to talk to your thralls, your thralls can talk back in the same way.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Subspace swap",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to swap positions with a target.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Pacify",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to pacify a target, preventing them from causing harm for 40 seconds.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Decoy",16),(0,o.createTextVNode)(": Unlocked at 400 blood, briefly turn invisible and send out an illusion to fool everyone nearby.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Rally thralls",16),(0,o.createTextVNode)(": Unlocked at 600 blood, removes all incapacitating effects from nearby thralls.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Blood bond",16),(0,o.createTextVNode)(": Unlocked at 800 blood, when cast, all nearby thralls become linked to you. If anyone in the network takes damage, it is shared equally between everyone in the network. If a thrall goes out of range, they will be removed from the network.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full Power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"Mass Hysteria",16),(0,o.createTextVNode)(": Casts a powerful illusion that, blinds then make everyone nearby perceive others to looks like random animals.")],4),(0,o.createComponentVNode)(2,i.Button,{content:"Dantalion",onClick:function(){return a("dantalion")}})]})})},u=function(e,t){var n=(0,r.useBackend)(t),a=n.act;n.data.subclasses;return(0,o.createComponentVNode)(2,i.Flex.Item,{grow:1,basis:"25%",children:(0,o.createComponentVNode)(2,i.Section,{title:"Bestia",children:[(0,o.createVNode)(1,"h3",null,"Focuses on transformations and trophies harvesting.",16),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Check Trophies",16),(0,o.createTextVNode)(": Unlocked at 150 blood, allows you to check current trophies amount and all the passive effects they provide.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Dissect",16),(0,o.createTextVNode)(": Unlocked at 150 blood, main source of gaining power, besides blood, allows you to harvest human organs, as a trophies, to passively increase your might.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Dissect Cap",16),(0,o.createTextVNode)(": You can only harvest one organ trophie at a time. This can be increased at 600 blood and at full power to a max of 3 trophies per victim.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Infected Trophy",16),(0,o.createTextVNode)(": Unlocked at 150 blood, allows you to stun enemies from the safe distance and infect them with the deadly Grave Fever.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Lunge",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to rapidly close distance to a victim or escape a dangerous situation.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Mark the Prey",16),(0,o.createTextVNode)(": Unlocked at 250 blood, allows you to mark a victim which drastically reduces their movement speed and forces them to take spontaneous actions.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Metamorphosis - Bats",16),(0,o.createTextVNode)(": Unlocked at 400 blood, allows you to shapeshift into the deadly and vicious space bats swarm.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Anabiosis",16),(0,o.createTextVNode)(": Unlocked at 600 blood, ancient technique which allows you to cure almost any wounds while sleeping in a coffin.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Summon Bats",16),(0,o.createTextVNode)(": Unlocked at 800 blood, allows you to call extraplanar space bats to aid you in combat.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createVNode)(1,"b",null,"Full Power",16),(0,o.createComponentVNode)(2,i.Divider),(0,o.createVNode)(1,"b",null,"Metamorphosis - Hound",16),(0,o.createTextVNode)(": Allows you to shapeshift into the ultimate form of bluespace entity which took over your soul.")],4),(0,o.createComponentVNode)(2,i.Button,{content:"Bestia",onClick:function(){return a("bestia")}})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VampireTrophiesStatus=void 0;var o=n(0),r=n(1),i=n(2),a=n(3),c=function(e){return(Math.round(10*e)/10).toFixed(1)};t.VampireTrophiesStatus=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{theme:"nologo",children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,C),(0,o.createComponentVNode)(2,g),(0,o.createComponentVNode)(2,N)]})})};var l=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data),c=a.hearts,l=a.lungs,s=a.livers,d=a.kidneys,u=a.eyes,p=a.ears,m=a.trophies_max_gen,h=a.trophies_max_crit,f=a.icon_hearts,C=a.icon_lungs,g=a.icon_livers,N=a.icon_kidneys,b=a.icon_eyes,V=a.icon_ears;return(0,o.createComponentVNode)(2,i.Section,{title:"Trophies",color:"red",textAlign:"center",verticalAlign:"middle",children:[(0,o.createComponentVNode)(2,i.Box,{display:"inline-block",width:"16.6%",children:[(0,o.createComponentVNode)(2,i.Box,{as:"img",src:"data:image/jpeg;base64,"+f,verticalAlign:"middle",style:{"margin-left":"-32px","margin-right":"-48px","margin-top":"-32px","margin-bottom":"-48px",height:"128px",width:"128px","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,i.Box,{bold:!0,textColor:cp;return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+d,style:{"vertical-align":"middle",width:"32px",margin:"0px","margin-left":"0px"}})}),(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:l.name}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,i.Box,{color:(s<=0?"bad":s<=l.max_amount/2&&"average")||"good",children:[s," in stock"]})}),(0,o.createComponentVNode)(2,i.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,disabled:N,icon:g,content:C,textAlign:"left",onClick:function(){return a("vend",{inum:l.inum})}})})]})};t.Vending=function(e,t){var n,l=(0,r.useBackend)(t),s=l.act,d=l.data,u=d.user,p=d.guestNotice,m=d.userMoney,h=d.chargesMoney,f=d.product_records,C=void 0===f?[]:f,g=d.coin_records,N=void 0===g?[]:g,b=d.hidden_records,V=void 0===b?[]:b,v=d.stock,x=(d.vend_ready,d.coin_name),y=d.inserted_item_name,k=d.panel_open,w=d.speaker,_=d.imagelist;return n=[].concat(C,N),d.extended_inventory&&(n=[].concat(n,V)),n=n.filter((function(e){return!!e})),(0,o.createComponentVNode)(2,a.Window,{title:"Vending Machine",resizable:!0,children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:[!!h&&(0,o.createComponentVNode)(2,i.Section,{title:"User",children:u&&(0,o.createComponentVNode)(2,i.Box,{children:["Welcome, ",(0,o.createVNode)(1,"b",null,u.name,0),","," ",(0,o.createVNode)(1,"b",null,u.job||"Unemployed",0),"!",(0,o.createVNode)(1,"br"),"Your balance is ",(0,o.createVNode)(1,"b",null,[m,(0,o.createTextVNode)(" credits")],0),"."]})||(0,o.createComponentVNode)(2,i.Box,{color:"light-grey",children:p})}),!!x&&(0,o.createComponentVNode)(2,i.Section,{title:"Coin",buttons:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:"Remove Coin",onClick:function(){return s("remove_coin",{})}}),children:(0,o.createComponentVNode)(2,i.Box,{children:x})}),!!y&&(0,o.createComponentVNode)(2,i.Section,{title:"Item",buttons:(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"eject",content:"Eject Item",onClick:function(){return s("eject_item",{})}}),children:(0,o.createComponentVNode)(2,i.Box,{children:y})}),!!k&&(0,o.createComponentVNode)(2,i.Section,{title:"Maintenance",children:(0,o.createComponentVNode)(2,i.Button,{icon:w?"check":"volume-mute",selected:w,content:"Speaker",textAlign:"left",onClick:function(){return s("toggle_voice",{})}})}),(0,o.createComponentVNode)(2,i.Section,{title:"Products",children:(0,o.createComponentVNode)(2,i.Table,{children:n.map((function(e){return(0,o.createComponentVNode)(2,c,{product:e,productStock:v[e.name],productImage:_[e.path]},e.name)}))})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VolumeMixer=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.VolumeMixer=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data.channels;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:(0,o.createComponentVNode)(2,i.Section,{height:"100%",overflow:"auto",children:l.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{fontSize:"1.25rem",color:"label",mt:t>0&&"0.5rem",children:e.name}),(0,o.createComponentVNode)(2,i.Box,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,i.Flex,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{width:"24px",color:"transparent",children:(0,o.createComponentVNode)(2,i.Icon,{name:"volume-off",size:"1.5",mt:"0.1rem",onClick:function(){return c("volume",{channel:e.num,volume:0})}})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",mx:"1rem",children:(0,o.createComponentVNode)(2,i.Slider,{minValue:0,maxValue:100,stepPixelSize:3.13,value:e.volume,onChange:function(t,n){return c("volume",{channel:e.num,volume:n})}})}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:(0,o.createComponentVNode)(2,i.Button,{width:"24px",color:"transparent",children:(0,o.createComponentVNode)(2,i.Icon,{name:"volume-up",size:"1.5",mt:"0.1rem",onClick:function(){return c("volume",{channel:e.num,volume:100})}})})})]})})],4,e.num)}))})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VotePanel=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.VotePanel=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.remaining,d=l.question,u=l.choices,p=l.user_vote,m=l.counts,h=l.show_counts,f=l.show_cancel;return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i.Section,{title:d,children:[(0,o.createComponentVNode)(2,i.Box,{mb:1,children:["Time remaining: ",Math.round(s/10),"s"]}),u.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:e+(h?" ("+(m[e]||0)+")":""),onClick:function(){return c("vote",{target:e})},selected:e===p})},e)})),!!f&&(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{content:"Cancel",onClick:function(){return c("cancel")}})},"Cancel")]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Wires=void 0;var o=n(0),r=n(1),i=n(2),a=n(3);t.Wires=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,s=l.wires||[],d=l.status||[];return(0,o.createComponentVNode)(2,a.Window,{children:(0,o.createComponentVNode)(2,a.Window.Content,{children:[(0,o.createComponentVNode)(2,i.Section,{children:(0,o.createComponentVNode)(2,i.LabeledList,{children:s.map((function(e){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{className:"candystripe",label:e.color_name,labelColor:e.seen_color,color:e.seen_color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Button,{content:e.cut?"Mend":"Cut",onClick:function(){return c("cut",{wire:e.color})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Pulse",onClick:function(){return c("pulse",{wire:e.color})}}),(0,o.createComponentVNode)(2,i.Button,{content:e.attached?"Detach":"Attach",onClick:function(){return c("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)}))})}),!!d.length&&(0,o.createComponentVNode)(2,i.Section,{children:d.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{color:"lightgray",mt:.1,children:e},e)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Workshop=void 0;var o=n(0),r=n(18),i=n(1),a=n(2),c=n(105),l=n(3);var s=function(e,t,n){return null===e.requirements||!(e.requirements.brass>t)&&!(e.requirements.power>n)};t.Workshop=function(e,t){var n=(0,i.useBackend)(t),r=n.act,s=n.data,p=s.brass_amount,m=s.power_amount,h=s.building,f=s.buildStart,C=s.buildEnd,g=s.worldTime,N=p.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),b=m.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,");return(0,o.createComponentVNode)(2,l.Window,{theme:"clockwork",resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,a.Section,{title:"Materials",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Brass",children:[N,(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",height:"19px",tooltip:"Dispense Brass",tooltipPosition:"bottom-left",ml:"0.5rem",onClick:function(){return r("dispense")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:b})]})})]}),(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.Flex,{mb:"0.5rem",children:h&&(0,o.createComponentVNode)(2,a.ProgressBar.Countdown,{start:f,current:g,end:C,bold:!0,children:["Building ",h,"\xa0(",(0,o.createComponentVNode)(2,c.Countdown,{current:g,timeLeft:C-g,format:function(e,t){return t.substr(3)}}),")"]})})]})})};var d=function(e,t){var n=(0,i.useLocalState)(t,"search",""),r=(n[0],n[1]),c=(0,i.useLocalState)(t,"sort",""),l=(c[0],c[1],(0,i.useLocalState)(t,"descending",!1)),s=l[0],d=l[1];return(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",mr:"0.5rem",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search by item name..",width:"100%",onInput:function(e,t){return r(t)}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:s?"arrow-down":"arrow-up",height:"19px",tooltip:s?"Descending order":"Ascending order",tooltipPosition:"bottom-left",ml:"0.5rem",onClick:function(){return d(!s)}})})]})})},u=function(e,t){var n=(0,i.useBackend)(t),c=(n.act,n.data),l=c.items,d=(0,i.useLocalState)(t,"search",""),u=d[0],m=(d[1],(0,i.useLocalState)(t,"sort","Alphabetical")),h=(m[0],m[1],(0,i.useLocalState)(t,"descending",!1)),f=h[0],C=(h[1],(0,r.createSearch)(u,(function(e){return e[0]}))),g=!1,N=Object.entries(l).map((function(e,t){var n=Object.entries(e[1]).filter(C).map((function(e){return e[1].affordable=s(e[1],c.brass_amount,c.power_amount),e[1]}));if(0!==n.length)return f&&(n=n.reverse()),g=!0,(0,o.createComponentVNode)(2,p,{title:e[0],items:n},e[0])}));return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"auto",children:(0,o.createComponentVNode)(2,a.Section,{children:g?N:(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No items matching your criteria was found!"})})})},p=function(e,t){var n=(0,i.useBackend)(t),c=n.act,l=n.data,d=e.title,u=e.items,p=function(e,t){if(null==e)return{};var n,o,r={},i=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,a.Collapsible,Object.assign({open:!0,title:d},p,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{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,a.Button,{icon:"hammer",disabled:!s(e,l.brass_amount,l.power_amount),onClick:function(){return c("make",{cat:d,name:e.name})},children:(0,r.toTitleCase)((0,r.toTitleCase)(e.name))}),(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",verticalAlign:"middle",lineHeight:"20px",style:{float:"right"},children:e.requirements&&Object.keys(e.requirements).map((function(t){return(0,r.toTitleCase)(t)+": "+e.requirements[t]})).join(", ")||(0,o.createComponentVNode)(2,a.Box,{children:"No resources required."})}),(0,o.createComponentVNode)(2,a.Box,{style:{clear:"both"}})]},e.name)}))})))}}]); \ No newline at end of file diff --git a/tools/ci/dbconfig.txt b/tools/ci/dbconfig.txt index 401cb197f5b..2ad92d39687 100644 --- a/tools/ci/dbconfig.txt +++ b/tools/ci/dbconfig.txt @@ -2,7 +2,7 @@ # Dont use it ingame # Remember to update this when you increase the SQL version! -aa SQL_ENABLED -DB_VERSION 31 +DB_VERSION 32 ADDRESS 127.0.0.1 PORT 3306 FEEDBACK_DATABASE feedback
    ISBNTitleTotal FlagsOptions